Как стать автором
Обновить

ЭХО бот на фреймворке VkBottle(3.x)

Всем пользователям Хабра, привет! В данной статье я хочу изложить опыт в использовании фреймворка VkBottle. Я заметил, что на хабре есть только одна запись по поводу данного репозитория, поэтому хочу сделать мини гайд по его использованию, на примере ЭХО бота.

Кто я такой?

Меня зовут Тим, я из России. Я обычный подросток, учусь в 9-м классе, физ-мат профиль. Заинтересовался программированием относительно недавно(3/4 года назад), выбрал ЯП Python, потому что хотелось начать с чего-то более понятного и легкого. Сам самоучка, большинство курсов - шаблонная дичь, но опять же не все. Сам я учился по книжкам, как по мне - самое лучшее средство для получения знаний. Здесь описано сугубо мое мнение и мой опыт(хоть он и небольшой), который может помочь таким же новичкам, как и я.

Что в нем такого и почему не стоит использовать vk_api?

Лично я, когда мне стала интересна сфера ботов Вконтаке, начал искать библиотеку для реализации моего интереса. Первое что все рекомендовали - vk_api, но мне, в то время не очень опытному пользователю языка, было сложно понять данную библиотеку. Тогда я начал искать альтернативу, искал долго, уже было потерял надежду... Но тут на просторах GitHub, я встретил интересную библиотеку - VkBottle(2.7). В чем заключается преимущество данной библиотеки? А вот в чем: проста в изучение, асинхронна, позволяет за меньшее количество строк написать больший функционал. А так же у нее есть своя беседа с отзывчивым комьюнити. Хочу подметить, библиотека использует LongPoll и CallBack api.


Импорты и подготовка среды

В качестве редактора для написания кода, я буду использовать VScode. Знаю, под python лучше использовать IDE Pycharm, но мне приятнее работать с VScode, а удобство - один из самых важных факторов.

Думаю у вас уже есть редактор и установлен питон, поэтому давайте перейдем к импортам. Раздел с гайдом по установке можно найти на официальной странице библиотеки. Но я так же продублирую эти действия в данной статье. И так, ниже представлены команды, которые вы должны выполнить в вашем терминале:

Спойлер
  1. pip install -U https://github.com/timoniq/vkbottle/archive/master.zip

  2. pip install loguru

  3. 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.

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.