Асинхронный, модульный и современный фреймворк для создания юзерботов в MAX Messenger.
Pyromax создан для тех, кто устал от "лапши" в одном файле. Мы перенесли лучшие практики из aiogram 3.x в мир MAX: роутеры, строгая типизация и удобная архитектура.
В отличие от других библиотек, мы ставим Developer Experience (DX) на первое место:
- 📦 Система Роутеров (Routers): Разбивайте бота на файлы и плагины. Никаких файлов на 2000 строк.
- ⚡ Скорость: Полностью асинхронное ядро на
aiohttpиwebsockets. - clean_code: Архитектура, вдохновленная
aiogram. Если вы писали ботов для Telegram, вы будете чувствовать себя как дома. - 🛠 Гибкость: Встроенный Dispatcher и Observer паттерн.
Библиотека поддерживает современные менеджеры пакетов, включая uv.
pip install pyromaximportasyncioimportloggingimportosfrompyromax.apiimportMaxApifrompyromax.api.observerimportDispatcherasMaxDispatcherfrompyromax.typesimportMessage# Инициализация диспетчераdp=MaxDispatcher()
# Регистрация хендлера (обрабатываем все сообщения, включая свои)@dp.message(pattern=lambdaupdate: True, from_me=True)asyncdefecho_handler(update: Message, max_api: MaxApi):
# Отвечаем на сообщение тем же текстом и вложениямиawaitupdate.reply(text=update.text, attaches=update.attaches)
asyncdefmain():
logging.basicConfig(level=logging.INFO)
# Создаем экземпляр APIbot=awaitMaxApi()
# Запускаем бота с диспетчеромawaitbot.reload_if_connection_broke(dp)
if__name__=="__main__":
asyncio.run(main())frompyromax.apiimportMaxApifrompyromax.api.observerimportRouterfrompyromax.filtersimportCommand, CommandStart, CommandObjectfrompyromax.typesimportMessage# Создаем отдельный роутерrouter=Router()
# Регистрируем хендлер в роутер@router.message(Command('ping'), from_me=True)asyncdefping_handler(message: Message, max_api: MaxApi):
awaitmessage.reply("Pong! 🏓")
@router.message(CommandStart())asyncdefstart(message: Message):
awaitmessage.answer(text='Ну начинаем?')
@router.message(Command('sum'), from_me=True)asyncdefsum_handler(message: Message, command: CommandObject) ->None:
""" В чате: >>>/sum 8 8 >>>Ответ: 16 >>>/sum 3 string >>>В аргументах могут быть только цифры """ifcommand.argsisNone:
returnargs=command.args.split()
nums= []
forarginargs:
ifnotarg.isdigit():
awaitmessage.reply(text='В аргументах могут быть только цифры')
returnnums.append(int(arg))
awaitmessage.reply(text=f'Ответ: {sum(nums)}')
frompyromax.api.observerimportDispatcherasMaxDispatcherfromhandlers.adminimportrouterasadmin_routerdp=MaxDispatcher()
# Подключаем роутер к главному диспетчеруdp.include_router(admin_router)
# ... далее запуск бота как в примере выше@dp.message(Command('lyric'), from_me=True)asyncdeflyric(msg: Message):
awaitmsg.answer(text='<STRONG>They tell me, "keep it simple"</STRONG>''<QUOTE>I tell them, "take it slow"</QUOTE>''<STRIKETHROUGH>I feed a water an idea so I let it grow </STRIKETHROUGH> \n''<UNDERLINE>I tell them, "take it easy"</UNDERLINE> \n''<EMPHASIZED>They laugh and tell me, "No"</EMPHASIZED> \n''<LINK url="https://www.youtube.com/watch?v=9Zj0JOHJR-s">its cool...</LINK>'
)Мы активно развиваем библиотеку и стремимся сделать её стандартом для MAX.
- Core: Полностью асинхронное ядро (
MaxApi,Dispatcher). - Routers: Модульная система (разбиение бота на файлы).
- Types: Строгая типизация всех объектов (Update, Message, Attachments).
- Observer: Система паттернов и фильтров для хендлеров.
- FSM (Finite State Machine): Машина состояний для создания сценариев (опросы, диалоги, формы).
- Middlewares: Перехват событий до хендлеров (логирование, анти-флуд, базы данных).
- Magic Filters: Удобный синтаксис фильтров (как
F.text.startswith("!")).
- Документация: Полноценный сайт с документацией и примерами.
- Плагины: Готовые модули для администрирования чатов.
Мы рады любой помощи! Если вы хотите предложить фичу или исправить баг:
- Форкните репозиторий.
- Создайте ветку (
git checkout -b feature/NewFeature). - Откройте Pull Request.
MIT License. Свободно используйте в своих проектах.