Всем пользователям Хабра, привет! В данной статье я хочу изложить опыт в использовании фреймворка VkBottle. Я заметил, что на хабре есть только одна запись по поводу данного репозитория, поэтому хочу сделать мини гайд по его использованию, на примере ЭХО бота.
Кто я такой?
Меня зовут Тим, я из России. Я обычный подросток, учусь в 9-м классе, физ-мат профиль. Заинтересовался программированием относительно недавно(3/4 года назад), выбрал ЯП Python, потому что хотелось начать с чего-то более понятного и легкого. Сам самоучка, большинство курсов - шаблонная дичь, но опять же не все. Сам я учился по книжкам, как по мне - самое лучшее средство для получения знаний. Здесь описано сугубо мое мнение и мой опыт(хоть он и небольшой), который может помочь таким же новичкам, как и я.
Что в нем такого и почему не стоит использовать vk_api?
Лично я, когда мне стала интересна сфера ботов Вконтаке, начал искать библиотеку для реализации моего интереса. Первое что все рекомендовали - vk_api, но мне, в то время не очень опытному пользователю языка, было сложно понять данную библиотеку. Тогда я начал искать альтернативу, искал долго, уже было потерял надежду... Но тут на просторах GitHub, я встретил интересную библиотеку - VkBottle(2.7). В чем заключается преимущество данной библиотеки? А вот в чем: проста в изучение, асинхронна, позволяет за меньшее количество строк написать больший функционал. А так же у нее есть своя беседа с отзывчивым комьюнити. Хочу подметить, библиотека использует LongPoll и CallBack api.
Импорты и подготовка среды
В качестве редактора для написания кода, я буду использовать VScode. Знаю, под python лучше использовать IDE Pycharm, но мне приятнее работать с VScode, а удобство - один из самых важных факторов.
Думаю у вас уже есть редактор и установлен питон, поэтому давайте перейдем к импортам. Раздел с гайдом по установке можно найти на официальной странице библиотеки. Но я так же продублирую эти действия в данной статье. И так, ниже представлены команды, которые вы должны выполнить в вашем терминале:
Спойлер
pip install -U https://github.com/timoniq/vkbottle/archive/master.zip
pip install loguru
pip install uvloop
Теперь, когда у вас установлен сам VkBottle и библиотеки для вывода логов, можно приступить к написанию самого бота.
Наконец-то этот школьник что-то покажет, а не будет балоболить
Далее вы должны создать сообщество под бота, в данном гайде будет использован LongPoll api, так что включаем сообщения сообщества, а в настройках API, ставим LongPoll последней версии. После чего создаем ключ - токен, выполняем подтверждение и переходим к следующему шагу.
Если вы выполнили ранее расписанные пункты, значит можно преступить к написанию самого кода. Импортируем библиотеку с нужными классами и логиним бота(используя token).
from vkbottle.bot import Bot, Message
# На место слова token, поместите ключ полученный в настройках API вк.
# Рекомендуется сделать отдельный файл с токеном и импортировать ключ из него.
client = Bot("token")
Мы сделали экземпляр класса Bot, передав в параметр token сообщества, тем самым зарегистрировав его в скрипте, круто! Но почему же рекомендуется хранить токен в другом файле и импортировать от туда? Да все просто, когда вы будете отправлять скриншоты, а я надеюсь вы вместо них будете отправлять patebin кода, вы можете спалить token сообщества, тем самым поставить под угрозу его безопасность. Ну что, перейдем к функционалу?
Теперь напишем хендлер(прослушку) сообщений, чтобы бот их фильтровал и мог ответить. Хендлерить можно как текст, так и ивенты, кнопки, пайлоады, итд. Ниже представлен обычный хендлер на любое присланное сообщение. Кстати, о всех типах хендлеров и что можно через них фильтровать, можно прочитать в упрощенной, текстовой документации.
P.S. Хендлеры в VkBottle представлены декораторами, что это? Все просто! Декораторы — это, по сути, "обёртки", которые дают нам возможность изменить поведение функции, не изменяя её код. Вызов декоратора осуществляется через символ "@".
@client.on.private_message(text="<msg>")
async def echo_answer(ans: Message, msg):
await ans.answer("Ты написал: %s"%(msg))
Ваш бот будет фильтровать все сообщения, доставать их текст и пересылать вам обратно. Кстати, реализация вытаскивания значений из сообщений в VkBottle очень удобно реализована. Вам достаточно придумать название для переменной и заключить в треугольные скобки, а потом передать в параметры функции название этой переменной.
Если вы сейчас попытались запустить бота и у вас ничего не вышло, не беда. Вы просто забыли запустить пуллинг. Для того, чтобы это сделать вам просто нужно написать следующее.
# Проверка, если файл запущен, как основной, бот запустится. Иначе, ничего не произойдет.
if __name__ == "__main__":
client.run_forever()
Полностью код должен был выйти таким:
from vkbottle.bot import Bot, Message
client = Bot("token")
@client.on.private_message(text="<msg>")
async def echo_answer(ans: Message, msg):
await ans.answer("Ты написал: %s"%(msg))
if __name__ == "__main__":
client.run_forever()
При запуске у вас в терминале должны побежать строчки - логи. Если не выдало ошибку, вы можете писать боту. Итог выглядит вот так:

Конец истории
Ну что, теперь вы имеете небольшое представление об этой библиотеке и надеюсь поняли, что она очень удобная и быстрая. На том же vk_api вышло бы больше кода + задержка ответа была бы тоже больше. Если тебе понравилась моя статья, поставь оценку - буду благодарен. Стоит ли сделать полноценный гайд по созданию бота на определенную тематику, используя данный фреймворк? Жду FeedBack.