Асинхронный фреймворк для MAX Bot API в стиле FastAPI
Project description
maxio
Асинхронный Python-фреймворк для MAX Bot API
с внедрением зависимостей по аннотациям типов.
Объявляйте в сигнатуре хэндлера то, что нужно, — фреймворк подставит из контекста апдейта сам:
@app.message(Command("start"))
async def start(message: Message, bot: Bot):
await message.answer("Привет!")
Никаких context["bot"], никакого middleware_data. Просто типы.
Установка
pip install maxio
Python 3.10+, зависимости: httpx + pydantic v2.
Быстрый старт
Получите токен у @MasterBot:
import os
from maxio import MaxBot, Message, CallbackQuery, Command, InlineKeyboard
from maxio.keyboards import Button
app = MaxBot(token=os.environ["MAX_TOKEN"])
@app.message(Command("start"))
async def start(message: Message):
kb = InlineKeyboard().row(Button.callback("Нажми меня", "ping"))
await message.answer("Привет! Я готов к работе.", keyboard=kb)
@app.callback()
async def on_ping(query: CallbackQuery):
await query.answer(notification="Понг!")
@app.message()
async def echo(message: Message):
await message.reply(message.text or "")
if __name__ == "__main__":
app.run()
MAX_TOKEN=<ваш_токен> python bot.py
Внедрение зависимостей
| Тип | Когда доступен |
|---|---|
Message |
message_created, message_edited, callback |
CallbackQuery |
message_callback |
User |
отправитель/инициатор события |
Chat |
message_chat_created |
Update |
всегда (сырой апдейт) |
Bot |
всегда (HTTP-клиент, прямой доступ к API) |
Несовместимый тип → понятная ошибка MaxError с описанием проблемы.
Декораторы событий
@app.message(*filters) # новые сообщения
@app.message_edited(*filters) # изменённые сообщения
@app.callback(*filters) # нажатия inline-кнопок
@app.startup() # bot_started
@app.event(*update_types) # любые типы апдейтов
Несколько хэндлеров — первый подходящий выигрывает (first-match-wins).
Фильтры
from maxio import Command, CallbackPayload
@app.message(Command("help"))
async def help_cmd(message: Message): ...
@app.callback(CallbackPayload("buy"))
async def buy(query: CallbackQuery): ...
# Произвольный callable — тоже фильтр
@app.message(lambda u: u.message and len(u.message.text or "") > 100)
async def long_message(message: Message): ...
Inline-клавиатуры
from maxio import InlineKeyboard
from maxio.keyboards import Button
kb = (
InlineKeyboard()
.row(Button.callback("Да", "yes"), Button.callback("Нет", "no"))
.row(Button.link("Сайт", "https://example.com"))
)
await message.answer("Выберите:", keyboard=kb)
Методы API
@app.message()
async def handler(message: Message, bot: Bot):
me = await bot.get_me()
await bot.send_message(chat_id=message.recipient.chat_id, text=f"Я — {me.name}")
await bot.edit_message(message_id=message.message_id, text="Обновлено")
await bot.delete_message(message_id=message.message_id)
chats = await bot.get_chats()
Возможности
- Long polling с автоматическим переподключением
- HTTP-клиент:
get_me,send_message,edit_message,delete_message,get_messages,get_chats,answer_callback,get_updates - Декораторы:
message,message_edited,callback,startup,event - DI по аннотациям типов — работает из коробки, без
Depends() - Фильтры:
Command,CallbackPayload, любойCallable - Inline-клавиатуры: callback / link / request_geo_location
- Сахар:
message.answer(),message.reply(),query.answer() - Pydantic v2,
py.typed,mypy --strict✅
Спонсоры
|
sudoteach.com
Генеральный спонсор. Онлайн-школа программирования — там есть курс «Боты на maxio»: от установки до продакшна. |
bothost.ru
Официальный партнёр. Хостинг для ботов MAX и Telegram — деплой в один клик, мониторинг, автозапуск. |
Лицензия
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file maxio-0.1.0.tar.gz.
File metadata
- Download URL: maxio-0.1.0.tar.gz
- Upload date:
- Size: 18.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6503d99efae7bd6e45c65974bd01bbea2d98b0ced885cc273154afe1a6ae6288
|
|
| MD5 |
89716c03ed23379b63cc697db2a01d28
|
|
| BLAKE2b-256 |
1d23851e892e354b40b9b08a8216e58afa37f6bdee4a4e4d3fc7cebd739849ea
|
File details
Details for the file maxio-0.1.0-py3-none-any.whl.
File metadata
- Download URL: maxio-0.1.0-py3-none-any.whl
- Upload date:
- Size: 20.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bbcf8097c4cdbfa3c6ed4bdea4c77228c1abbfbbc9b6487be667df9a4b2078be
|
|
| MD5 |
3902d0b68efd664753df7eb36e537dc6
|
|
| BLAKE2b-256 |
67d01b11122e7c3e1bd408203fcd27228949211df8a09376d0e525caf91caea0
|