[Python, Программирование, API, ВКонтакте API] VKWave — фреймворк для разработки ботов ВКонтакте
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Привет, Хабр!
Сегодня я хочу рассказать о замечательной библиотеке для разработке ботов ВКонтакте с помощью языка программирования Python.
VKWave
VKWave — это фреймворк для разработки ботов ВКонтакте, написанный с помощью asyncio. Основные цели проекта — дать возможность разработчику конфигурировать фреймворк максимально под себя, в тоже время обеспечивая достойную скорость разработки.
Минимальная требуемая версия Python — 3.7
В этой статье я хочу показать вам несколько примеров простых ботов на VKWave, а после вы всегда можете попробовать сами. Фреймворк находится в активной разработке, поэтому документация написанна ещё не до конца, но уже имеется большое количество примеров.
Также у нас есть чат в Telegram
Установка
Установка очень проста и содержит в себе всего одну команду:
pip install vkwave
А теперь предлагаю перейти к примерам!
Echo-бот
Самая простая задача. Бот который отвечает нам тем же самым текстом, который мы ему написали.
# Импортируем нужные классы.
# SimpleLongPollBot: обёртка для более удобной работы с фреймворком
# SimpleBotEvent: тип события, который предоставляет SimpleLongPollBot
from vkwave.bots import SimpleLongPollBot, SimpleBotEvent
# инициализируем бота (можно ввести список токенов, тогда vkwave сможет обходить лимиты ВКонтакте)
bot = SimpleLongPollBot(tokens=TOKEN, group_id=GROUP_ID)
# декоратор для создания обработчиков.
# можно передавать свои фильтры, но в данном случае мы хотим принимать все сообщения
@bot.message_handler()
def echo(event: SimpleBotEvent) -> str:
# мы можем сразу возвращать текст, т.к vkwave понимает, что если вы возвращаете строку, то вы хотите ответить на сообщение этим текстом. пользователь может задать свои типы данных, которые он сможет возвращать из хендлеров (а также написать нужную логику для их преобразования в нужные действия)
return event.object.object.message.text
# запускаем бота с игнорированием ошибок (не останавливаться даже при них)
bot.run_forever()
Код содержит буквально пару строк и выглядит очень легко.
Предлагаю написать что-нибудь поинтереснее. Давайте напишем такого же бота, но он будет печатать в ответ только тот текст, который идёт как аргументы команды /echo. Например — /echo мой текст.
Вторая версия Echo-бота
# мы используем фильтр для команд. он фильтрует все сообщения которые не выглядит как `/<наша команда>`. можно задать свои префиксы, а также передать список команд
@bot.message_handler(bot.command_filter("echo"))
def echo(event: SimpleBotEvent) -> str:
# получаем все аргуметы команды
args = event.object.object.message.text.split()
# проверяем, что есть хотя бы один аргумент
# в противном случае - пишем, что пользователь должен ввести какой-нибудь текст
if len(args) < 2:
return "Напиши какой-нибудь текст!"
# возвращаем итоговый текст (соединяем все аргументы через пробел)
return " ".join(args[1:])
Уже интереснее. Как мы видим, VKWave предоставляет нам фильтр для команд. Скажу сразу: стандартных фильтров в VKWave много, а также вы можете написать свои.
Итоговая версия Echo-бота
А сейчас мы попробуем написать свои фильтры для того, чтобы весь наш обработчик выглядел максимально просто.
# Импортируем нужные классы для разработки своих фильтров
from vkwave.bots.core.dispatching.filters.base import BaseFilter, BaseEvent, FilterResult
# объявляем свой фильтр, который наследуется от базового
class EchoFilter(BaseFilter):
# мы можем определить `__init__` для дополнительной настройки фильтра
# объявляем асинхронный метод `check`, который принимает событие и возвращает результат фильтра
async def check(self, event: BaseEvent) -> FilterResult:
# делаем алиас для текста сообщения
text = event.object.object.message.text
# разбиваем сообщение по пробелам
all_args = text.split()
# если частей меньше двух - фильтр не прошёл
if len(all_args) < 2:
# возвращаем False.
# так же можем, например, что-то написать пользователю
# у нас есть `event.api_ctx`, который предоставляет лёгкий доступ ко всем методам
return FilterResult(False)
# если нулевой аргумент (сама команда) не "/echo" возвращаем False
if all_args[0] != "/echo":
return FilterResult(False)
# передаём обработчику уже готовый ответ на сообщение
event["echo_answer"] = " ".join(all_args[1:])
return FilterResult(True)
# используем фильтр
@bot.message_handler(EchoFilter())
def echo(event: SimpleBotEvent) -> str:
# возвращаем текст, который мы уже "собрали" в фильтре
return event["echo_answer"]
Заключение
Конечно, я показал вам не все, вообще не все, возможности VKWave. Они очень широки, начиная от возможности своих фильтров и middlewares, типов обработчиков, способов получения событий, заканчивая мультиботом, собственным HTTP клиентом и многое другое!
Этой статьёй я хочу мотивировать вас попробовать создать своего бота ВКонтакте, не используя не удобные vk_api и vk.
Репозиторий на GitHub
Наш чат в Telegram
===========
Источник:
habr.com
===========
Похожие новости:
- [Python] Первые шаги в визуализации данных с использованием Geopandas и OSM
- [Информационная безопасность, Python, Программирование, Робототехника, Научно-популярное] pyOpenRPA туториал. Управление WEB приложениями
- В ночные сборки Firefox добавлена поддержка ускорения WebRTC через VAAPI
- [Финансы в IT] О чем говорят графики: что такое технический анализ, и зачем его используют биржевые инвесторы
- [Разработка веб-сайтов, JavaScript, Программирование, Node.JS] Краткое руководство по Node.js для начинающих (SPA, PWA, mobile-first)
- Выпуск Wine 5.15 и DXVK 1.7.1
- [Python, Яндекс API, Визуализация данных, Контекстная реклама] Визуализация статистики Яндекс Директ своими руками. От API до Data Studio
- [Программирование, Cobol] Modern COBOL: Package Tutorial
- [API, Flask, Python] Что такое REST API
- [Финансы в IT] Инвестируй как Гейтс: в какие акции вкладывается фонд основателя Microsoft
Теги для поиска: #_python, #_programmirovanie (Программирование), #_api, #_vkontakte_api (ВКонтакте API), #_vkwave, #_vk, #_vkapi, #_python, #_asyncio, #_python, #_programmirovanie (
Программирование
), #_api, #_vkontakte_api (
ВКонтакте API
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 09:54
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Привет, Хабр! Сегодня я хочу рассказать о замечательной библиотеке для разработке ботов ВКонтакте с помощью языка программирования Python. VKWave VKWave — это фреймворк для разработки ботов ВКонтакте, написанный с помощью asyncio. Основные цели проекта — дать возможность разработчику конфигурировать фреймворк максимально под себя, в тоже время обеспечивая достойную скорость разработки. Минимальная требуемая версия Python — 3.7 В этой статье я хочу показать вам несколько примеров простых ботов на VKWave, а после вы всегда можете попробовать сами. Фреймворк находится в активной разработке, поэтому документация написанна ещё не до конца, но уже имеется большое количество примеров. Также у нас есть чат в Telegram Установка Установка очень проста и содержит в себе всего одну команду: pip install vkwave
А теперь предлагаю перейти к примерам! Echo-бот Самая простая задача. Бот который отвечает нам тем же самым текстом, который мы ему написали. # Импортируем нужные классы.
# SimpleLongPollBot: обёртка для более удобной работы с фреймворком # SimpleBotEvent: тип события, который предоставляет SimpleLongPollBot from vkwave.bots import SimpleLongPollBot, SimpleBotEvent # инициализируем бота (можно ввести список токенов, тогда vkwave сможет обходить лимиты ВКонтакте) bot = SimpleLongPollBot(tokens=TOKEN, group_id=GROUP_ID) # декоратор для создания обработчиков. # можно передавать свои фильтры, но в данном случае мы хотим принимать все сообщения @bot.message_handler() def echo(event: SimpleBotEvent) -> str: # мы можем сразу возвращать текст, т.к vkwave понимает, что если вы возвращаете строку, то вы хотите ответить на сообщение этим текстом. пользователь может задать свои типы данных, которые он сможет возвращать из хендлеров (а также написать нужную логику для их преобразования в нужные действия) return event.object.object.message.text # запускаем бота с игнорированием ошибок (не останавливаться даже при них) bot.run_forever() Код содержит буквально пару строк и выглядит очень легко. Предлагаю написать что-нибудь поинтереснее. Давайте напишем такого же бота, но он будет печатать в ответ только тот текст, который идёт как аргументы команды /echo. Например — /echo мой текст. Вторая версия Echo-бота # мы используем фильтр для команд. он фильтрует все сообщения которые не выглядит как `/<наша команда>`. можно задать свои префиксы, а также передать список команд
@bot.message_handler(bot.command_filter("echo")) def echo(event: SimpleBotEvent) -> str: # получаем все аргуметы команды args = event.object.object.message.text.split() # проверяем, что есть хотя бы один аргумент # в противном случае - пишем, что пользователь должен ввести какой-нибудь текст if len(args) < 2: return "Напиши какой-нибудь текст!" # возвращаем итоговый текст (соединяем все аргументы через пробел) return " ".join(args[1:]) Уже интереснее. Как мы видим, VKWave предоставляет нам фильтр для команд. Скажу сразу: стандартных фильтров в VKWave много, а также вы можете написать свои. Итоговая версия Echo-бота А сейчас мы попробуем написать свои фильтры для того, чтобы весь наш обработчик выглядел максимально просто. # Импортируем нужные классы для разработки своих фильтров
from vkwave.bots.core.dispatching.filters.base import BaseFilter, BaseEvent, FilterResult # объявляем свой фильтр, который наследуется от базового class EchoFilter(BaseFilter): # мы можем определить `__init__` для дополнительной настройки фильтра # объявляем асинхронный метод `check`, который принимает событие и возвращает результат фильтра async def check(self, event: BaseEvent) -> FilterResult: # делаем алиас для текста сообщения text = event.object.object.message.text # разбиваем сообщение по пробелам all_args = text.split() # если частей меньше двух - фильтр не прошёл if len(all_args) < 2: # возвращаем False. # так же можем, например, что-то написать пользователю # у нас есть `event.api_ctx`, который предоставляет лёгкий доступ ко всем методам return FilterResult(False) # если нулевой аргумент (сама команда) не "/echo" возвращаем False if all_args[0] != "/echo": return FilterResult(False) # передаём обработчику уже готовый ответ на сообщение event["echo_answer"] = " ".join(all_args[1:]) return FilterResult(True) # используем фильтр @bot.message_handler(EchoFilter()) def echo(event: SimpleBotEvent) -> str: # возвращаем текст, который мы уже "собрали" в фильтре return event["echo_answer"] Заключение Конечно, я показал вам не все, вообще не все, возможности VKWave. Они очень широки, начиная от возможности своих фильтров и middlewares, типов обработчиков, способов получения событий, заканчивая мультиботом, собственным HTTP клиентом и многое другое! Этой статьёй я хочу мотивировать вас попробовать создать своего бота ВКонтакте, не используя не удобные vk_api и vk. Репозиторий на GitHub Наш чат в Telegram =========== Источник: habr.com =========== Похожие новости:
Программирование ), #_api, #_vkontakte_api ( ВКонтакте API ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 09:54
Часовой пояс: UTC + 5