Привет, коллеги! На связи ботострой на aiogram
Немного предыстории
По своему опыту я привык работать с aiogram — это удобный и отлаженный фреймворк для Telegram-ботов с большим сообществом и обширной документацией. В aiogram удобно организовывать обработку команд, создавать сложные состояния, работать с inline-клавиатурами и встроенными механизмами.
Когда начал знакомиться с мессенджером MAX, я подумал, а почему бы не попробовать написать под него модуль для разработки чат-ботов на Python? Надоело каждый день делать/дорабатывать ботов для телеграмма, захотелось приключений. Приступил к работе, результат: maxapi, мой первый модуль и я хочу вас с ним познакомить на примере long polling бота!
На старт! Создаем бота в MasterBot
Запускаем бота, отправляем /create

Просит ник для бота, отправляем

Ну и наконец: отправляем имя для бота

Копируем токен на будущее, идем дальше. Открываем консоль, устанавливаем библиотеку maxapi:
pip install maxapi
Создаем скрипт с названием и расширением bot.py
, прописываем импорты
import asyncio
import logging
from maxapi import Bot, Dispatcher, F
from maxapi.types import MessageCreated
Настраиваем логгирование
logging.basicConfig(level=logging.INFO)
Инициализируем Bot, заменяем 'тут_ваш_токен' на токен из созданного бота MasterBot
bot = Bot('тут_ваш_токен')
dp = Dispatcher()
Делаем свой первый асинхронный обработчик событий, в данном случае принимает новое сообщение с фильтром если есть текст
, отвечая методом.answer()
класса Message
@dp.message_created(F.message.body.text)
async def echo(event: MessageCreated):
await event.message.answer(f"Повторяю за вами: {event.message.body.text}")
@dp.<тип_события>(<фильтры>)
async def <имя_функции>(event: <тип_события>):
...
dp
— экземплярDispatcher
<тип_события>
— тип события (в данном случаеmessage_created
)<фильтр>
— условиеMagicFilter
, по которому срабатывает хендлер (в данном случае наличие текста в сообщении)event
— объект события с данными (в данном случаеMessageCreated
)
Создаем асинхронную функцию для запуска бота в которой вызываем функцию для запуска long polling, передав в качестве аргумента экземпляр бота
async def main():
await dp.start_polling(bot)
Создаем проверку на "самостоятельность" скрипта и внутри неё вызываем наш main()
if __name__ == '__main__':
asyncio.run(main())
Готово! Запускаем нашего бота из консоли
python main.py
Пишем боту. Всё работает!

Полный код эхо-бота
import asyncio
import logging
from maxapi import Bot, Dispatcher, F
from maxapi.types import MessageCreated
logging.basicConfig(level=logging.INFO)
bot = Bot('тут_ваш_токен')
dp = Dispatcher()
@dp.message_created(F.message.body.text)
async def echo(event: MessageCreated):
await event.message.answer(f"Повторяю за вами: {event.message.body.text}")
async def main():
await dp.start_polling(bot)
if __name__ == '__main__':
asyncio.run(main())
Заключение
Для подробного ознакомления с библиотекой советую посетить страницу GitHub и Wiki модуля, а также позадавать вопросов в чатах библиотеки:
MAX
Спасибо за прочтение! Жду вас в чате с предложениями по улучшению библиотеки :-)