maxapi-python


Namemaxapi-python JSON
Version 0.1.1 PyPI version JSON
download
home_pageNone
SummaryPython wrapper для API мессенджера Max
upload_time2025-09-02 08:32:49
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>

---

## Описание

**`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

## Лицензия

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

## Авторы

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


            

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": "noxzion <negroid2281488ilikrilex@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/06/e9/a39b768c31388c1cd627ae75280f8261731a36d66195f5ee2e1d2755b9b8/maxapi_python-0.1.1.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\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\nWIP\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## \u0410\u0432\u0442\u043e\u0440\u044b\n\n- **[noxzion](https://github.com/noxzion)** \u2014 \u043e\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 \u0432\u0442\u043e\u0440\u043e\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- **[fresh-milkshake](https://github.com/fresh-milkshake)** \u2014 \u043a\u043e\u043d\u0442\u0440\u0438\u0431\u044c\u044e\u0442\u043e\u0440 \u0438 \u0430\u0432\u0442\u043e\u0440 \u043b\u043e\u0433\u043e\n\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": "0.1.1",
    "project_urls": {
        "Homepage": "https://github.com/noxzion/PyMax",
        "Issues": "https://github.com/noxzion/PyMax/issues",
        "Repository": "https://github.com/noxzion/PyMax"
    },
    "split_keywords": [
        "api",
        " max",
        " messenger",
        " websocket",
        " wrapper"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "97c6ed27a1479ccf2aebac3caf9d243c44d7435d307dc26aef99baa01782946b",
                "md5": "af9c31f51a8ebdeb010334e9c707a1f6",
                "sha256": "e93ef523dee4a9c4132ec9e0f60b7b64491b7616c1a255c1892d2451edfab658"
            },
            "downloads": -1,
            "filename": "maxapi_python-0.1.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "af9c31f51a8ebdeb010334e9c707a1f6",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 3565,
            "upload_time": "2025-09-02T08:32:48",
            "upload_time_iso_8601": "2025-09-02T08:32:48.163336Z",
            "url": "https://files.pythonhosted.org/packages/97/c6/ed27a1479ccf2aebac3caf9d243c44d7435d307dc26aef99baa01782946b/maxapi_python-0.1.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "06e9a39b768c31388c1cd627ae75280f8261731a36d66195f5ee2e1d2755b9b8",
                "md5": "313fca7955d1179086be13f699a96a05",
                "sha256": "e26434fdd0382fd982174ffe9cdfe4e5a5600e12f86a4b2f3949533784e1e0f4"
            },
            "downloads": -1,
            "filename": "maxapi_python-0.1.1.tar.gz",
            "has_sig": false,
            "md5_digest": "313fca7955d1179086be13f699a96a05",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 24896,
            "upload_time": "2025-09-02T08:32:49",
            "upload_time_iso_8601": "2025-09-02T08:32:49.266534Z",
            "url": "https://files.pythonhosted.org/packages/06/e9/a39b768c31388c1cd627ae75280f8261731a36d66195f5ee2e1d2755b9b8/maxapi_python-0.1.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-09-02 08:32:49",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "noxzion",
    "github_project": "PyMax",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "maxapi-python"
}
        
Elapsed time: 1.77984s