Python vk api longpoll бот отвечать на следующее сообщение

Обновлено: 11.05.2024

Создание ботов - довольно заезжанная тема, но все уроки, статьи и различного рода документация дают информацию только о том, как построить бота в один уровень без возможности создания древа из различных всплывающих меню (клавиатур).
А это нужно для создания:

Сложных ботов с несколькими уровнями "глубины" (различные меню/клавиатуры)

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

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

Можно сделать многоуровневого бота на Python сразу (без, например, библиотеки threading и без базы данных), но он будет адекватно работать только для одного пользователя в текущий момент времени, потому что одна клавиатура и текущее положение пользователя будет сохраняться в MainThread (основном треде) для всех.

Предварительная подготовка

Устанавливаем MySQL на необходимую машину:

Или через терминал (для Linux):

Если у Вас не установлены необходимые библиотеки - то устанавливаем их через терминал:

В базе данных нам предварительно нужно создать базу данных в MySQL с названием vktest с таблицей user и полями - iduser и position. Я создаю БД с кодировкой utf8mb4:

Базовый алгоритм


Весь код в основной функции завернут в while True из-за того, что раньше каждую ночь (возможно также и сейчас) примерно в 4:30 по МСК переставал отвечать VK на запросы и бот падал (видимо перезагружали серверы).

Основная идея тренировочного бота - это сделать три меню, где Основное меню 1 будет иметь возможность попасть в Меню 2 и в Меню 3, а они, в свою очередь, могли вернуться обратно в Основное меню 1:


В формате меню в самом ВКонтакте хочется представить это так:


У нас 3 клавиатуры, которые нужно создать в виде файлов с расширением .json в папке с main.py. Первый файл keyboard_main.json будет с кодом:

Второй файл keyboard_durov.json с кодом:

Третий, практически идентичный - keyboard_zuckerberg.json:

Если number_position от 1 до 3 - то бот выполняет код в соответствующем для него ветвлении if-elif-else.

Функция take_position(id_user) выглядит таким образом:

В свою очередь add_new_line(id_user) выглядит так:

Когда пользователь имеет свою строку в БД - он уже может приступать к взаимодействию с ботом. И обновление его положения - это функция update_position(id_user, new_position), которая выглядит таким образом:

Эти три функции не будут работать без основной функции для БД (которую необходимо добавить практически в самое начало, сразу после импорта библиотек) и вписать ваши данные от БД. Я изменяю только название БД и кодировку на те, которые мы создали в самом начале:

Ничего не забыли? Ах да, нам же нужны крутые цитаты Дурова и Цукерберга:

durov_quote() и zuckerberg_quote()

Для них мы использовали встроенные списки Python и подключили библиотеку random.

И весь код main.py (целиком) под спойлером для удобства:

Заключение


Этой статьей я поделился с массами адекватным, как мне кажется, решением для создания многоуровневого бота. Надеюсь, это защитит многих на старте от решений в виде цикла longpoll в цикле longpoll и в ещё одном longpoll, из которых довольно трудно выйти. Всем удачи.


Это новый вид статьи, в котором мы не будем говорить про PHP, многим python превосходит php, а для начинающих он покажется проще. Данная статья будет содержать в себе следующие шаги:

После установки запускаем командую строку:


И пишем команду:


Если Вы сделали все правильно, то увидите список команд и опций

На этом установка Python успешно завершена. Переходим к установке IDE PyCharm


Забегая вперед, у меня по умолчанию в настройках программы стоял Python 2.7

Нам нужна последняя версия, открываем File -> Settings. -> Project interpreter и из выпадающего меню выбираем последнюю версию, или добавляем ее туда нажав на Show All…

Теперь можно создавать новый проект.


В Pycharm выбираем: File -> New Project и создаем новый проект, выбрав необходимые настройки:

Теперь создаем новый файл, назовем его new.py, так как Python использует расширение .py (английскими буквами, не путайте) расширение указывать не обязательно.

Пишем наш первый самый простой код:
И нажав правой кнопкой мыши по файлу, выбираем: Run 'new'

Все работает. Теперь нам нужно установить библиотеку vk_api, для этого открываем терминал прямо в PyCharm и пишем команду:



Installing collected packages: urllib3, chardet, idna, certifi, requests, enum34, six, vk-api
Running setup.py install for vk-api … done
Successfully installed certifi-2019.6.16 chardet-3.0.4 enum34-1.1.6 idna-2.8 requests-2.22.0 six-1.12.0 urllib3-1.25.3 vk-api-11.4.0

Если в конце видите такой текст, библиотека успешно установлена, можно импортировать ее в проект и писать первый код:

Это код из примера, благодаря нему мы убедимся что сделали все правильно. Вставить его нужно в файл new.py предварительно удалив все оттуда, что мы написали ранее.


Для начала настроим наше сообщество.
Создаем ключ

Копируем ключ и вставляем его в наш скрипт:
Вместо 'your_group_token' указываем ключ сообщества
Вместо 'your_group_id' указываем ID нашего сообщества

Теперь переходим во вкладку Long Poll APIи включаем его

Далее, обязательно включаем тип событий, это частая ошибка при создании ботов, забыв включить события, бот не будет работать! Выбираем все что есть.


Как узнать названия других событий? Они будут выводится в консоли, так как в коде используется:



Тут мы получили 2 события:

VkBotEventType.WALL_POST_NEW - Новый пост
VkBotEventType.GROUP_OFFICERS_EDIT - Выдача админ прав в самой группе

Документация и больше примеров можно посмотреть на GitHub . Если Вам интересен этот язык и вы хотите видеть больше статей по Python, пишите в комментарии об этом!

