Как сделать команды кика, бана, варна в боте вк

Добро пожаловать!

Зарегистрировавшись у нас, вы сможете обсуждать, делиться и отправлять личные сообщения другим участникам нашего сообщества.

Зарегистрироваться!
  • Если Вы желаете помогать развитию проекта, готовы заполнять раздел(-ы) и подсказывать другим пользователям на портале, есть возможность попасть в команду редакторов. Для этого следует обратиться в техническую поддержку
Пользователь
Регистрация
13 Авг 2024
Сообщения
28
Здравствуйте, я пишу своего бота с нуля.
Сделал так, что-бы он работал во всех беседах.
Бот работает, но нету команд бана, кика, варна и т.д.
Мог бы кто-то помочь? Был бы очень благодарен!
 
Дальше — Больше
Редактор
Регистрация
21 Янв 2023
Сообщения
593
Для начала, создаем функцию, на отправку сообщений ,с помощью методов,
Далее - создаем обработчик событий, где будет прописана команда, обратная связь от бота, и вызов метода (removeChatUser),

Примерно это будет выглядеть так;

Python:
# функция отправки сообщений
def send_message(peer_id, text):
    vk.messages.send(peer_id=peer_id, message=text, random_id=0)

# обработчик событий для команд
for event in longpoll.listen():
    if event.type == VkBotEventType.MESSAGE_NEW and event.from_chat:
        message = event.message
        chat_id = event.chat_id

        # Если команда /kick (прослушиваем вызов команды)
        if message['text'].startswith('/kick'):
            args = message['text'].split()
            if len(args) < 2:
                send_message(message['peer_id'], "Укажи юзера для кика")
                continue
            
            try:
                user_id = int(args[1])
                vk.messages.removeChatUser(chat_id=chat_id, user_id=user_id)
                send_message(message['peer_id'], f"Пользователь с ID {user_id} был кикнут с чата")
            except vk_api.exceptions.ApiError as e:
                send_message(message['peer_id'], f"Ошибка: {e}")

данный код, выступает лишь примером - и не факт, что он будет работать, ибо это лишь сырая база.
 
Пользователь
Регистрация
13 Авг 2024
Сообщения
28
Привет!
Спасибо.
Но есть другая проблема(Она не критичная, но я не знаю как ее решить).
В общем, бот работает, но если я указываю пользователя(упоминаю его) то в консоли ошибка:


Traceback (most recent call last):
File "C:\wekmanager\manager.py", line 27, in <module>
user_id = int(args[1])
ValueError: invalid literal for int() with base 10: '[id630302928|Беєр]'



Помоги, пожалуйста)
 
Пользователь
Регистрация
16 Июл 2024
Сообщения
13
Для кика по юзернейму используй это :
Python:
def extract_user_id(arg):
    if arg.startswith("[id") and "|" in arg:
        user_id = arg[3:].split("|")[0]
        try:
            return int(user_id)
        except ValueError:
            return None
    elif arg.startswith("@"):
        return get_user_id(arg[1:])
    else:
        try:
            return int(arg)
        except ValueError:
            return None
В команду :
Код:
name = args[0].replace('@', '')
                    user_id = extract_user_id(name)
 
Дальше — Больше
Редактор
Регистрация
21 Янв 2023
Сообщения
593
Для кика по юзернейму используй это :
Python:
def extract_user_id(arg):
    if arg.startswith("[id") and "|" in arg:
        user_id = arg[3:].split("|")[0]
        try:
            return int(user_id)
        except ValueError:
            return None
    elif arg.startswith("@"):
        return get_user_id(arg[1:])
    else:
        try:
            return int(arg)
        except ValueError:
            return None
В команду :
Код:
name = args[0].replace('@', '')
                    user_id = extract_user_id(name)
OFFTOP

это пиздец, я иначе не отвечу...

 
Пользователь
Регистрация
13 Авг 2024
Сообщения
28
Для кика по юзернейму используй это :
Python:
def extract_user_id(arg):
    if arg.startswith("[id") and "|" in arg:
        user_id = arg[3:].split("|")[0]
        try:
            return int(user_id)
        except ValueError:
            return None
    elif arg.startswith("@"):
        return get_user_id(arg[1:])
    else:
        try:
            return int(arg)
        except ValueError:
            return None
В команду :
Код:
name = args[0].replace('@', '')
                    user_id = extract_user_id(name)

Пишет такую ошибку:
NameError: name 'messages' is not defined. Did you mean: 'message'?


Команда:

if message['text'].startswith('/кик'):
args = message['text'].split()
if len(args) < 2:
send_message(message['peer_id'], "Укажи юзера для кика")
continue

try:
name = args[0].replace('@', '')
user_id = extract_user_id(name)

messages.removeChatUser(chat_id=chat_id, user_id=user_id)
send_message(message['peer_id'], f"Пользователь с ID {user_id} был кикнут с чата")
except vk_api.exceptions.ApiError as e:
send_message(message['peer_id'], f"Ошибка: {e}")



Также я вставил твой код в команду:
name = args[0].replace('@', '')
user_id = extract_user_id(name)


Полосами в команде я отметил код, который ты мне сказал вставить
Может я что то не правильно сделал?
 
Сверху