maxapi-python 1.1.11__tar.gz → 1.1.12__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/PKG-INFO +1 -1
  2. maxapi_python-1.1.12/docs/client.md +286 -0
  3. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/docs/index.md +3 -3
  4. maxapi_python-1.1.12/docs/methods.md +499 -0
  5. maxapi_python-1.1.12/docs/types.md +314 -0
  6. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/examples/example.py +33 -26
  7. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/mkdocs.yml +54 -27
  8. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/pyproject.toml +1 -1
  9. maxapi_python-1.1.12/src/pymax/formatting.py +76 -0
  10. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/src/pymax/mixins/group.py +26 -0
  11. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/src/pymax/mixins/message.py +63 -6
  12. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/src/pymax/payloads.py +17 -4
  13. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/src/pymax/static.py +15 -1
  14. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/src/pymax/types.py +2 -1
  15. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/.github/FUNDING.yml +0 -0
  16. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  17. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  18. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/.github/ISSUE_TEMPLATE/refactor.md +0 -0
  19. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/.github/pull_request_template.md +0 -0
  20. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/.github/workflows/publish.yml +0 -0
  21. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/.gitignore +0 -0
  22. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/LICENSE +0 -0
  23. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/README.md +0 -0
  24. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/assets/icon.svg +0 -0
  25. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/assets/logo.svg +0 -0
  26. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/docs/api.md +0 -0
  27. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/docs/assets/icon.svg +0 -0
  28. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/docs/examples.md +0 -0
  29. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/ruff.toml +0 -0
  30. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/scripts/build.py +0 -0
  31. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/src/pymax/__init__.py +0 -0
  32. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/src/pymax/core.py +0 -0
  33. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/src/pymax/crud.py +0 -0
  34. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/src/pymax/exceptions.py +0 -0
  35. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/src/pymax/files.py +0 -0
  36. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/src/pymax/filters.py +0 -0
  37. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/src/pymax/interfaces.py +0 -0
  38. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/src/pymax/mixins/__init__.py +0 -0
  39. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/src/pymax/mixins/auth.py +0 -0
  40. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/src/pymax/mixins/channel.py +0 -0
  41. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/src/pymax/mixins/handler.py +0 -0
  42. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/src/pymax/mixins/self.py +0 -0
  43. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/src/pymax/mixins/socket.py +0 -0
  44. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/src/pymax/mixins/telemetry.py +0 -0
  45. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/src/pymax/mixins/user.py +0 -0
  46. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/src/pymax/mixins/websocket.py +0 -0
  47. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/src/pymax/models.py +0 -0
  48. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/src/pymax/navigation.py +0 -0
  49. {maxapi_python-1.1.11 → maxapi_python-1.1.12}/src/pymax/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: maxapi-python
3
- Version: 1.1.11
3
+ Version: 1.1.12
4
4
  Summary: Python wrapper для API мессенджера Max
5
5
  Project-URL: Homepage, https://github.com/noxzion/PyMax
6
6
  Project-URL: Repository, https://github.com/noxzion/PyMax
