В интернете есть много туториалов как написать бота для Вконтакте, но все они имеют существенные недостатки для новичков. Они дают совсем минимальную базу из-за которой в будущем новичкам будет трудно понять как работают те или иные вещи.
В этом туториале я хочу показать как сделать максимально простого бота с довольно большим базовым функционалом.
Итак начнем.
Для начала подключим все библиотеки:
Теперь можно приступить к настройке бота и базы данных.
Именно в моем случае все данные находятся в файле config.py. Вы же можете прописать их где угодно. На функционал то никак не повлияет.
Для этого создадим функцию при помощи модуля PyMySQL:
Эта функция будет возвращать данные для дальнейшей работы с базой данных. Соответственно подставляем свои данные где видим «you_».
Для начала нам нужно перейти в настройки своей группы:
Выбрать вкладку Работа с API и создать ключ доступа(в будущем он нам пригодится для подключения к боту.
Перейти во вкладку «Long Poll API» и включить его. А так же выбрать последнюю из доступных версий
Перейти в «Типы событий» и так же включить все, что вам понадобится. Я включил например все
И последнее. Перейти в «Сообщения» > «Настройки для бота» и включить возможность ботов. Теперь можно перейти к самой программе.
Теперь пропишем подключение бота к long poll и проверку действий со стороны Вконтакте:
Теперь мы включили самого бота, который будет принимать входящие сообщения и анализировать их для дальнейшей работы.
Давайте добавим боту функцию отвечать на любые наши сообщения нашими же сообщениями. Для этого после последней строчки пропишем это:
Теперь про метод vk.messages.send().Это стандартный метод модуля vk_api. О методах можно будет прочитать на официальной документации Вконтакте(ссылка будет ниже).
Он позволяет отправлять сообщения пользователям.
Аргумент user_id указывает какому аккаунту это сообщение это надо отправить. В нашем случае event.obj.from_id указывает на аккаунт, который только что нам отправил сообщение. То есть мы отправляем сообщение тому человеку, который отправил его нам.
Указывать этот аргумент обязательно!
Аргумент random_id нужен для того, чтобы Вконтакте не отправлял сообщения по 2 раза. Указывать этот аргумент обязательно!
Аргумент message собственно указывает какое сообщение мы должны отправить. В event.obj.text хранится информация о том, какой текст в сообщении мы получили. Этот аргумент тоже обязателен.
Больше об аргументах к этому методу можно прочитать на официальной странице Вконтакте.
Теперь наш бот готов и мы можем его запустить. После запуска можно смело писать боту и увидеть результат.
На этом 1 часть закончена. Мы научились включать бота. Настраивать его, а так же отправлять сообщения.
Во 2 части мы разберем, как при помощи библиотеки PyMySQL заносить сообщения в базу данных и так далее.
Спасибо за чтение!
Официальная документация api Вконтакте
Официальная страница по модулю PyMySQL
В этом туториале я хочу показать как сделать максимально простого бота с довольно большим базовым функционалом.
Итак начнем.
Что нам понадобится?
- Python начиная с версии 2.7 (Весь код тестировался на версии 2.7.16 и 3.7.3)
- Модуль PyMySQL
- Модуль vk_api
- Модуль requests
- Группа Вконтакте (Внимание! Бот будет работать именно со стороны группы, а не стороны аккаунта человека)
- База данных (включая данные о пользователе и т.д)
Подключение
Для начала подключим все библиотеки:
import vk_api
from vk_api.utils import get_random_id
from from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
import pymysql.cursors
import requests
Теперь можно приступить к настройке бота и базы данных.
Именно в моем случае все данные находятся в файле config.py. Вы же можете прописать их где угодно. На функционал то никак не повлияет.
Подключение базы данных
Для этого создадим функцию при помощи модуля PyMySQL:
def getConnection():
connection = pymysql.connect(host='you_host',
user='you_user',
password='you_password',
db='you_db'
charset='utf8mb4',
cursorclass=mymysql.cursors.DictCursor)
return connection
Эта функция будет возвращать данные для дальнейшей работы с базой данных. Соответственно подставляем свои данные где видим «you_».
Настройка подключения к боту
Для начала нам нужно перейти в настройки своей группы:
Выбрать вкладку Работа с API и создать ключ доступа(в будущем он нам пригодится для подключения к боту.
Перейти во вкладку «Long Poll API» и включить его. А так же выбрать последнюю из доступных версий
Перейти в «Типы событий» и так же включить все, что вам понадобится. Я включил например все
И последнее. Перейти в «Сообщения» > «Настройки для бота» и включить возможность ботов. Теперь можно перейти к самой программе.
Подключение бота к группе
Теперь пропишем подключение бота к long poll и проверку действий со стороны Вконтакте:
vk_session = vk_api.VkApi(token="Ваш ключ, который вы создали на странице настроек")
#пример vk_session = vk_api.VkApi(token = "a6f87v8c9a9sa87a7af9a0f9f9v8a6s6c5b5m6n8bds09asc8d7b87d87bd87n"
vk = vk_session.get_api()
longpoll = VkBotLongPoll(vk_session, "id вашей группы Вконтакте")
#пример longpoll = VkBotLongPoll(vk_session, "637182735")
for event in longpoll.listen(): #Проверка действий
if event.type == VkBotEventType.MESSAGE_NEW:
Теперь мы включили самого бота, который будет принимать входящие сообщения и анализировать их для дальнейшей работы.
Работа с ботом
Давайте добавим боту функцию отвечать на любые наши сообщения нашими же сообщениями. Для этого после последней строчки пропишем это:
if event.type == VkBotEventType.MESSAGE_NEW: # последняя строчка
#проверяем не пустое ли сообщение нам пришло
if event.obj.text != '':
#проверяем пришло сообщение от пользователя или нет
if event.from_user:
vk.messages.send(
user_id=event.obj.from_id,
random_id=get_random_id(),
message=event.obj.text)
Теперь про метод vk.messages.send().Это стандартный метод модуля vk_api. О методах можно будет прочитать на официальной документации Вконтакте(ссылка будет ниже).
Он позволяет отправлять сообщения пользователям.
Аргумент user_id указывает какому аккаунту это сообщение это надо отправить. В нашем случае event.obj.from_id указывает на аккаунт, который только что нам отправил сообщение. То есть мы отправляем сообщение тому человеку, который отправил его нам.
Указывать этот аргумент обязательно!
Аргумент random_id нужен для того, чтобы Вконтакте не отправлял сообщения по 2 раза. Указывать этот аргумент обязательно!
Аргумент message собственно указывает какое сообщение мы должны отправить. В event.obj.text хранится информация о том, какой текст в сообщении мы получили. Этот аргумент тоже обязателен.
Больше об аргументах к этому методу можно прочитать на официальной странице Вконтакте.
Запуск
Теперь наш бот готов и мы можем его запустить. После запуска можно смело писать боту и увидеть результат.
Итог
На этом 1 часть закончена. Мы научились включать бота. Настраивать его, а так же отправлять сообщения.
Во 2 части мы разберем, как при помощи библиотеки PyMySQL заносить сообщения в базу данных и так далее.
Спасибо за чтение!
Полезные ресурсы
Официальная документация api Вконтакте
Официальная страница по модулю PyMySQL
Playa
Объясните, как можно разбивать на части статью, с названием "… за час"?
abbaturSF Автор
Под предлогом «… за час» я имел ввиду, что зная полностью, можно за час написать бота с заявленным функционалом. Сам я посчитал что пихать в одно место много информации не есть хорошо.
Извините за предоставленные неудобства.