Skip to main content

Асинхронный фреймворк для MAX Bot API в стиле FastAPI

Project description

PyPI version Python versions Monthly downloads License: MIT mypy strict

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 — деплой в один клик, мониторинг, автозапуск.

Лицензия

MIT

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

maxio-0.1.0.tar.gz (18.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

maxio-0.1.0-py3-none-any.whl (20.1 kB view details)

Uploaded Python 3

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

Hashes for maxio-0.1.0.tar.gz
Algorithm Hash digest
SHA256 6503d99efae7bd6e45c65974bd01bbea2d98b0ced885cc273154afe1a6ae6288
MD5 89716c03ed23379b63cc697db2a01d28
BLAKE2b-256 1d23851e892e354b40b9b08a8216e58afa37f6bdee4a4e4d3fc7cebd739849ea

See more details on using hashes here.

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

Hashes for maxio-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bbcf8097c4cdbfa3c6ed4bdea4c77228c1abbfbbc9b6487be667df9a4b2078be
MD5 3902d0b68efd664753df7eb36e537dc6
BLAKE2b-256 67d01b11122e7c3e1bd408203fcd27228949211df8a09376d0e525caf91caea0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page