Skip to main content

max-library

Асинхронная Python-библиотека (SDK) для работы с корпоративным мессенджером MAX
(web.oneme.ru / ws-api.oneme.ru)

PyPI version Python versions License MIT Production Example


⚡ О библиотеке

max-library — это современная, полностью асинхронная клиентская библиотека на Python для взаимодействия с мессенджером MAX через WebSocket API.

Библиотека создана для построения надежных сервисов, интеграций и ботов. Она решает классические проблемы блокировок и обрывов соединений благодаря разделению чтения входящих пакетов, RPC-диспетчеризации по sequence ID и автоматическому поддержанию соединения.

🌟 Ключевые возможности

  • 🚀 100% AsyncIO: Построена на базе websockets и aiohttp, никакого блокирующего ввода-вывода.
  • 🔄 Автоматический Heartbeat и Reconnect: Встроенный фоновый пинг-понг и прозрачное восстановление WebSocket-сессии при сетевых сбоях.
  • ⚡ Надежная RPC-диспетчеризация: Запросы сопоставляются с ответами через уникальные seq-номера и asyncio.Future, исключая коллизии параллельных вызовов.
  • 🛡️ Строгая типизация (Pydantic v2): Все входящие и исходящие события, сообщения, пользователи, чаты и вложения типизированы и валидируются моделями Pydantic.
  • 🎯 Декларативные фильтры событий: Удобная система фильтрации входящих сообщений (filters.text, filters.chat_id, filters.has_attachments, поддержка логических операторов &, |, ~).
  • 📎 Поддержка файлов и медиа: Разрешение прямых ссылок на скачивание любых файлов и документов из MAX через внутренний протокол (Opcode 88).
  • 💬 Реакции и ссылки: Поддержка отправки реакций-эмодзи и парсинг пересланных сообщений / ответов (FORWARD, REPLY).

📦 Установка

pip install max-library

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

1. Простой эхо-бот

import asyncio
from max_library import MaxClient, filters
from max_library.models import Message

client = MaxClient(token="ВАШ_MAX_TOKEN")

@client.on_connect
async def handle_connect():
    print("Успешное подключение к мессенджеру MAX!")

# Обработчик только текстовых сообщений
@client.on_message(filters.text)
async def handle_text_message(message: Message):
    print(f"Получено сообщение от {message.sender.name}: {message.text}")
    
    if message.text == "/ping":
        await client.send_message(
            chat_id=message.chat_id,
            text="pong!"
        )

async def main():
    async with client:
        # Держим процесс активным
        await asyncio.Event().wait()

if __name__ == "__main__":
    asyncio.run(main())

💡 Примеры использования

Фильтрация сообщений

Вы можете комбинировать фильтры логическими операторами (& - И, | - ИЛИ, ~ - НЕ):

from max_library import MaxClient, filters

client = MaxClient(token="YOUR_TOKEN")

# Ловим только сообщения с картинками в конкретном чате
photo_in_target_chat = filters.chat_id(123456789) & filters.has_attachments("PHOTO")

@client.on_message(photo_in_target_chat)
async def handle_photo(message):
    print(f"Фотография получена в целевом чате! Вложений: {len(message.attachments)}")

# Ловим сообщения с файлами или ссылками
files_or_links = filters.has_attachments("FILE") | filters.has_attachments("LINK")

@client.on_message(files_or_links)
async def handle_files(message):
    print("Получен файл или ссылка")

Получение прямой ссылки на скачивание файла

Файлы и документы в MAX приходят с идентификатором file_id. Библиотека позволяет получить прямую CDN-ссылку на скачивание:

@client.on_message(filters.has_attachments("FILE"))
async def handle_incoming_file(message):
    for attachment in message.attachments:
        if attachment.file_id:
            # Запрашиваем URL для скачивания через RPC (Opcode 88)
            download_url = await client.get_file_download_url(
                chat_id=message.chat_id,
                message_id=message.id,
                file_id=attachment.file_id
            )
            print(f"Файл {attachment.name}: {download_url}")

Отправка реакций

@client.on_message()
async def add_reaction_to_msg(message):
    # Поставить реакцию ❤️ на сообщение
    await client.add_reaction(
        chat_id=message.chat_id,
        message_id=message.id,
        emoji="❤️"
    )

Получение списка чатов и контактов

async with MaxClient(token="YOUR_TOKEN") as client:
    # Список контактов
    contacts = await client.get_contacts()
    for contact in contacts:
        print(f"Контакт: {contact.name} (ID: {contact.user_id})")

    # Список чатов
    chats = await client.get_chats()
    for chat in chats:
        print(f"Чат: {chat.title} (ID: {chat.id})")

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

Подробное описание архитектуры, методов MaxClient, моделей данных Pydantic и кодов исключений доступно в документации API.


🛠️ Пример в Production

Библиотека max-library лежит в основе высоконадежного бота пересылки: 👉 FromMaxToTelegram — асинхронный Telegram-бот, пересылающий текст, медиагруппы (альбомы) и файлы из чатов MAX в Telegram-форумы и каналы с умным кэшем пользователей и ротацией логов.


🤝 Разработка и тестирование

Клонирование репозитория и запуск тестов:

git clone https://github.com/jirnobruh/max-library.git
cd max-library
python -m venv .venv
# Активируйте виртуальное окружение
pip install -e ".[dev]"
pytest

📄 Лицензия

Проект распространяется под лицензией MIT. Автор: jirnobruh.

Metadata

Release files for max-library 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for max-library 0.1.0
File Size Uploaded
max_library-0.1.0.tar.gz 29.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for max-library 0.1.0
File Interpreter ABI Platform
max_library-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 55.7 kB

Release files / max_library-0.1.0.tar.gz

Download URL max_library-0.1.0.tar.gz
Size 29.6 kB
Tags Source
SHA-256 checksum
How to use checksums
45b3bdeefce94bf6e24047d485f1fe1d5f4a795bf36e84a05ba4aee2017b82a6
BLAKE2b-256 checksum
How to use checksums
14f8b6dba09731b1ce39c153756e042f190aa5523a2b02c7fb552036406110d2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.7

Release files / max_library-0.1.0-py3-none-any.whl

Download URL max_library-0.1.0-py3-none-any.whl
Size 26.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
56bf8ef9e61eeaa39bd12a3b80248f89de78cec8324dec5eccb10431fa299a8a
BLAKE2b-256 checksum
How to use checksums
4a99b0a37e289a21a4a4e74fb0c386aaa8ff5ab77080da97016eac0fe7125a51
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.7

Release history Release notifications | RSS feed

0.2.0

2 release files

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page