Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Api VK. Бот на Python

Николай Баженов Ученик (155), на голосовании 1 год назад
Мной был реализован ВК чат-бот на Питоне с помощью библиотеки vkbottle. По определённым триггерам бот начинает отвечать клиенту и далее идёт по скрипту заказа. Но в случае, если в чат заходит менеджер, и начинает отвечать клиенту от лица сообщества, бот до сих пор продолжает скрипт заказа. Меня интересует возможность временно/полностью остановить работу скрипта в случае, если в чате начинает отвечать менеджер. Каким образом можно уловить это с помощью VK Api? Буду очень благодарен. Если потребуется уточнения - скину куски кода
Голосование за лучший ответ
Chromatic Scale Искусственный Интеллект (128492) 1 год назад
Для того чтобы определить, кто отправил сообщение в чате ВКонтакте, можно воспользоваться методом messages.getConversationMembers из VK API. Этот метод возвращает список участников беседы, и для каждого участника указывается его роль в беседе.

Для того чтобы остановить работу скрипта в случае, если в чате начинает отвечать менеджер, можно воспользоваться следующим подходом:

При запуске скрипта получить список участников беседы с помощью метода messages.getConversationMembers.
Найти в списке участников беседы того, кто является менеджером (обычно менеджеры имеют роль "администратор" или "модератор").
Когда бот получает сообщение в чате, проверить, кто отправил это сообщение, с помощью метода messages.getById.
Если отправитель сообщения является менеджером, то остановить работу скрипта, например, выбросив исключение или просто выйдя из функции, которая выполняет скрипт заказа.
Пример кода, который может реализовать этот подход, может выглядеть так:
 import vkbottle 
from vkbottle.bot import Bot, Message
from vkbottle.api import API
from vkbottle.types import ConversationMemberRoleType

bot = Bot(token="YOUR_TOKEN")
api = API(token="YOUR_TOKEN")

# Получаем информацию о беседе и её участниках
conversation_id = YOUR_CONVERSATION_ID
members = api.messages.getConversationMembers(peer_id=conversation_id).items

# Ищем менеджера в списке участников беседы
manager = next((m for m in members if m.member_id == YOUR_MANAGER_ID and m.role in [ConversationMemberRoleType.MODERATOR, ConversationMemberRoleType.ADMIN]), None)

@bot.on.message()
async def handle_message(message: Message):
# Получаем информацию о отправителе сообщения
sender_info = api.messages.getById(message_ids=[message.id]).items[0].from_id
if sender_info == YOUR_MANAGER_ID:
# Остановить скрипт, если отправитель сообщения является менеджером
return
else:
# Выполнять скрипт заказа
...
В этом примере YOUR_CONVERSATION_ID - это идентификатор беседы, в которой работает бот, YOUR_MANAGER_ID - идентификатор пользователя, который является менеджером, и handle_message - это функция, которая обрабатывает входящие сообщения и выполняет скрипт заказа.
Николай БаженовУченик (155) 1 год назад
Прошу прощения, я не уточнил важную информацию. Бот работает с чатами в группе. Каждый чат - отдельный диалог с пользователем. И мои администраторы могут, открывая список диалогов самой группы, проваливаться в диалог клиента и группы(от лица которой отвечает бот). И вот надо как-то уловить тот факт, что в диалоге группы и клиента, от лица группы начал общаться клиент.
Николай Баженов Ученик (155) Николай Баженов, от лица группы начал общаться администратор*
Похожие вопросы