Skip to content

Instantly share code, notes, and snippets.

@Khazbs
Last active November 24, 2018 21:53
Show Gist options
  • Save Khazbs/0f33dd8eedc471942b70227fd6c082a4 to your computer and use it in GitHub Desktop.
Save Khazbs/0f33dd8eedc471942b70227fd6c082a4 to your computer and use it in GitHub Desktop.
Объяснение vk.py

Что происходит в vk.py?

Как вы могли заметить, этот файл (также будем называть его модуль vk) называется vk.py и находится в папке api. Это наталкивает на мысль, что он тем или иным образом свзяан с VK API для чат-ботов. Давайте разберемся, как именно.

Для чего нужен этот модуль?

Схема отношений между чат-ботом, ВК и пользователями

Модуль vk играет роль посредника между основными "мозгами" нашего бота и программным интерфейсом ботов ВКонтакте. Сделано это для того, чтобы сами "мозги" бота (модуль core) не были заняты лишними мыслями о том, как правильно работать с VK API, и могли спокойно заниматься тем, чем и должны - обработкой сообщений.

Говоря простым языком, модуль vk - это дипломат, обеспечивающий нормальные отношения между нашим чат-ботом и серверами ВКонтакте. Этот модуль отвечает за отправку и получение ботом сообщений ВК, а также за то, чтобы наш бот и ВК понимали друг друга. Если вы читали пояснение к base.py, то это как раз один из тех мостов, о которых там идет речь.

Что есть в этом модуле?

Класс VkApi

Этот класс представляет собой частичную модель API для ботов ВКонтакте. Он наследуется от класса Api из модуля base и являеся его доработанной для VK API версией. В нем реализованы особенности, необходимые для работы конкретно с VK API.

Внутри класса VkApi реализованы:

Метод get_message()

Этот метод получает сообщения ВК, определяет их тип (новое сообщение, уведомление о новом собеседнике, уведомление об уходе собеседника). В случае, если это уведомление о новом собеседнике, пользователь добавляется в базу данных бота, и этот факт записывается в журнал событий бота (лог). В качестве результата метод возвращает полученное сообщение, которое бот впоследствии будет обрабатывать.

Метод message()

Этот метод отправляет сообщения ВК. Параметр message - текст сообщения (строка), параметр chat - уникальный номер чата ВК (целое число), в который его нужно отправить. Факт отправки сообщения записывается в журнал событий бота (лог).

Метод exec()

Этот метод непосредственно используется для обращения к сервисам VK API. Он подключается к серверам ВКонтакте, совершает запрос необходимого действия или информации и получает ответ. В качестве результата метод возвращает полученный с сервера ответ.

Класс VkMessage

Этот класс представляет собой частичную модель сообщений ВКонтакте. Он наследуется от класса Message из модуля base и является его доработанной для VK API версией. В нем есть все то, что было в его родителе base.Message, но также присутствуют некоторые характерные особенности, необходимые для работы конкретно с сообщениями ВКонтакте.

По наследству от base.Message классу VkMessage достались:

Свойство text

Текст сообщения.

Свойство user

Автор сообщения.

Свойство kind

Тип сообщения.

Свойство chat

Чат, в который отправлено сообщение.

Метод __repr__()

Этот метод представлет информацию о сообщении в виде строки формата "Сообщение <типа> от <отправителя>: <текст сообщения>". Результат выполнения - эта строка.

Внутри класса VkMessage реализованы:

Свойство platform

Платформа, через которую отправляется сообщение. Для VkMessage этому свойству соответствует значение EPlatform.vk (то есть ВКонтакте).

Метод reply()

Этот метод позволяет ответить на данное сообщение ВК, то есть отправить сообщение в тот же chat, откуда оно родом. Параметр message - текст сообщения (строка). Этот метод будет удобно использовать в нашем чат-боте при обработке сообщений, вызывая его прямо из самого сообщения.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment