Эхо-бот для ВКонтакте

Сообщество готово, токен на руках. Оживим его кодом. Соберём эхо-бота, который повторяет сообщения, прямо как наш самый первый бот в Telegram. Заодно увидишь: каркас другой, а суть та же.

После урока сможешь: объяснить тему «Эхо-бот для ВКонтакте» и выполнить связанный с ней учебный шаг без подсказки.

Новая библиотека

Для ботов ВК возьмём библиотеку vk_api. Поставь её: pip install vk_api. И положи токен сообщества в config.py, рядом с прежним. Назови его, например, VK_TOKEN, чтобы не путать с токеном Telegram.

Подключаемся к ВК

import vk_api
from vk_api.longpoll import VkLongPoll, VkEventType
from config import VK_TOKEN

vk_session = vk_api.VkApi(token=VK_TOKEN)
longpoll = VkLongPoll(vk_session)

vk_api.VkApi(token=VK_TOKEN) это вход в ВК по твоему ключу, как TeleBot(TOKEN) в Telegram. VkLongPoll(vk_session) это слушатель новых сообщений, аналог поллинга.

Отправляем ответ

def otpravit(user_id, text):
    vk_session.method("messages.send", {
        "user_id": user_id,
        "message": text,
        "random_id": 0,
    })

vk_session.method("messages.send", {...}) это «вызови у ВК метод отправки сообщения». В фигурных скобках параметры: кому (user_id), что (message) и random_id. Последнее это защита ВК от случайных повторов, для учебного бота смело ставим 0.

Главное отличие: цикл вместо декораторов

Вот тут самая заметная разница. В Telegram мы вешали обработчики через значок @ над функциями. Во ВКонтакте обработчиков-табличек нет. Вместо них один цикл, который крутится и ловит события:

for event in longpoll.listen():
    if event.type == VkEventType.MESSAGE_NEW and event.to_me:
        otpravit(event.user_id, event.text)
  • for event in longpoll.listen() это бесконечный цикл: на каждое новое событие он даёт нам event, описание того, что случилось.
  • if event.type == VkEventType.MESSAGE_NEW and event.to_me это фильтр: «если это новое сообщение и оно пришло боту». Похоже на наши фильтры обработчиков.
  • event.user_id это кто написал, event.text это что написал. Это близнецы message.chat.id и message.text из Telegram.

Полный код

import vk_api
from vk_api.longpoll import VkLongPoll, VkEventType
from config import VK_TOKEN

vk_session = vk_api.VkApi(token=VK_TOKEN)
longpoll = VkLongPoll(vk_session)

def otpravit(user_id, text):
    vk_session.method("messages.send", {
        "user_id": user_id,
        "message": text,
        "random_id": 0,
    })

for event in longpoll.listen():
    if event.type == VkEventType.MESSAGE_NEW and event.to_me:
        otpravit(event.user_id, event.text)

Запусти программу. Зайди в своё сообщество ВК и напиши ему в личку. Бот повторит твоё сообщение. Тот же эхо-бот, что и в Telegram, только в новой среде.

Контрольный вопрос. Какой библиотекой пишут ботов для ВКонтакте? Напиши имя (как в pip install).

Подсказка: pip install ____

Онлайн-проверка ответа появится позже

Задание. Поставь vk_api, положи токен сообщества в config.py, собери эхо-бота из урока и проверь его в личке сообщества. Напиши тремя пунктами, что общего и что разного у бота ВК и бота Telegram.

Подсказка: Подключение через VkApi + VkLongPoll, ответ через method(‘messages.send’), события ловишь в цикле for event in longpoll.listen().

✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.

Онлайн-проверка ответа появится позже

Зачёт, если:
✅ vk_api установлен, токен сообщества в config.py, эхо-бот отвечает в личке сообщества;
✅ тремя пунктами названо, что общего и что разного у бота ВК и бота Telegram.

Назад  ·  ↑ В начало урока  ·  ⌂ В начало курса  ·  Вперёд →

Школа Виктора Комлева