@@ -0,0 +1,286 @@
1
+ # 🚀 Руководство по MaxClient
2
+
3
+ ## 📋 Содержание
4
+
5
+ - [Установка и Настройка](#установка-и-настройка)
6
+ - [Основные Возможности](#основные-возможности)
7
+ - [Управление Подключением](#управление-подключением)
8
+ - [Работа с Данными](#работа-с-данными)
9
+ - [Лучшие Практики](#лучшие-практики)
10
+
11
+ ## ⚙️ Установка и настройка {#установка-и-настройка}
12
+
13
+ ### Инициализация Клиента
14
+
15
+ !!! info "MaxClient"
16
+ Основной класс для взаимодействия с WebSocket API сервиса Max.
17
+
18
+ ```python
19
+ client = MaxClient(
20
+ phone: str,
21
+ uri: str = Constants.WEBSOCKET_URI.value,
22
+ headers: dict[str, Any] | None = Constants.DEFAULT_USER_AGENT.value,
23
+ token: str | None = None,
24
+ send_fake_telemetry: bool = True,
25
+ host: str = Constants.HOST.value,
26
+ port: int = Constants.PORT.value,
27
+ work_dir: str = ".",
28
+ logger: logging.Logger | None = None,
29
+ )
30
+ ```
31
+
32
+ **Параметры конфигурации**
33
+
34
+ | Параметр | Тип | Описание | По умолчанию |
35
+ |----------|-----|----------|---------------|
36
+ | `phone` | `str` | Номер телефона для авторизации | - |
37
+ | `uri` | `str` | URI WebSocket сервера | `Constants.WEBSOCKET_URI.value` |
38
+ | `headers` | `dict[str, Any] \| None` | Заголовки для соединения | `Constants.DEFAULT_USER_AGENT.value` |
39
+ | `token` | `str \| None` | Токен авторизации | `None` |
40
+ | `send_fake_telemetry` | `bool` | Отправка телеметрии | `True` |
41
+ | `host` | `str` | Хост API сервера | `Constants.HOST.value` |
42
+ | `port` | `int` | Порт API сервера | `Constants.PORT.value` |
43
+ | `work_dir` | `str` | Директория для БД | `"."` |
44
+ | `logger` | `logging.Logger \| None` | Пользовательский логгер | `None` |
45
+
46
+ **Пример базовой инициализации**
47
+ ```python
48
+ from pymax import MaxClient
49
+
50
+ client = MaxClient(
51
+ phone="+79001234567",
52
+ work_dir="./data"
53
+ )
54
+ ```
55
+
56
+ **Пример расширенной конфигурации**
57
+ ```python
58
+ import logging
59
+
60
+ # Настройка логгера
61
+ logger = logging.getLogger("max_bot")
62
+ logger.setLevel(logging.DEBUG)
63
+
64
+ # Инициализация с дополнительными параметрами
65
+ client = MaxClient(
66
+ phone="+79001234567",
67
+ token="your_saved_token", # Если есть сохраненный токен
68
+ work_dir="./data",
69
+ logger=logger,
70
+ send_fake_telemetry=False
71
+ )
72
+ ```
73
+
74
+ ## 🔑 Основные возможности {#основные-возможности}
75
+
76
+ ### Свойства Клиента
77
+
78
+ #### Аутентификация и Подключение
79
+
80
+ !!! info "Статус и авторизация"
81
+ | Свойство | Тип | Описание |
82
+ |----------|-----|----------|
83
+ | `is_connected` | `bool` | Статус подключения |
84
+ | `phone` | `str` | Номер телефона |
85
+ | `me` | `Me \| None` | Информация о пользователе |
86
+
87
+ #### Доступ к Данным
88
+
89
+ !!! info "Чаты и пользователи"
90
+ | Свойство | Тип | Описание |
91
+ |----------|-----|----------|
92
+ | `chats` | `list[Chat]` | Все чаты |
93
+ | `dialogs` | `list[Dialog]` | Личные диалоги |
94
+ | `channels` | `list[Channel]` | Каналы |
95
+
96
+ ## 🔌 Управление подключением {#управление-подключением}
97
+
98
+ ### Запуск и Остановка
99
+
100
+ ```python
101
+ async def start() -> None
102
+ ```
103
+
104
+ !!! info "Запуск клиента"
105
+ Метод выполняет:
106
+ 1. Подключение к WebSocket
107
+ 2. Авторизацию пользователя
108
+ 3. Инициализацию фоновых задач
109
+ 4. Синхронизацию данных
110
+
111
+ **Пример использования**
112
+ ```python
113
+ async def main():
114
+ client = MaxClient(phone="+79001234567")
115
+ try:
116
+ await client.start()
117
+ print("Клиент успешно запущен")
118
+ except Exception as e:
119
+ print(f"Ошибка запуска: {e}")
120
+
121
+ asyncio.run(main())
122
+ ```
123
+
124
+ ```python
125
+ async def close() -> None
126
+ ```
127
+
128
+ !!! warning "Закрытие клиента"
129
+ Метод выполняет:
130
+ 1. Остановку фоновых задач
131
+ 2. Закрытие WebSocket соединения
132
+ 3. Очистку ресурсов
133
+
134
+ **Пример корректного закрытия**
135
+ ```python
136
+ async def main():
137
+ async with MaxClient(phone="+79001234567") as client:
138
+ await client.start()
139
+ # Ваш код здесь
140
+ # Клиент автоматически закроется
141
+ ```
142
+
143
+ ## 📨 Работа с Сообщениями
144
+
145
+ ### Обработка Сообщений
146
+
147
+ !!! tip "Регистрация обработчиков"
148
+ ```python
149
+ @client.on_message()
150
+ async def handle_message(message: Message):
151
+ print(f"Получено сообщение: {message.text}")
152
+
153
+ if message.attaches:
154
+ print("Есть вложения!")
155
+
156
+ if message.sender:
157
+ user = await client.get_user(message.sender)
158
+ if user:
159
+ print(f"От: {user.names[0].name}")
160
+ ```
161
+
162
+ ### Фильтрация Сообщений
163
+
164
+ !!! example "Примеры фильтров"
165
+ ```python
166
+ # Только текстовые сообщения
167
+ @client.on_message(Filter(chat_id=0))
168
+ async def handle_text(message: Message):
169
+ print(f"Текст: {message.text}")
170
+ ```
171
+
172
+ ## 💾 Работа с данными {#работа-с-данными}
173
+
174
+ ### Доступ к Чатам
175
+
176
+ !!! info "Типы чатов"
177
+ ```python
178
+ # Все чаты
179
+ for chat in client.chats:
180
+ print(f"Чат: {chat.title}")
181
+
182
+ # Личные диалоги
183
+ for dialog in client.dialogs:
184
+ user = await client.get_user(dialog.owner)
185
+ if user:
186
+ print(f"Диалог с {user.names[0].name}")
187
+
188
+ # Каналы
189
+ for channel in client.channels:
190
+ print(f"Канал: {channel.title}")
191
+ ```
192
+
193
+ ### Информация о Пользователе
194
+
195
+ !!! example "Работа с текущим пользователем"
196
+ ```python
197
+ me = client.me
198
+ if me:
199
+ name = me.names[0] if me.names else None
200
+ print(f"Авторизован как: {name.name if name else me.phone}")
201
+ print(f"ID: {me.id}")
202
+ print(f"Статус: {me.account_status}")
203
+ ```
204
+
205
+ ## 💽 Хранение Данных
206
+
207
+ ### База Данных
208
+
209
+ !!! info "Локальное хранилище"
210
+ - **Расположение**: `{work_dir}/session.db`
211
+ - **Хранит**:
212
+ - Токены авторизации
213
+ - Информацию об устройстве
214
+ - Данные сессии
215
+ - **Особенности**:
216
+ - Автоматическое управление
217
+ - Персистентное хранение
218
+ - Безопасное сохранение токенов
219
+
220
+ ## 📚 Лучшие практики {#лучшие-практики}
221
+
222
+ ### Безопасное Использование
223
+
224
+ !!! tip "Контекстный менеджер"
225
+ ```python
226
+ async def main():
227
+ async with MaxClient(phone="+79001234567") as client:
228
+ await client.start()
229
+ # Ваш код здесь
230
+ # Клиент автоматически закроется
231
+ ```
232
+
233
+ ### Обработка Ошибок
234
+
235
+ !!! warning "Обработка исключений"
236
+ ```python
237
+ try:
238
+ await client.start()
239
+ except WebSocketNotConnectedError:
240
+ print("Ошибка подключения")
241
+ except Exception as e:
242
+ print(f"Непредвиденная ошибка: {e}")
243
+ ```
244
+
245
+ ### Оптимизация
246
+
247
+ !!! tip "Советы по оптимизации"
248
+ 1. Используйте фильтры сообщений для снижения нагрузки
249
+ 2. Применяйте кэширование пользователей через `get_cached_user`
250
+ 3. Группируйте операции с сообщениями
251
+ 4. Правильно закрывайте ресурсы
252
+
253
+ ### Структура Бота
254
+
255
+ !!! example "Рекомендуемая структура"
256
+ ```python
257
+ from pymax import MaxClient
258
+
259
+ class MyBot:
260
+ def __init__(self, phone: str):
261
+ self.client = MaxClient(phone=phone)
262
+
263
+ async def setup(self):
264
+ # Регистрация обработчиков
265
+ @self.client.on_message()
266
+ async def handle_message(message: Message):
267
+ await self.process_message(message)
268
+
269
+ @self.client.on_start()
270
+ async def handle_start():
271
+ await self.on_ready()
272
+
273
+ async def process_message(self, message: Message):
274
+ # Ваша логика обработки сообщений
275
+ pass
276
+
277
+ async def on_ready(self):
278
+ print("Бот готов к работе!")
279
+
280
+ async def run(self):
281
+ await self.client.start()
282
+
283
+ # Использование
284
+ bot = MyBot(phone="+79001234567")
285
+ asyncio.run(bot.run())
286
+ ```
@@ -10,14 +10,14 @@ from pymax import MaxClient
10
10
 
11
11
  async def main():
12
12
  client = MaxClient(phone="+79001234567")
13
-
14
- @client.on_message
13
+
14
+ @client.on_message()
15
15
  async def handle_message(message):
16
16
  await client.send_message(
17
17
  chat_id=message.chat_id,
18
18
  text=f"Привет, {message.author.username}! {message.text}"
19
19
  )
20
-
20
+
21
21
  await client.start()
22
22
 
23
23
  asyncio.run(main())