И все же в чем разница между CallBack API и Long Poll API? А разница есть и она большая.
Когда Вы используете CallBack API, ВК сам отправляет Вам происходящее событие на сервер, нам остается только получить его и обработать, у Long Poll API все наоборот, ВК ничего не отправляет, а хранит все события у себя на серверах, Вам нужно самому их получать и обрабатывать, Long Poll API подходит для высоко нагруженных проектов, в идеале советуем использовать оба типа получения событий. На этом наша статья подходит к концу, в следующий раз мы напишем как запустить Long Poll используя PHP, всем хорошего кодинга и настроения

Статья рассчитана для начинающих программистов. Метод работы программы очень прост и любой, кто умеет разбираться в синтаксисе Питона и немного знающий ООП сможет его реализовать для своих нужд. Но в принципе даже не зная никаких принципов ООП, думаю можно научиться добавлять простые функции или хотя бы в крайнем случае использовать готовые исходники из GitHub.

Что есть в этой статье?

Создание основы бота. После этого его можно будет запрограммировать как-угодно. Автоматизировать какую-то рутину или использовать как собеседник.

Улучшенная (слегка усложненная версия бота). Я решил сначала представить простой процедурный код бота, а затем слегка усложнить его, добавив функции, значительно улучшающие работу бота.

Добавление функции передачи погоды. Научим бота говорить нам погоду.

Создание бота в ВК

Начнем мы с создания бота, а именно группу в ВК.

Выберите любой тип сообщества и введите название, тематику группы.

Создание простого чат-бота в VK на Python 3., изображение №1

Создание простого чат-бота в VK на Python 3., изображение №2

Далее, необходимо создать API-ключ:

Создание простого чат-бота в VK на Python 3., изображение №3

Затем выберите нужные вам параметры с доступом для вашего API-ключа:

Создание простого чат-бота в VK на Python 3., изображение №4

Скорее всего, вам придётся подтверждать действие в ВК с помощью мобильного телефона. Затем скопируйте полученный API-ключ где-нибудь в файл. Он нам еще понадобится. Выглядит он так:

Создание простого чат-бота в VK на Python 3., изображение №5

Создание простого чат-бота в VK на Python 3., изображение №6

Приступим к программной части бота

Мы не будем реализовывать его через запросы к ВК, а если быть точнее, просто используем библиотеку VkLongPool, которая сделает это за нас.

Для этого необходима библиотека vk_api. Установим его через pip:

Приступим к самому коду:

Импортируем нужные модули:

Затем пропишем легкий и понятный код:

Авторизовавшись как сообщество и настроив longpool:

Войдем в основной цикл:

В нем мы циклически будем проверять на наличие event-ов. А получить тип event-а сможем с помощью event.type.

Создание простого чат-бота в VK на Python 3., изображение №7

Итак, мы создали очень простого бота в ВК с такой же простой реализацией. А логику бота можно программировать как душе угодно.

Теперь приступим к более реальному программированию

Создадим класс VkBot в файле vk_bot.py , который будет служить нам ботом.

И добавим туда метод с помощью которого можно получить имя пользователя через vk id.

Это делается с помощью beatifulsoup4.

Устанавливаем если его нет:

На него есть достаточное количество статей, которые стоит изучить. С помощью него же создадим еще несколько методов:

Измените параметр _get_weather на нужный город, в последствии этот метод можно будет вызывать с указанием города, а по умолчанию будет ваше указанное значение.

С помощью этих методов мы сможем получить время и погоду. Эти методы вырезаны из моего основного проекта бота. Следует организовать их в отдельных пакетах и классах, применяя наследование. Но ради примера работы, я решил вместить все это в один класс бота, что конечно плохо.

Теперь вернемся к запускаемому файлу:

Импортируем класс нашего бота:

Изменим основной наш цикл:

Создание простого чат-бота в VK на Python 3., изображение №8

Это усложнение программы просто необходимо, если вы хотите дальше улучшить функционал бота:

Создайте отдельные пакеты и классы для каждой функции _get_time и _get_weather. Организуйте наследование с общего класса. И каждую новую функцию определяйте в отдельных классах, лучше всего, конечно, еще и разделить на пакеты.

Добавьте словарь с ключом идентификатора пользователя и значением объекта бота. Таким образом, не придется каждый раз в цикле создавать объект бота. К тому же, это обеспечит пользование несколькими пользователями сразу в сложных конструкциях.

Таким образом, выбрав хорошую архитектуру кода, вы сможете создать многофункционального бота.

К примеру, я научил своего бота проигрывать музыку на компьютере, открывать сайты сидя с телефона. Присылать рецепты блюд на завтрак, обед, ужин.

Вы же можете редактировать бота под себя.

Основной проект бота (улучшенный) на GH:

:yesmate:

Это моя первая статья (помидоры придержите) , по этому тут будет все кратко и понятно

дальше заходишь в cmd и пишешь:

Перейдем к главному!
Бота мы будем писать с помощью longpoll, по этому трудностей не должно быть.
Подробнее о longpoll можете прочитать тут.

Для начала импортим либы

Ну это так скажем, ключ авторизации твоей группы.

Так как же его получить?

Заходим в свою группу, нажимаем сюда:

Дальше кликаем сюда:

Дальше нажимаем на все галочки и "Cоздать"

Теперь надо, чтобы бот брал random id и мог писать в беседу

Пишем id группы

Теперь сделаем главный фикс для будущих функций. ( json )

Пример самого просто словаря:

Молодец! За 10 минут ты научился писать бота, а теперь иди и делай 1000 триггеров на все слова!

Надеюсь что было понятно. Если понравится первая часть, оставляйте реакцию и пишите аргументированную критику (Она помогает мне улучшать свой контент)!

Читайте также: