Асинхронная Python-библиотека для MAX API
Project description
MaxBridge Client
Асинхронная Python-библиотека для работы с WebSocket API MAX.
Возможности
- Авторизация по токену и через SMS
- Долгоживущая WebSocket-сессия с keepalive и автопереподключением
- Типизированные модели чатов, пользователей, сообщений и пакетов
- Нормализация событий для сценариев моста MAX <-> Matrix
- Нормализация контента сообщений, включая non-text payloads и варианты выбора
- Отправка сообщений, файлов, фото, чтение истории и работа с вложениями
- Примитивы backfill и checkpoint для сохранения и восстановления состояния
Установка
pip install maxbridge-client
Для разработки:
git clone https://github.com/Sereuser/maxbridge-client.git
cd max-bridge
pip install -e .[dev]
Импорт
Поддерживаются оба варианта импорта:
from maxbridge import MaxClient
from maxbridge_client import MaxClient
Быстрый старт
import asyncio
from maxbridge import MaxClient
async def main() -> None:
async with MaxClient() as client:
await client.login_by_token("your_token_here")
chats = client.get_chats_structured()
print(f"Чатов загружено: {len(chats)}")
if chats:
first_chat_id = next(iter(chats))
await client.send_message(first_chat_id, "Привет из MaxBridge!")
asyncio.run(main())
Авторизация
По токену
async with MaxClient() as client:
await client.login_by_token("your_token_here")
Через SMS
async with MaxClient() as client:
sms_token = await client.send_code("+79991234567")
await client.sign_in(sms_token, 123456)
Долгоживущая сессия
Для фоновых процессов и мостов удобнее использовать постоянное подключение:
client = MaxClient()
await client.start_with_token("your_token_here", reconnect_delay=5.0)
await client.wait_until_logged_in()
Или запустить клиент в режиме daemon:
await client.run_forever("your_token_here", reconnect_delay=5.0)
Если тестируете из PowerShell, лучше запускать код из файла *.py, а не через
подачу многострочного текста в stdin. Иначе кириллица может превратиться в ?
ещё до того, как дойдёт до Python.
События и парсинг пакетов
Сырой пакет:
async def handle_raw_packet(client, packet):
print(packet["opcode"])
client.set_packet_callback(handle_raw_packet)
Нормализованный пакет:
from maxbridge.parser import PacketEnvelope
async def handle_packet(client, packet: PacketEnvelope):
if packet.message_event is None:
return
message = packet.message_event.message
await client.send_message(message.chat_id, f"Эхо: {message.text}")
client.set_parsed_packet_callback(handle_packet)
Bridge API
Для сценариев моста используйте нормализованный слой:
async with MaxClient() as client:
await client.login_by_token("your_token_here")
stream = client.create_bridge_event_stream(include_self=False)
async for event in stream:
if event.message is None:
continue
print(event.message.chat_id, event.message.sender_id, event.message.text)
История с checkpoint:
page = await client.get_bridge_backfill_page(chat_id=123456, backward=50)
checkpoint = page.checkpoint
Стабильные идентификаторы события:
message = page.messages[0]
print(message.event_id)
print(message.dedupe_key)
Состояние моста и дедупликация:
ledger = client.create_bridge_event_ledger()
registry = client.create_bridge_room_registry()
mapping = client.bind_bridge_room(registry, max_chat_id=123456, matrix_room_id="!room:id")
Нормализация non-text сообщений:
message = page.messages[0]
print(message.content.kind)
print(message.normalized_text)
if message.content.has_options:
print(message.content.options)
Основные операции
Отправка текста
await client.send_message(chat_id=123456, text="Привет")
Ответ на сообщение
from maxbridge.functions import messages
await messages.reply_message(
client,
chat_id=123456,
text="Ответ",
reply_to_message_id="message-id",
)
Отправка файла
await client.send_file(chat_id=123456, file_path="document.pdf", caption="Документ")
Чтение истории
history = await client.get_chat_messages_bridge(chat_id=123456, backward=50)
for message in history:
print(message.sender_id, message.text)
Разрешение пользователей
users = await client.resolve_users([123, 456])
Структура проекта
maxbridge/
maxbridge_client/
client.py
bridge.py
sync.py
parser.py
models.py
exceptions.py
functions/
docs/
examples/
tests/
Документация
- API reference
- Примеры
- Пример bridge-цикла
- Пример bridge-state слоя
- Проверка Unicode через файл
- Contributing
- Changelog
Статус
Библиотека продолжает работать поверх reverse-engineered протокола MAX. При изменении веб-клиента MAX возможны несовместимости, поэтому API специально сделан с акцентом на проверяемые примитивы и устойчивые данные для моста.
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 maxbridge_client-0.4.0.tar.gz.
File metadata
- Download URL: maxbridge_client-0.4.0.tar.gz
- Upload date:
- Size: 34.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a89daf49ddd9ccef9230e666eeb6dbfeaa2884cf0612ae7354f69d3140287737
|
|
| MD5 |
16b1d0972c0ba7900ad4f1e78a8290e8
|
|
| BLAKE2b-256 |
0c7401c40dd35c5012b29e6ceba84fef8c6130cf76d38e1442244f181455d7c6
|
File details
Details for the file maxbridge_client-0.4.0-py3-none-any.whl.
File metadata
- Download URL: maxbridge_client-0.4.0-py3-none-any.whl
- Upload date:
- Size: 26.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
feebd323096c2650bf92424cc9b9cbca981fe39792f48fefdbec3adedc68895c
|
|
| MD5 |
20ecbf7554b1745d67ba04550b2c05ac
|
|
| BLAKE2b-256 |
e737ef811e50c22e106d05b185d34baacffe56789ff72c0f7c4d68fceb1f758f
|