maxapi-python 1.1.16__tar.gz → 1.1.18__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.
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/PKG-INFO +1 -1
- maxapi_python-1.1.18/docs/api.md +480 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/docs/client.md +13 -13
- maxapi_python-1.1.18/docs/examples.md +418 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/docs/index.md +5 -6
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/docs/methods.md +13 -13
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/docs/types.md +31 -31
- maxapi_python-1.1.18/examples/example.py +142 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/mkdocs.yml +0 -32
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/pyproject.toml +1 -1
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/src/pymax/__init__.py +23 -17
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/src/pymax/core.py +117 -37
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/src/pymax/interfaces.py +3 -6
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/src/pymax/mixins/websocket.py +22 -39
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/src/pymax/payloads.py +4 -4
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/src/pymax/static/enum.py +1 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/src/pymax/types.py +60 -33
- maxapi_python-1.1.16/docs/api.md +0 -111
- maxapi_python-1.1.16/docs/examples.md +0 -92
- maxapi_python-1.1.16/examples/example.py +0 -123
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/.github/FUNDING.yml +0 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/.github/ISSUE_TEMPLATE/refactor.md +0 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/.github/pull_request_template.md +0 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/.github/workflows/publish.yml +0 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/.gitignore +0 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/.pre-commit-config.yaml +0 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/LICENSE +0 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/README.md +0 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/assets/icon.svg +0 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/assets/logo.svg +0 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/docs/assets/icon.svg +0 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/examples/telegram_bridge.py +0 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/ruff.toml +0 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/src/pymax/crud.py +0 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/src/pymax/exceptions.py +0 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/src/pymax/files.py +0 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/src/pymax/filters.py +0 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/src/pymax/formatter.py +0 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/src/pymax/formatting.py +0 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/src/pymax/mixins/__init__.py +0 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/src/pymax/mixins/auth.py +0 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/src/pymax/mixins/channel.py +0 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/src/pymax/mixins/group.py +0 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/src/pymax/mixins/handler.py +0 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/src/pymax/mixins/message.py +0 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/src/pymax/mixins/self.py +0 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/src/pymax/mixins/socket.py +0 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/src/pymax/mixins/telemetry.py +0 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/src/pymax/mixins/user.py +0 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/src/pymax/mixins/utils.py +0 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/src/pymax/models.py +0 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/src/pymax/navigation.py +0 -0
- {maxapi_python-1.1.16 → maxapi_python-1.1.18}/src/pymax/static/constant.py +0 -0
|
@@ -0,0 +1,480 @@
|
|
|
1
|
+
# Полная документация API
|
|
2
|
+
|
|
3
|
+
Всё, что нужно знать о методах, типах и возможностях PyMax — асинхронный WebSocket клиент для мессенджера Max.
|
|
4
|
+
|
|
5
|
+
## Содержание
|
|
6
|
+
|
|
7
|
+
- [Клиент](#client)
|
|
8
|
+
- [Типы данных](#data-types)
|
|
9
|
+
- [Исключения](#exceptions)
|
|
10
|
+
- [Перечисления](#enumerations)
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Клиент {#client}
|
|
15
|
+
|
|
16
|
+
### MaxClient
|
|
17
|
+
|
|
18
|
+
Основной асинхронный WebSocket клиент для взаимодействия с сервисом мессенджера Max.
|
|
19
|
+
|
|
20
|
+
#### Конструктор
|
|
21
|
+
|
|
22
|
+
```python
|
|
23
|
+
MaxClient(
|
|
24
|
+
phone: str,
|
|
25
|
+
uri: str = "...",
|
|
26
|
+
token: str | None = None,
|
|
27
|
+
work_dir: str = "...",
|
|
28
|
+
reconnect: bool = True,
|
|
29
|
+
reconnect_delay: float = 5.0,
|
|
30
|
+
...
|
|
31
|
+
)
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**Параметры:**
|
|
35
|
+
|
|
36
|
+
| Параметр | Тип | Описание |
|
|
37
|
+
|----------|-----|---------|
|
|
38
|
+
| `phone` | `str` | Номер телефона для авторизации (обязательно) |
|
|
39
|
+
| `uri` | `str` | URI WebSocket сервера |
|
|
40
|
+
| `token` | `str | None` | Токен для восстановления сессии |
|
|
41
|
+
| `work_dir` | `str` | Директория для БД сессии |
|
|
42
|
+
| `reconnect` | `bool` | Включить автоматическое переподключение |
|
|
43
|
+
| `reconnect_delay` | `float` | Задержка переподключения в секундах |
|
|
44
|
+
|
|
45
|
+
#### Основные методы
|
|
46
|
+
|
|
47
|
+
##### async start() -> None
|
|
48
|
+
|
|
49
|
+
Запускает клиент, подключается к WebSocket и авторизует пользователя.
|
|
50
|
+
|
|
51
|
+
```python
|
|
52
|
+
client = MaxClient(phone="+1234567890")
|
|
53
|
+
await client.start()
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
##### async close() -> None
|
|
57
|
+
|
|
58
|
+
Корректно закрывает клиент и завершает все фоновые задачи.
|
|
59
|
+
|
|
60
|
+
```python
|
|
61
|
+
await client.close()
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
#### Свойства
|
|
65
|
+
|
|
66
|
+
| Свойство | Тип | Описание |
|
|
67
|
+
|----------|-----|---------|
|
|
68
|
+
| `is_connected` | `bool` | Статус подключения к WebSocket |
|
|
69
|
+
| `phone` | `str` | Номер телефона клиента |
|
|
70
|
+
| `me` | `Me | None` | Информация о текущем пользователе |
|
|
71
|
+
| `chats` | `list[Chat]` | Список всех чатов и групп |
|
|
72
|
+
| `dialogs` | `list[Dialog]` | Список личных диалогов |
|
|
73
|
+
| `channels` | `list[Channel]` | Список каналов |
|
|
74
|
+
| `logger` | `logging.Logger` | Логгер клиента |
|
|
75
|
+
|
|
76
|
+
#### Обработчики событий
|
|
77
|
+
|
|
78
|
+
##### @on_message(filter: Filter | None = None)
|
|
79
|
+
|
|
80
|
+
Регистрирует обработчик входящих сообщений.
|
|
81
|
+
|
|
82
|
+
```python
|
|
83
|
+
@client.on_message()
|
|
84
|
+
async def handle_message(msg: Message):
|
|
85
|
+
print(f"Сообщение от {msg.sender}: {msg.text}")
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
##### @on_start()
|
|
89
|
+
|
|
90
|
+
Регистрирует обработчик события запуска клиента.
|
|
91
|
+
|
|
92
|
+
```python
|
|
93
|
+
@client.on_start()
|
|
94
|
+
async def on_startup():
|
|
95
|
+
print("Клиент запущен!")
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### SocketMaxClient
|
|
99
|
+
|
|
100
|
+
Вариант клиента на основе TCP сокета, наследует все методы и свойства MaxClient.
|
|
101
|
+
|
|
102
|
+
```python
|
|
103
|
+
client = SocketMaxClient(phone="+1234567890")
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Типы данных {#data-types}
|
|
109
|
+
|
|
110
|
+
### Me
|
|
111
|
+
|
|
112
|
+
Информация о профиле текущего пользователя.
|
|
113
|
+
|
|
114
|
+
**Свойства:**
|
|
115
|
+
|
|
116
|
+
| Свойство | Тип | Описание |
|
|
117
|
+
|----------|-----|---------|
|
|
118
|
+
| `id` | `int` | ID пользователя |
|
|
119
|
+
| `phone` | `str` | Номер телефона |
|
|
120
|
+
| `names` | `list[Names]` | Список имен профиля |
|
|
121
|
+
| `account_status` | `int` | Код статуса аккаунта |
|
|
122
|
+
| `options` | `dict` | Дополнительные параметры |
|
|
123
|
+
|
|
124
|
+
### User
|
|
125
|
+
|
|
126
|
+
Информация о пользователе.
|
|
127
|
+
|
|
128
|
+
**Свойства:**
|
|
129
|
+
|
|
130
|
+
| Свойство | Тип | Описание |
|
|
131
|
+
|----------|-----|---------|
|
|
132
|
+
| `id` | `int` | ID пользователя |
|
|
133
|
+
| `names` | `list[Names]` | Список имен |
|
|
134
|
+
| `account_status` | `int` | Статус аккаунта |
|
|
135
|
+
| `photo_id` | `int | None` | ID фото профиля |
|
|
136
|
+
| `description` | `str | None` | Биография/описание |
|
|
137
|
+
|
|
138
|
+
### Message
|
|
139
|
+
|
|
140
|
+
Сообщение в чате.
|
|
141
|
+
|
|
142
|
+
**Свойства:**
|
|
143
|
+
|
|
144
|
+
| Свойство | Тип | Описание |
|
|
145
|
+
|----------|-----|---------|
|
|
146
|
+
| `id` | `int` | ID сообщения |
|
|
147
|
+
| `chat_id` | `int | None` | ID чата/диалога |
|
|
148
|
+
| `sender` | `int | None` | ID отправителя |
|
|
149
|
+
| `text` | `str` | Текст сообщения |
|
|
150
|
+
| `time` | `int` | Unix timestamp |
|
|
151
|
+
| `type` | `MessageType | str` | Тип сообщения |
|
|
152
|
+
| `attaches` | `list` | Вложенные файлы/медиа |
|
|
153
|
+
| `reaction_info` | `ReactionInfo | None` | Данные реакций |
|
|
154
|
+
| `edit_time` | `int | None` | Время редактирования |
|
|
155
|
+
|
|
156
|
+
### Chat
|
|
157
|
+
|
|
158
|
+
Информация о чате или группе.
|
|
159
|
+
|
|
160
|
+
**Свойства:**
|
|
161
|
+
|
|
162
|
+
| Свойство | Тип | Описание |
|
|
163
|
+
|----------|-----|---------|
|
|
164
|
+
| `id` | `int` | ID чата |
|
|
165
|
+
| `type` | `ChatType | str` | Тип: DIALOG, CHAT, CHANNEL |
|
|
166
|
+
| `title` | `str | None` | Название чата |
|
|
167
|
+
| `owner` | `int` | ID владельца |
|
|
168
|
+
| `participants_count` | `int` | Количество участников |
|
|
169
|
+
| `admins` | `list[int]` | Список ID администраторов |
|
|
170
|
+
| `description` | `str | None` | Описание чата |
|
|
171
|
+
| `rules` | `str | None` | Правила чата |
|
|
172
|
+
|
|
173
|
+
### Dialog
|
|
174
|
+
|
|
175
|
+
Личный диалог между двумя пользователями.
|
|
176
|
+
|
|
177
|
+
**Свойства:**
|
|
178
|
+
|
|
179
|
+
| Свойство | Тип | Описание |
|
|
180
|
+
|----------|-----|---------|
|
|
181
|
+
| `id` | `int` | ID диалога |
|
|
182
|
+
| `owner` | `int` | ID собеседника |
|
|
183
|
+
| `type` | `ChatType` | Всегда `ChatType.DIALOG` |
|
|
184
|
+
| `last_message` | `Message | None` | Последнее сообщение |
|
|
185
|
+
|
|
186
|
+
### Channel
|
|
187
|
+
|
|
188
|
+
Канал (наследуется от Chat). Специализированный тип чата для трансляции информации.
|
|
189
|
+
|
|
190
|
+
### Contact
|
|
191
|
+
|
|
192
|
+
Запись в адресной книге.
|
|
193
|
+
|
|
194
|
+
**Свойства:**
|
|
195
|
+
|
|
196
|
+
| Свойство | Тип | Описание |
|
|
197
|
+
|----------|-----|---------|
|
|
198
|
+
| `id` | `int` | ID контакта |
|
|
199
|
+
| `names` | `list[Names]` | Имена контакта |
|
|
200
|
+
| `status` | `int` | Код статуса |
|
|
201
|
+
| `photos` | `list` | Фотографии контакта |
|
|
202
|
+
|
|
203
|
+
### Member
|
|
204
|
+
|
|
205
|
+
Участник чата.
|
|
206
|
+
|
|
207
|
+
**Свойства:**
|
|
208
|
+
|
|
209
|
+
| Свойство | Тип | Описание |
|
|
210
|
+
|----------|-----|---------|
|
|
211
|
+
| `contact` | `Contact` | Информация о контакте участника |
|
|
212
|
+
| `presence` | `Presence | None` | Статус онлайна |
|
|
213
|
+
| `read_mark` | `int` | Последнее прочитанное сообщение |
|
|
214
|
+
|
|
215
|
+
### Типы вложений
|
|
216
|
+
|
|
217
|
+
#### PhotoAttach
|
|
218
|
+
|
|
219
|
+
Вложение с фотографией.
|
|
220
|
+
|
|
221
|
+
```python
|
|
222
|
+
PhotoAttach(id: int, width: int, height: int, ...)
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
#### VideoAttach
|
|
226
|
+
|
|
227
|
+
Вложение с видео.
|
|
228
|
+
|
|
229
|
+
```python
|
|
230
|
+
VideoAttach(id: int, width: int, height: int, duration: int, ...)
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
#### FileAttach
|
|
234
|
+
|
|
235
|
+
Вложение с файлом.
|
|
236
|
+
|
|
237
|
+
```python
|
|
238
|
+
FileAttach(id: int, name: str, size: int, ...)
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
#### StickerAttach
|
|
242
|
+
|
|
243
|
+
Вложение со стикером.
|
|
244
|
+
|
|
245
|
+
```python
|
|
246
|
+
StickerAttach(id: int, sticker_id: int, ...)
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
#### AudioAttach
|
|
250
|
+
|
|
251
|
+
Вложение с аудио/голосовым сообщением.
|
|
252
|
+
|
|
253
|
+
```python
|
|
254
|
+
AudioAttach(id: int, duration: int, ...)
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
#### ControlAttach
|
|
258
|
+
|
|
259
|
+
Вложение с управляющим сообщением (специальный внутренний тип).
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## Исключения {#exceptions}
|
|
264
|
+
|
|
265
|
+
### Error
|
|
266
|
+
|
|
267
|
+
Базовое исключение для всех ошибок PyMax.
|
|
268
|
+
|
|
269
|
+
```python
|
|
270
|
+
try:
|
|
271
|
+
await client.start()
|
|
272
|
+
except pymax.Error as e:
|
|
273
|
+
print(f"Ошибка: {e.message}")
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
**Свойства:**
|
|
277
|
+
|
|
278
|
+
- `error`: Код ошибки
|
|
279
|
+
- `message`: Сообщение об ошибке
|
|
280
|
+
- `title`: Заголовок ошибки
|
|
281
|
+
- `localized_message`: Локализованное сообщение
|
|
282
|
+
|
|
283
|
+
### InvalidPhoneError
|
|
284
|
+
|
|
285
|
+
Возникает, когда формат номера телефона неверный.
|
|
286
|
+
|
|
287
|
+
```python
|
|
288
|
+
except pymax.InvalidPhoneError:
|
|
289
|
+
print("Неверный номер телефона")
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
### LoginError
|
|
293
|
+
|
|
294
|
+
Возникает при ошибке авторизации.
|
|
295
|
+
|
|
296
|
+
```python
|
|
297
|
+
except pymax.LoginError:
|
|
298
|
+
print("Ошибка входа")
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
### WebSocketNotConnectedError
|
|
302
|
+
|
|
303
|
+
Возникает, когда WebSocket не подключен.
|
|
304
|
+
|
|
305
|
+
```python
|
|
306
|
+
except pymax.WebSocketNotConnectedError:
|
|
307
|
+
print("WebSocket отключен")
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
### SocketNotConnectedError
|
|
311
|
+
|
|
312
|
+
Возникает, когда TCP сокет не подключен (SocketMaxClient).
|
|
313
|
+
|
|
314
|
+
```python
|
|
315
|
+
except pymax.SocketNotConnectedError:
|
|
316
|
+
print("Сокет отключен")
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
### RateLimitError
|
|
320
|
+
|
|
321
|
+
Возникает при превышении лимита запросов.
|
|
322
|
+
|
|
323
|
+
```python
|
|
324
|
+
except pymax.RateLimitError as e:
|
|
325
|
+
print(f"Лимит превышен на {e.retry_after} секунд")
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
### ResponseError
|
|
329
|
+
|
|
330
|
+
Возникает, когда ответ сервера указывает на ошибку.
|
|
331
|
+
|
|
332
|
+
```python
|
|
333
|
+
except pymax.ResponseError as e:
|
|
334
|
+
print(f"Ошибка сервера: {e.error}")
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
---
|
|
338
|
+
|
|
339
|
+
## Перечисления {#enumerations}
|
|
340
|
+
|
|
341
|
+
### ChatType
|
|
342
|
+
|
|
343
|
+
Тип классификации чата.
|
|
344
|
+
|
|
345
|
+
| Значение | Описание |
|
|
346
|
+
|----------|---------|
|
|
347
|
+
| `DIALOG` | Личная переписка (1:1) |
|
|
348
|
+
| `CHAT` | Групповой чат |
|
|
349
|
+
| `CHANNEL` | Канал/трансляция |
|
|
350
|
+
|
|
351
|
+
```python
|
|
352
|
+
from pymax import ChatType
|
|
353
|
+
|
|
354
|
+
if chat.type == ChatType.DIALOG:
|
|
355
|
+
print("Личный чат")
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
### MessageType
|
|
359
|
+
|
|
360
|
+
Тип классификации сообщения.
|
|
361
|
+
|
|
362
|
+
| Значение | Описание |
|
|
363
|
+
|----------|---------|
|
|
364
|
+
| `TEXT` | Обычное текстовое сообщение |
|
|
365
|
+
| `SYSTEM` | Системное сообщение |
|
|
366
|
+
| `SERVICE` | Сервисное сообщение |
|
|
367
|
+
|
|
368
|
+
### MessageStatus
|
|
369
|
+
|
|
370
|
+
Флаги статуса сообщения.
|
|
371
|
+
|
|
372
|
+
| Значение | Описание |
|
|
373
|
+
|----------|---------|
|
|
374
|
+
| `EDITED` | Сообщение отредактировано |
|
|
375
|
+
| `REMOVED` | Сообщение удалено |
|
|
376
|
+
|
|
377
|
+
### AccessType
|
|
378
|
+
|
|
379
|
+
Уровень доступа для чатов/каналов.
|
|
380
|
+
|
|
381
|
+
| Значение | Описание |
|
|
382
|
+
|----------|---------|
|
|
383
|
+
| `PUBLIC` | Открытый доступ |
|
|
384
|
+
| `PRIVATE` | Приватный (только по приглашению) |
|
|
385
|
+
| `SECRET` | Секретный/зашифрованный |
|
|
386
|
+
|
|
387
|
+
### AttachType
|
|
388
|
+
|
|
389
|
+
Тип вложения файла.
|
|
390
|
+
|
|
391
|
+
| Значение | Описание |
|
|
392
|
+
|----------|---------|
|
|
393
|
+
| `PHOTO` | Фотография/изображение |
|
|
394
|
+
| `VIDEO` | Видеофайл |
|
|
395
|
+
| `FILE` | Документ/файл |
|
|
396
|
+
| `STICKER` | Стикер/эмодзи |
|
|
397
|
+
| `AUDIO` | Аудио/голосовое сообщение |
|
|
398
|
+
| `CONTROL` | Управляющее/системное вложение |
|
|
399
|
+
|
|
400
|
+
### DeviceType
|
|
401
|
+
|
|
402
|
+
Тип устройства платформы.
|
|
403
|
+
|
|
404
|
+
| Значение | Описание |
|
|
405
|
+
|----------|---------|
|
|
406
|
+
| `WEB` | Веб-приложение |
|
|
407
|
+
| `ANDROID` | Приложение Android |
|
|
408
|
+
| `IOS` | Приложение iOS |
|
|
409
|
+
| `DESKTOP` | Десктопный клиент |
|
|
410
|
+
|
|
411
|
+
### AuthType
|
|
412
|
+
|
|
413
|
+
Тип метода аутентификации.
|
|
414
|
+
|
|
415
|
+
| Значение | Описание |
|
|
416
|
+
|----------|---------|
|
|
417
|
+
| `START_AUTH` | Начало процесса аутентификации |
|
|
418
|
+
| `CHECK_CODE` | Проверка кода OTP |
|
|
419
|
+
| `REGISTER` | Регистрация нового аккаунта |
|
|
420
|
+
|
|
421
|
+
### ElementType
|
|
422
|
+
|
|
423
|
+
Тип элемента форматированного текста.
|
|
424
|
+
|
|
425
|
+
| Значение | Описание |
|
|
426
|
+
|----------|---------|
|
|
427
|
+
| `text` | Простой текст |
|
|
428
|
+
| `mention` | Упоминание пользователя @user |
|
|
429
|
+
| `link` | Гиперссылка |
|
|
430
|
+
| `emoji` | Эмодзи/эмотикон |
|
|
431
|
+
| `bold` | Жирное форматирование |
|
|
432
|
+
| `italic` | Курсивное форматирование |
|
|
433
|
+
|
|
434
|
+
### FormattingType
|
|
435
|
+
|
|
436
|
+
Тип форматирования текста.
|
|
437
|
+
|
|
438
|
+
| Значение | Описание |
|
|
439
|
+
|----------|---------|
|
|
440
|
+
| `BOLD` | Жирный текст |
|
|
441
|
+
| `ITALIC` | Курсив |
|
|
442
|
+
| `UNDERLINE` | Подчеркивание |
|
|
443
|
+
| `STRIKETHROUGH` | Зачеркивание |
|
|
444
|
+
| `MONOSPACE` | Моноширинный/код |
|
|
445
|
+
|
|
446
|
+
### MarkupType
|
|
447
|
+
|
|
448
|
+
Тип разметки сообщения.
|
|
449
|
+
|
|
450
|
+
| Значение | Описание |
|
|
451
|
+
|----------|---------|
|
|
452
|
+
| `TEXT` | Простой текст |
|
|
453
|
+
| `HTML` | Разметка HTML |
|
|
454
|
+
| `MARKDOWN` | Разметка Markdown |
|
|
455
|
+
|
|
456
|
+
### ContactAction
|
|
457
|
+
|
|
458
|
+
Действие взаимодействия с контактом.
|
|
459
|
+
|
|
460
|
+
| Значение | Описание |
|
|
461
|
+
|----------|---------|
|
|
462
|
+
| `ADDED` | Контакт добавлен |
|
|
463
|
+
| `REMOVED` | Контакт удален |
|
|
464
|
+
| `CHANGED` | Информация контакта изменена |
|
|
465
|
+
|
|
466
|
+
### Opcode
|
|
467
|
+
|
|
468
|
+
Коды операций протокола WebSocket (150+ значений).
|
|
469
|
+
|
|
470
|
+
Коды низкоуровневого общения для внутреннего использования. Основные примеры:
|
|
471
|
+
|
|
472
|
+
| Значение | Код | Описание |
|
|
473
|
+
|----------|-----|---------|
|
|
474
|
+
| 1 | `PING` | Проверка соединения |
|
|
475
|
+
| 2 | `PONG` | Ответ на проверку |
|
|
476
|
+
| 3 | `LOGIN` | Запрос аутентификации |
|
|
477
|
+
| 4 | `MSG_SEND` | Отправка сообщения |
|
|
478
|
+
| 5 | `MSG_READ` | Отметить сообщение прочитанным |
|
|
479
|
+
|
|
480
|
+
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Как пользоваться MaxClient
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## Содержание
|
|
4
4
|
|
|
5
5
|
- [Установка и Настройка](#установка-и-настройка)
|
|
6
6
|
- [Основные Возможности](#основные-возможности)
|
|
@@ -35,13 +35,13 @@ client = MaxClient(
|
|
|
35
35
|
|----------|-----|----------|---------------|
|
|
36
36
|
| `phone` | `str` | Номер телефона для авторизации | - |
|
|
37
37
|
| `uri` | `str` | URI WebSocket сервера | `Constants.WEBSOCKET_URI.value` |
|
|
38
|
-
| `headers` | `dict[str, Any]
|
|
39
|
-
| `token` | `str
|
|
38
|
+
| `headers` | `dict[str, Any] | None` | Заголовки для соединения | `Constants.DEFAULT_USER_AGENT_PAYLOAD.value` |
|
|
39
|
+
| `token` | `str | None` | Токен авторизации | `None` |
|
|
40
40
|
| `send_fake_telemetry` | `bool` | Отправка телеметрии | `True` |
|
|
41
41
|
| `host` | `str` | Хост API сервера | `Constants.HOST.value` |
|
|
42
42
|
| `port` | `int` | Порт API сервера | `Constants.PORT.value` |
|
|
43
43
|
| `work_dir` | `str` | Директория для БД | `"."` |
|
|
44
|
-
| `logger` | `logging.Logger
|
|
44
|
+
| `logger` | `logging.Logger | None` | Пользовательский логгер | `None` |
|
|
45
45
|
|
|
46
46
|
**Пример базовой инициализации**
|
|
47
47
|
```python
|
|
@@ -71,7 +71,7 @@ client = MaxClient(
|
|
|
71
71
|
)
|
|
72
72
|
```
|
|
73
73
|
|
|
74
|
-
##
|
|
74
|
+
## Основные возможности {#основные-возможности}
|
|
75
75
|
|
|
76
76
|
### Свойства Клиента
|
|
77
77
|
|
|
@@ -82,7 +82,7 @@ client = MaxClient(
|
|
|
82
82
|
|----------|-----|----------|
|
|
83
83
|
| `is_connected` | `bool` | Статус подключения |
|
|
84
84
|
| `phone` | `str` | Номер телефона |
|
|
85
|
-
| `me` | `Me
|
|
85
|
+
| `me` | `Me | None` | Информация о пользователе |
|
|
86
86
|
|
|
87
87
|
#### Доступ к Данным
|
|
88
88
|
|
|
@@ -93,7 +93,7 @@ client = MaxClient(
|
|
|
93
93
|
| `dialogs` | `list[Dialog]` | Личные диалоги |
|
|
94
94
|
| `channels` | `list[Channel]` | Каналы |
|
|
95
95
|
|
|
96
|
-
##
|
|
96
|
+
## Управление подключением {#управление-подключением}
|
|
97
97
|
|
|
98
98
|
### Запуск и Остановка
|
|
99
99
|
|
|
@@ -140,7 +140,7 @@ async def main():
|
|
|
140
140
|
# Клиент автоматически закроется
|
|
141
141
|
```
|
|
142
142
|
|
|
143
|
-
##
|
|
143
|
+
## Работа с Сообщениями
|
|
144
144
|
|
|
145
145
|
### Обработка Сообщений
|
|
146
146
|
|
|
@@ -169,7 +169,7 @@ async def main():
|
|
|
169
169
|
print(f"Текст: {message.text}")
|
|
170
170
|
```
|
|
171
171
|
|
|
172
|
-
##
|
|
172
|
+
## Работа с данными {#работа-с-данными}
|
|
173
173
|
|
|
174
174
|
### Доступ к Чатам
|
|
175
175
|
|
|
@@ -202,7 +202,7 @@ async def main():
|
|
|
202
202
|
print(f"Статус: {me.account_status}")
|
|
203
203
|
```
|
|
204
204
|
|
|
205
|
-
##
|
|
205
|
+
## Хранение Данных
|
|
206
206
|
|
|
207
207
|
### База Данных
|
|
208
208
|
|
|
@@ -217,7 +217,7 @@ async def main():
|
|
|
217
217
|
- Персистентное хранение
|
|
218
218
|
- Безопасное сохранение токенов
|
|
219
219
|
|
|
220
|
-
##
|
|
220
|
+
## Лучшие практики {#лучшие-практики}
|
|
221
221
|
|
|
222
222
|
### Безопасное Использование
|
|
223
223
|
|
|
@@ -266,7 +266,7 @@ async def main():
|
|
|
266
266
|
async def handle_message(message: Message):
|
|
267
267
|
await self.process_message(message)
|
|
268
268
|
|
|
269
|
-
@self.client.on_start
|
|
269
|
+
@self.client.on_start
|
|
270
270
|
async def handle_start():
|
|
271
271
|
await self.on_ready()
|
|
272
272
|
|