Как можно изменить код Python для реализации команды сообщества ВКонтакте, которая будет работать как при ответе на сообщение, так и при упоминании пользователя через символ "@"?
Чтобы использовать команду с помощью символа @, можно добавить обработку упоминаний пользователя в тексте сообщения. Это можно сделать путем проверки наличия символа @ перед именем пользователя. Если символ @ присутствует, то можно выполнить необходимые действия, например, отправить ответ или выполнить какую-то функцию. Для изменения кода Python для реализации команды сообщества ВКонтакте с использованием символа @, можно добавить следующую проверку: ```python import vk_api from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType vk_session = vk_api.VkApi(token='токен_сообщества') vk = vk_session.get_api() longpoll = VkBotLongPoll(vk_session, 'id_группы') for event in longpoll.listen(): if event.type == VkBotEventType.MESSAGE_NEW: if event.object.payload != None: user_id = event.object.message['from_id'] message = event.object.message['text'] if '@' in message: mentioned_user = message.split('@')[1] mentioned_user_id = vk.users.get(user_ids=mentioned_user, name_case='nom')['response'][0]['id'] if mentioned_user_id == user_id: # выполнить действие при упоминании самого себя vk.messages.send(user_id=user_id, message='Вы упомянули сами себя') else: # выполнить действие при упоминании другого пользователя vk.messages.send(user_id=user_id, message=f'Вы упомянули пользователя {mentioned_user}') ``` Этот код будет проверять наличие символа @ в тексте сообщения и извлекать имя упомянутого пользователя. Затем он будет отправлять сообщение об упоминании самого себя или другого пользователя.
Можно без regexp обойтись, просто методами самого vkbottle.
Вместо всего этого
@bot.on.message(text=["Призми погладить", "Рп погладить", "[id{user_id}|Фурина]"]) async def pat_user(message: Message): # Проверяем, было ли упоминание пользователя через @ mentioned_user_id = None mentioned_users = re.findall(r'\[id(\d+)\|.*?\]', message.text) if mentioned_users: mentioned_user_id = mentioned_users[0]
Просто напрямую прописать этот формат в хэндлере, и затем использовать найденные им значения в функции
@bot.on.message(text=["Рп погладить [id<mentioned_user_id>|<mentioned_user_name>]", "Призми погладить", "Рп погладить"]) async def pat_user(message: Message, mentioned_user_id=None, mentioned_user_name=None): mentioned_user_id ... # уже можно использовать напрямую # можно и само имя использовать, если вдруг пригодится mentioned_user_name
Так должно работать для "Рп погладить [idxxx|кто-тотам]", для второго аналогично сделать.