Библиотека для разработки чат-ботов с помощью API мессенджера MAX
Project description
Документация и ссылки
- Документация maxapi: https://love-apples.github.io/maxapi/
- Официальная документация MAX Bot API: https://dev.max.ru/docs-api/
- Примеры ботов: https://love-apples.github.io/maxapi/examples/
Возможности
- Асинхронный
Botс тонкими обёртками над методами MAX Bot API. Dispatcher,Router, фильтры,Fи middleware в стиле aiogram.- FSM-контекст через
MemoryContextиRedisContext. - Polling и webhook через aiohttp, FastAPI или Litestar.
- Работа с медиа: загрузка, отправка и скачивание файлов.
- Inline-кнопки, callbacks и типизированные callback payloads.
Установка из PyPI
Стабильная версия
pip install maxapi
Если проект управляется через uv:
uv add maxapi
Установка из GitHub
Свежая версия, возможны баги. Рекомендуется только для ознакомления с новыми коммитами.
pip install git+https://github.com/love-apples/maxapi.git
Быстрый старт
Если вы тестируете бота в чате - не забудьте дать ему права администратора!
Запуск Polling
Если у бота есть активные Webhook-подписки, события не будут приходить
через start_polling. Перед переходом на polling удалите подписки через
await bot.delete_webhook().
import asyncio
import logging
from maxapi import Bot, Dispatcher, F
from maxapi.filters.command import CommandStart
from maxapi.types import BotStarted, MessageCreated
logging.basicConfig(level=logging.INFO)
# Внесите токен бота в переменную окружения MAX_BOT_TOKEN
# Не забудьте загрузить переменные из .env в os.environ
# или задайте его аргументом в Bot(token='...')
bot = Bot()
dp = Dispatcher()
# Ответ бота при нажатии на кнопку "Начать"
@dp.bot_started()
async def bot_started(event: BotStarted):
await bot.send_message(
chat_id=event.chat_id,
text='Привет! Отправь мне /start'
)
# Ответ бота на команду /start
@dp.message_created(CommandStart())
async def hello(event: MessageCreated):
await event.message.answer("Пример чат-бота для MAX 💙")
@dp.message_created(F.message.body.text)
async def echo(event: MessageCreated):
await event.message.answer(event.message.body.text)
async def main():
await dp.start_polling(bot)
if __name__ == '__main__':
asyncio.run(main())
Запуск Webhook
Webhook работает «из коробки» — aiohttp уже включён в базовый пакет:
pip install maxapi
Для проекта на uv:
uv add maxapi
Ниже простой запуск через aiohttp. Для production-интеграции с FastAPI,
подпиской webhook и проверкой secret смотрите
пример 09_webhook_bot.py.
import asyncio
import logging
from maxapi import Bot, Dispatcher
from maxapi.filters.command import CommandStart
from maxapi.types import MessageCreated
logging.basicConfig(level=logging.INFO)
bot = Bot()
dp = Dispatcher()
# Команда /start боту
@dp.message_created(CommandStart())
async def hello(event: MessageCreated):
await event.message.answer("Привет из вебхука!")
async def main():
await dp.handle_webhook(
bot=bot,
host='0.0.0.0',
port=8080,
)
if __name__ == '__main__':
asyncio.run(main())
FastAPI и Litestar
Если хотите использовать FastAPI или Litestar вместо aiohttp, установите нужную опциональную зависимость через pip:
pip install "maxapi[fastapi]"
pip install "maxapi[litestar]"
Или через uv:
uv add "maxapi[fastapi]"
uv add "maxapi[litestar]"
Пример запуска через FastAPI:
import asyncio
import uvicorn
from fastapi import FastAPI
from maxapi.webhook.fastapi import FastAPIMaxWebhook
async def main():
webhook = FastAPIMaxWebhook(dp=dp, bot=bot)
app = FastAPI(lifespan=webhook.lifespan)
webhook.setup(app, path='/webhook')
await uvicorn.Server(uvicorn.Config(app, host='0.0.0.0', port=8080)).serve()
asyncio.run(main())
Пример запуска через Litestar:
import asyncio
import uvicorn
from maxapi.webhook.litestar import LitestarMaxWebhook
async def main():
webhook = LitestarMaxWebhook(dp=dp, bot=bot)
app = webhook.create_app(path='/webhook')
await uvicorn.Server(uvicorn.Config(app, host='0.0.0.0', port=8080)).serve()
asyncio.run(main())
Project details
Release history Release notifications | RSS feed
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 maxapi-1.2.0.tar.gz.
File metadata
- Download URL: maxapi-1.2.0.tar.gz
- Upload date:
- Size: 214.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cd71ff0853729df46ead895440561928cfd5498325216973b4188d844947f3c5
|
|
| MD5 |
fadf80e45aaee79172be5f8f6071bede
|
|
| BLAKE2b-256 |
c79df1c85f1c0050669908d6bea0914f381c93292a450d75e5e18cc9da914994
|
Provenance
The following attestation bundles were made for maxapi-1.2.0.tar.gz:
Publisher:
publish.yml on love-apples/maxapi
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
maxapi-1.2.0.tar.gz -
Subject digest:
cd71ff0853729df46ead895440561928cfd5498325216973b4188d844947f3c5 - Sigstore transparency entry: 1827987598
- Sigstore integration time:
-
Permalink:
love-apples/maxapi@2071f498dfe8a8de0fc66ecabb455c13afd26970 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/love-apples
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@2071f498dfe8a8de0fc66ecabb455c13afd26970 -
Trigger Event:
push
-
Statement type:
File details
Details for the file maxapi-1.2.0-py3-none-any.whl.
File metadata
- Download URL: maxapi-1.2.0-py3-none-any.whl
- Upload date:
- Size: 217.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d3198acb5cc1ca851a1b242f2cf8f28dbad0756a8c71ce1a95fb579e97a05f7e
|
|
| MD5 |
e0df59fadaef1508daf73534b5dc8de1
|
|
| BLAKE2b-256 |
0964d5cde3ed1a06328898036197f4737406e52f5cb3cef0efa15149a72eae73
|
Provenance
The following attestation bundles were made for maxapi-1.2.0-py3-none-any.whl:
Publisher:
publish.yml on love-apples/maxapi
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
maxapi-1.2.0-py3-none-any.whl -
Subject digest:
d3198acb5cc1ca851a1b242f2cf8f28dbad0756a8c71ce1a95fb579e97a05f7e - Sigstore transparency entry: 1827987658
- Sigstore integration time:
-
Permalink:
love-apples/maxapi@2071f498dfe8a8de0fc66ecabb455c13afd26970 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/love-apples
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@2071f498dfe8a8de0fc66ecabb455c13afd26970 -
Trigger Event:
push
-
Statement type: