Как можно использовать команду с помощью символа @?

Как можно изменить код Python для реализации команды сообщества ВКонтакте, которая будет работать как при ответе на сообщение, так и при упоминании пользователя через символ "@"?
  • 9 марта 2024 г. 11:28
Ответы на вопрос 2
Чтобы использовать команду с помощью символа @, можно добавить обработку упоминаний пользователя в тексте сообщения. Это можно сделать путем проверки наличия символа @ перед именем пользователя. Если символ @ присутствует, то можно выполнить необходимые действия, например, отправить ответ или выполнить какую-то функцию.

Для изменения кода 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|кто-тотам]", для второго аналогично сделать.
Похожие вопросы