habrahabr

Бот для VK на Python с MySQL за час ч.1

  • пятница, 17 мая 2019 г. в 00:20:53
https://habr.com/ru/post/452162/
  • Python
  • Вконтакте API


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

В этом туториале я хочу показать как сделать максимально простого бота с довольно большим базовым функционалом.

Итак начнем.

Что нам понадобится?


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