Skip to main content

Async Python framework for Max Bot API, inspired by aiogram

Project description

maxogram

Python PyPI Downloads CI License: MIT mypy

Асинхронный Python-фреймворк для Max Bot API, вдохновленный aiogram. Предоставляет типизированный, расширяемый интерфейс для создания ботов в мессенджере Max.

Возможности

Ядро фреймворка

  • Полное покрытие Max Bot API — 30 методов, 96 типов, все 13 типов событий
  • Router + Dispatcher — дерево роутеров с propagation событий, вложенность, lifecycle hooks
  • Фильтры — Command, ChatType, ContentType, CallbackData, MagicFilter (DSL), ExceptionType
  • Middleware — onion pattern, inner/outer и request-level middleware (RetryMiddleware, LoggingMiddleware)
  • FSM — конечные автоматы с MemoryStorage, RedisStorage и MongoStorage
  • Scene — высокоуровневый FSM для сложных диалогов (Scene, WizardScene, SceneRegistry)
  • Multi-bot — несколько ботов в одном Dispatcher
  • Webhook — aiohttp handler, WebhookManager с auto-resubscribe, IP whitelist security
  • Polling — long polling с exponential backoff и graceful shutdown
  • Keyboard builder — InlineKeyboardBuilder с adjust() для раскладки кнопок
  • Class-based handlers — BaseHandler, MessageHandler, CallbackHandler
  • Flags — декораторы метаданных на хендлерах для use-case-specific middleware
  • Dependency Injection — автоматическое внедрение bot, state, event в хендлеры
  • Типизацияpy.typed, mypy strict, Pydantic v2 модели

Уникальные фичи Max

  • Message Constructor — интерактивное конструирование сообщений (нативная фича Max API)
  • Resumable Upload — загрузка файлов до 4 GB чанками с возобновлением после сбоя

Утилиты

  • I18n — интернационализация через gettext (I18nMiddleware, LazyProxy)
  • Text Formatting — Bold, Italic, Code, Link, UserMention builders
  • ChatActionSender — автоматическая отправка typing/recording actions
  • MediaGroupBuilder — групповая отправка медиа
  • Deep Linking — create_start_link, encode_payload, decode_payload
  • WebApp Validation — HMAC-SHA256 валидация initData
  • CallbackAnswerMiddleware — автоответ на callback если хендлер не ответил

Установка

pip install maxogram

Дополнительные зависимости:

pip install maxogram[redis]   # RedisStorage для FSM
pip install maxogram[mongodb]  # MongoStorage для FSM
pip install maxogram[fast]    # uvloop + aiodns
pip install maxogram[proxy]   # SOCKS-прокси
pip install maxogram[i18n]    # интернационализация (gettext)

Быстрый старт

import os

from maxogram.client.bot import Bot
from maxogram.dispatcher.dispatcher import Dispatcher
from maxogram.dispatcher.router import Router
from maxogram.types.message import Message

router = Router()


@router.message_created()
async def echo(
    event: Message,
    bot: Bot,
    **kwargs: object,
) -> None:
    """Повторяет любое текстовое сообщение."""
    text = event.body.text
    chat_id = event.recipient.chat_id
    if text and chat_id:
        await bot.send_message(chat_id=chat_id, text=text)


bot = Bot(token=os.environ["MAX_BOT_TOKEN"])
dp = Dispatcher()
dp.include_router(router)
dp.run_polling(bot)

Больше примеров: examples/

Основные концепции

Router

Маршрутизатор событий. Содержит observer для каждого из 13 типов событий Max API. Роутеры вкладываются друг в друга, образуя дерево — событие проходит по дереву до первого обработчика.

main_router = Router(name="main")
admin_router = Router(name="admin")
main_router.include_router(admin_router)

Filters

Фильтры определяют, какой хендлер обработает событие. Встроенные фильтры: Command, ChatTypeFilter, ContentTypeFilter, CallbackData, MagicData, ExceptionTypeFilter.

from maxogram.filters import Command

@router.message_created(Command("start"))
async def cmd_start(event, bot, command, **kwargs):
    ...

Middleware

Onion-pattern middleware для pre/post обработки. Два уровня: outer_middleware (до фильтров) и inner_middleware (после фильтров, перед хендлером).

from maxogram.dispatcher.middlewares.base import BaseMiddleware

class LogMiddleware(BaseMiddleware):
    async def __call__(self, handler, event, data):
        print(f"Event: {event}")
        return await handler(event, data)

router.message_created.outer_middleware.register(LogMiddleware())

FSM

Конечные автоматы для диалоговых сценариев. State + StatesGroup описывают состояния, FSMContext управляет переходами и данными.

from maxogram.fsm.state import State, StatesGroup
from maxogram.fsm.context import FSMContext

class Form(StatesGroup):
    name = State()
    age = State()

@router.message_created()
async def ask_name(event, bot, state: FSMContext, **kwargs):
    await state.set_state(Form.name)
    ...

Webhook

Production-ready webhook с aiohttp. WebhookManager управляет lifecycle, auto-resubscribe и graceful shutdown. IPWhitelistMiddleware защищает endpoint от поддельных запросов.

Инструменты разработчика

Schema Diff Tool

CLI-инструмент для сравнения OpenAPI-схемы Max Bot API с кодом библиотеки. Помогает отслеживать расхождения при обновлении API.

poetry run schema-diff                        # сравнить с актуальной схемой
poetry run schema-diff --schema path/to/openapi.json  # указать путь к схеме

Выводит: новые методы в API, удалённые методы, изменённые параметры.

Документация

Требования

  • Python 3.11+
  • aiohttp >= 3.9
  • pydantic >= 2.4
  • magic-filter >= 1.0.12
  • aiofiles >= 23.2
  • certifi >= 2023.7

Лицензия

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

maxogram-1.1.0.tar.gz (101.0 kB view details)

Uploaded Source

Built Distribution

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

maxogram-1.1.0-py3-none-any.whl (160.5 kB view details)

Uploaded Python 3

File details

Details for the file maxogram-1.1.0.tar.gz.

File metadata

  • Download URL: maxogram-1.1.0.tar.gz
  • Upload date:
  • Size: 101.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for maxogram-1.1.0.tar.gz
Algorithm Hash digest
SHA256 9df2ebaeee167f5cf0929974e4a4b11fc9ec2be89c364fbda16f5d14730ab612
MD5 c9723af0d51ea255693aa214331b12f8
BLAKE2b-256 ce8ba59d780c0eb8bc87dae77175defddf91c721e7562c65ffbaaeb76071a217

See more details on using hashes here.

Provenance

The following attestation bundles were made for maxogram-1.1.0.tar.gz:

Publisher: publish.yml on mccalpink/maxogram

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file maxogram-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: maxogram-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 160.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for maxogram-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b227c6962a6adc014389f090b2f68644f613dcf6cf90d56244d0c832f65c212e
MD5 2867e83370db7e80e577ea68b94f540d
BLAKE2b-256 3f051ee9275e92a72e0d308b598bd890f54fd87b28191ddba5996aee11b0811d

See more details on using hashes here.

Provenance

The following attestation bundles were made for maxogram-1.1.0-py3-none-any.whl:

Publisher: publish.yml on mccalpink/maxogram

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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