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