Ответы пользователя по тегу ВКонтакте
  • Как настроить бота ВК для беседы?

    @barkami
    После установки модуля vk_api сделайте следующее:
    1. Импортируйте необходимые классы и функции:
      from vk_api import VkApi
      from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
      from vk_api.utils import get_random_id
      import time


    2. Создайте объекты и переменные, с которыми будете работать всё время:
      vk_session = VkApi(token='ТОКЕН ВАШЕГО БОТА')
      longpoll = VkBotLongPoll(vk_session, АЙДИ ВАШЕГО БОТА (СООБЩЕСТВА ВКОНТАКТЕ))
      bot_name = "рыбка"  # никнейм для обращения к боту


    3. Создайте функцию для отправки сообщения:
      def sender(text, peer_id):
          vk_session.method('messages.send', {'random_id':get_random_id(), 'message':text, 'peer_id': peer_id, } )

      где random_id - уникальный идентификатор сообщения бота, message - текст сообщения, а peer_id - айди диалога (хоть личные сообщения, хоть многопользовательская беседа)

    4. В бесконечном цикле с обработкой ошибок (ВКонтакте перезагружает сервера время от времени, из-за чего бот будет "отваливаться" - будем ждать 30 секунд и пробовать снова) будем отправлять запрос на получение новых событий и принимать их при наличии таковых. Весь код засунем в функцию main и будем вызывать её при запуске программы:
      def main():
          while True:
              try:
                  for event in longpoll.listen():
                      # если бот получил новое сообщение
                      if event.type == VkBotEventType.MESSAGE_NEW and bot_name in event.obj.text.lower():
                          # если сообщение из чата
                          if event.from_chat:
                              sender("Привет! Какая классная у вас беседа тут!", event.obj.peer_id)
                          # если сообщение от пользователя
                          elif event.from_user:
                              sender("Привет! О чём поговорим?", event.obj.peer_id)
              except:
                  print("\n Попытка восстановить соединение через 30 секунд \n")
                  time.sleep(30)
      
      
      if __name__ == "__main__":
          main()



    P.S.: предварительно сгенерируйте ключ доступа, включите Long Poll API и настройте тип получаемых событий. Лично я пользовался версией Long Poll API 5.85, а так как синтаксис ответа от ВК может отличаться от версии к версии API, то при появлении странных ошибок попробуйте переключиться на неё.
    P.P.S.: потом посмотрите на внутренности объекта event, чтобы понять что да как там и понять как лучше обрабатывать события.
    Ответ написан
    7 комментариев