maxapi-python


Namemaxapi-python JSON
Version 1.1.13 PyPI version JSON
download
home_pageNone
SummaryPython wrapper для API мессенджера Max
upload_time2025-10-25 18:48:51
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseNone
keywords api max messenger websocket wrapper
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <p align="center">
    <img src="assets/logo.svg" alt="PyMax" width="400">
</p>

<p align="center">
    <strong>Python wrapper для API мессенджера Max</strong>
</p>

<p align="center">
    <img src="https://img.shields.io/badge/python-3.10+-3776AB.svg" alt="Python 3.11+">
    <img src="https://img.shields.io/badge/License-MIT-2f9872.svg" alt="License: MIT">
    <img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json" alt="Ruff">
    <img src="https://img.shields.io/badge/packaging-uv-D7FF64.svg" alt="Packaging">
</p>

---
> ⚠️ **Дисклеймер**
>
> *   Это **неофициальная** библиотека для работы с внутренним API Max.
> *   Использование может **нарушать условия предоставления услуг** сервиса.
> *   **Вы используете её исключительно на свой страх и риск.**
> *   **Разработчики и контрибьюторы не несут никакой ответственности** за любые последствия использования этого пакета, включая, но не ограничиваясь: блокировку аккаунтов, утерю данных, юридические риски и любые другие проблемы.
> *   API может быть изменен в любой момент без предупреждения.
---

## Описание

**`pymax`** — асинхронная Python библиотека для работы с API мессенджера Max. Предоставляет интерфейс для отправки сообщений, управления чатами, каналами и диалогами через WebSocket соединение.

### Основные возможности

- Вход по номеру телефона
- Отправка, редактирование и удаление сообщений
- Работа с чатами и каналами
- История сообщений

## Установка

> [!IMPORTANT]
> Для работы библиотеки требуется Python 3.10 или выше

### Установка через pip

```bash
pip install -U maxapi-python
```

### Установка через uv

```bash
uv add -U maxapi-python
```

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

### Базовый пример использования

```python
import asyncio
from pymax import MaxClient, Message

# Инициализация клиента
phone = "+1234567890"
client = MaxClient(phone=phone, work_dir="cache")

# Обработчик входящих сообщений
@client.on_message()
async def handle_message(message: Message) -> None:
    print(f"{message.sender}: {message.text}")

# Обработчик запуска клиента
@client.on_start
async def handle_start() -> None:
    print("Клиент запущен")

    # Получение истории сообщений
    history = await client.fetch_history(chat_id=0)
    if history:
        for message in history:
            user = await client.get_user(message.sender)
            if user:
                print(f"{user.names[0].name}: {message.text}")

async def main() -> None:
    await client.start()

    # Работа с чатами
    for chat in client.chats:
        print(f"Чат: {chat.title}")

        # Отправка сообщения
        message = await client.send_message(
            "Привет от PyMax!",
            chat.id,
            notify=True
        )

        # Редактирование сообщения
        await asyncio.sleep(2)
        await client.edit_message(
            chat.id,
            message.id,
            "Привет от PyMax! (отредактировано)"
        )

        # Удаление сообщения
        await asyncio.sleep(2)
        await client.delete_message(chat.id, [message.id], for_me=False)

    # Работа с диалогами
    for dialog in client.dialogs:
        print(f"Диалог: {dialog.last_message.text}")

    # Работа с каналами
    for channel in client.channels:
        print(f"Канал: {channel.title}")

    await client.close()

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

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

[WIP](https://ink-developer.github.io/)

## Лицензия

Этот проект распространяется под лицензией MIT. См. файл [LICENSE](LICENSE) для получения информации.

## Новости

[Telegram](https://t.me/pymax_news)

## Авторы

- **[ink-developer](https://github.com/ink-developer)** — Оригинальный автор проекта
- **[ink](https://github.com/ink-developer)** — Главный разработчик, исследование API и его документация

## Контрибьюторы

Спасибо всем за помощь в разработке!

<a href="https://github.com/ink-developer/PyMax/graphs/contributors">
  <img src="https://contrib.rocks/image?repo=ink-developer/PyMax" />
</a>

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "maxapi-python",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "api, max, messenger, websocket, wrapper",
    "author": null,
    "author_email": "ink <mail@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/b5/e5/88082f3c40e6f5481b5a9d1bb6ea29c873ed6352e81ce15df4dc4dfdeb8f/maxapi_python-1.1.13.tar.gz",
    "platform": null,
    "description": "<p align=\"center\">\n    <img src=\"assets/logo.svg\" alt=\"PyMax\" width=\"400\">\n</p>\n\n<p align=\"center\">\n    <strong>Python wrapper \u0434\u043b\u044f API \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u0430 Max</strong>\n</p>\n\n<p align=\"center\">\n    <img src=\"https://img.shields.io/badge/python-3.10+-3776AB.svg\" alt=\"Python 3.11+\">\n    <img src=\"https://img.shields.io/badge/License-MIT-2f9872.svg\" alt=\"License: MIT\">\n    <img src=\"https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json\" alt=\"Ruff\">\n    <img src=\"https://img.shields.io/badge/packaging-uv-D7FF64.svg\" alt=\"Packaging\">\n</p>\n\n---\n> \u26a0\ufe0f **\u0414\u0438\u0441\u043a\u043b\u0435\u0439\u043c\u0435\u0440**\n>\n> *   \u042d\u0442\u043e **\u043d\u0435\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f** \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c API Max.\n> *   \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 **\u043d\u0430\u0440\u0443\u0448\u0430\u0442\u044c \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0443\u0441\u043b\u0443\u0433** \u0441\u0435\u0440\u0432\u0438\u0441\u0430.\n> *   **\u0412\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u0435\u0451 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430 \u0441\u0432\u043e\u0439 \u0441\u0442\u0440\u0430\u0445 \u0438 \u0440\u0438\u0441\u043a.**\n> *   **\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0438 \u043a\u043e\u043d\u0442\u0440\u0438\u0431\u044c\u044e\u0442\u043e\u0440\u044b \u043d\u0435 \u043d\u0435\u0441\u0443\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438** \u0437\u0430 \u043b\u044e\u0431\u044b\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430, \u0432\u043a\u043b\u044e\u0447\u0430\u044f, \u043d\u043e \u043d\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044f\u0441\u044c: \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u043e\u0432, \u0443\u0442\u0435\u0440\u044e \u0434\u0430\u043d\u043d\u044b\u0445, \u044e\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0438\u0441\u043a\u0438 \u0438 \u043b\u044e\u0431\u044b\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b.\n> *   API \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0431\u0435\u0437 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f.\n---\n\n## \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\n\n**`pymax`** \u2014 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0430\u044f Python \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 API \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u0430 Max. \u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0447\u0430\u0442\u0430\u043c\u0438, \u043a\u0430\u043d\u0430\u043b\u0430\u043c\u0438 \u0438 \u0434\u0438\u0430\u043b\u043e\u0433\u0430\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 WebSocket \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435.\n\n### \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438\n\n- \u0412\u0445\u043e\u0434 \u043f\u043e \u043d\u043e\u043c\u0435\u0440\u0443 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430\n- \u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0430, \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439\n- \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0447\u0430\u0442\u0430\u043c\u0438 \u0438 \u043a\u0430\u043d\u0430\u043b\u0430\u043c\u0438\n- \u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439\n\n## \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430\n\n> [!IMPORTANT]\n> \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f Python 3.10 \u0438\u043b\u0438 \u0432\u044b\u0448\u0435\n\n### \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 pip\n\n```bash\npip install -U maxapi-python\n```\n\n### \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 uv\n\n```bash\nuv add -U maxapi-python\n```\n\n## \u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442\n\n### \u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f\n\n```python\nimport asyncio\nfrom pymax import MaxClient, Message\n\n# \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430\nphone = \"+1234567890\"\nclient = MaxClient(phone=phone, work_dir=\"cache\")\n\n# \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439\n@client.on_message()\nasync def handle_message(message: Message) -> None:\n    print(f\"{message.sender}: {message.text}\")\n\n# \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\n@client.on_start\nasync def handle_start() -> None:\n    print(\"\u041a\u043b\u0438\u0435\u043d\u0442 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\")\n\n    # \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439\n    history = await client.fetch_history(chat_id=0)\n    if history:\n        for message in history:\n            user = await client.get_user(message.sender)\n            if user:\n                print(f\"{user.names[0].name}: {message.text}\")\n\nasync def main() -> None:\n    await client.start()\n\n    # \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0447\u0430\u0442\u0430\u043c\u0438\n    for chat in client.chats:\n        print(f\"\u0427\u0430\u0442: {chat.title}\")\n\n        # \u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\n        message = await client.send_message(\n            \"\u041f\u0440\u0438\u0432\u0435\u0442 \u043e\u0442 PyMax!\",\n            chat.id,\n            notify=True\n        )\n\n        # \u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\n        await asyncio.sleep(2)\n        await client.edit_message(\n            chat.id,\n            message.id,\n            \"\u041f\u0440\u0438\u0432\u0435\u0442 \u043e\u0442 PyMax! (\u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e)\"\n        )\n\n        # \u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\n        await asyncio.sleep(2)\n        await client.delete_message(chat.id, [message.id], for_me=False)\n\n    # \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0434\u0438\u0430\u043b\u043e\u0433\u0430\u043c\u0438\n    for dialog in client.dialogs:\n        print(f\"\u0414\u0438\u0430\u043b\u043e\u0433: {dialog.last_message.text}\")\n\n    # \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043a\u0430\u043d\u0430\u043b\u0430\u043c\u0438\n    for channel in client.channels:\n        print(f\"\u041a\u0430\u043d\u0430\u043b: {channel.title}\")\n\n    await client.close()\n\nif __name__ == \"__main__\":\n    asyncio.run(main())\n```\n\n## \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\n\n[WIP](https://ink-developer.github.io/)\n\n## \u041b\u0438\u0446\u0435\u043d\u0437\u0438\u044f\n\n\u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439 MIT. \u0421\u043c. \u0444\u0430\u0439\u043b [LICENSE](LICENSE) \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.\n\n## \u041d\u043e\u0432\u043e\u0441\u0442\u0438\n\n[Telegram](https://t.me/pymax_news)\n\n## \u0410\u0432\u0442\u043e\u0440\u044b\n\n- **[ink-developer](https://github.com/ink-developer)** \u2014 \u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u0440 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\n- **[ink](https://github.com/ink-developer)** \u2014 \u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a, \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 API \u0438 \u0435\u0433\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\n\n## \u041a\u043e\u043d\u0442\u0440\u0438\u0431\u044c\u044e\u0442\u043e\u0440\u044b\n\n\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0432\u0441\u0435\u043c \u0437\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435!\n\n<a href=\"https://github.com/ink-developer/PyMax/graphs/contributors\">\n  <img src=\"https://contrib.rocks/image?repo=ink-developer/PyMax\" />\n</a>\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Python wrapper \u0434\u043b\u044f API \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u0430 Max",
    "version": "1.1.13",
    "project_urls": {
        "Homepage": "https://github.com/ink-developer/PyMax",
        "Issues": "https://github.com/ink-developer/PyMax/issues",
        "Repository": "https://github.com/ink-developer/PyMax"
    },
    "split_keywords": [
        "api",
        " max",
        " messenger",
        " websocket",
        " wrapper"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "fcbad5b1ddc7f8095c77d5f21453649d81aa02f638154e7e06020ad06e07267c",
                "md5": "363478956a7c1fcfef55a20ce80e8bbd",
                "sha256": "abb35295fde68047ac121083bc03112c45ecbf4b3d7ab0b9d15acbcb67a633fb"
            },
            "downloads": -1,
            "filename": "maxapi_python-1.1.13-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "363478956a7c1fcfef55a20ce80e8bbd",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 41619,
            "upload_time": "2025-10-25T18:48:50",
            "upload_time_iso_8601": "2025-10-25T18:48:50.561061Z",
            "url": "https://files.pythonhosted.org/packages/fc/ba/d5b1ddc7f8095c77d5f21453649d81aa02f638154e7e06020ad06e07267c/maxapi_python-1.1.13-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b5e588082f3c40e6f5481b5a9d1bb6ea29c873ed6352e81ce15df4dc4dfdeb8f",
                "md5": "801e6941ad298becff30a140ca09ea6a",
                "sha256": "bde3d6a051fa9695559ee55291e405a81f68c7c981c62e9da1c639c8a4409ec0"
            },
            "downloads": -1,
            "filename": "maxapi_python-1.1.13.tar.gz",
            "has_sig": false,
            "md5_digest": "801e6941ad298becff30a140ca09ea6a",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 52834,
            "upload_time": "2025-10-25T18:48:51",
            "upload_time_iso_8601": "2025-10-25T18:48:51.715834Z",
            "url": "https://files.pythonhosted.org/packages/b5/e5/88082f3c40e6f5481b5a9d1bb6ea29c873ed6352e81ce15df4dc4dfdeb8f/maxapi_python-1.1.13.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-25 18:48:51",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "ink-developer",
    "github_project": "PyMax",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "maxapi-python"
}
        
Elapsed time: 1.07470s