maxapi-python 2.0.0__py3-none-any.whl → 2.1.0__py3-none-any.whl

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 (61) hide show
  1. {maxapi_python-2.0.0.dist-info → maxapi_python-2.1.0.dist-info}/METADATA +4 -1
  2. {maxapi_python-2.0.0.dist-info → maxapi_python-2.1.0.dist-info}/RECORD +61 -54
  3. pymax/__init__.py +1 -1
  4. pymax/api/auth/enums.py +13 -2
  5. pymax/api/auth/payloads.py +10 -6
  6. pymax/api/auth/service.py +75 -12
  7. pymax/api/bots/__init__.py +1 -0
  8. pymax/api/bots/payloads.py +7 -0
  9. pymax/api/bots/service.py +35 -0
  10. pymax/api/chats/enums.py +1 -0
  11. pymax/api/chats/payloads.py +14 -0
  12. pymax/api/chats/service.py +112 -12
  13. pymax/api/facade.py +2 -0
  14. pymax/api/messages/payloads.py +5 -1
  15. pymax/api/messages/service.py +36 -11
  16. pymax/api/self/service.py +18 -6
  17. pymax/api/session/payloads.py +9 -2
  18. pymax/api/uploads/models.py +1 -4
  19. pymax/api/uploads/payloads.py +9 -3
  20. pymax/api/uploads/service.py +103 -35
  21. pymax/api/users/service.py +15 -5
  22. pymax/app.py +15 -5
  23. pymax/auth/qr.py +11 -6
  24. pymax/auth/sms.py +13 -4
  25. pymax/base.py +1 -0
  26. pymax/client.py +4 -1
  27. pymax/client_web.py +4 -2
  28. pymax/config.py +11 -3
  29. pymax/connection/connection.py +15 -5
  30. pymax/connection/readers/tcp.py +4 -2
  31. pymax/dispatch/dispatcher.py +28 -10
  32. pymax/dispatch/mapping.py +11 -4
  33. pymax/dispatch/router.py +2 -0
  34. pymax/files/base.py +6 -1
  35. pymax/formatting/markdown.py +4 -1
  36. pymax/infra/auth.py +42 -0
  37. pymax/infra/base.py +2 -0
  38. pymax/infra/bots.py +33 -0
  39. pymax/infra/chat.py +102 -1
  40. pymax/protocol/tcp/compression.py +3 -1
  41. pymax/protocol/tcp/framing.py +6 -11
  42. pymax/protocol/tcp/payload.py +3 -2
  43. pymax/protocol/tcp/protocol.py +13 -3
  44. pymax/protocol/ws/protocol.py +9 -3
  45. pymax/session/protocol.py +6 -2
  46. pymax/session/store.py +24 -8
  47. pymax/telemetry/navigation.py +3 -1
  48. pymax/telemetry/service.py +9 -3
  49. pymax/transport/tcp.py +10 -4
  50. pymax/transport/websocket.py +0 -2
  51. pymax/types/domain/__init__.py +3 -0
  52. pymax/types/domain/bots.py +14 -0
  53. pymax/types/domain/error.py +3 -3
  54. pymax/types/domain/folder.py +1 -1
  55. pymax/types/domain/login.py +18 -6
  56. pymax/types/domain/member.py +16 -0
  57. pymax/types/domain/presence.py +15 -0
  58. pymax/types/domain/sync.py +21 -5
  59. pymax/types/domain/user.py +12 -0
  60. {maxapi_python-2.0.0.dist-info → maxapi_python-2.1.0.dist-info}/WHEEL +0 -0
  61. {maxapi_python-2.0.0.dist-info → maxapi_python-2.1.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,10 +1,13 @@
1
1
  from .attachments import *
2
+ from .bots import InitData
2
3
  from .chat import Chat
3
4
  from .error import MaxApiError
4
5
  from .folder import Folder, FolderList, FolderUpdate
5
6
  from .login import LoginResponse
7
+ from .member import Member
6
8
  from .message import Message, ReactionCounter, ReactionInfo, ReadState
7
9
  from .name import Name
10
+ from .presence import Presence
8
11
  from .profile import Profile
9
12
  from .session import Session
10
13
  from .sync import SyncOverrides, SyncState
@@ -0,0 +1,14 @@
1
+ from .base import CamelModel
2
+
3
+
4
+ class InitData(CamelModel):
5
+ """Начальные данные web app-бота.
6
+
7
+ :ivar query_id: ID запроса инициализации.
8
+ :vartype query_id: str
9
+ :ivar url: URL для открытия web app-бота.
10
+ :vartype url: str
11
+ """
12
+
13
+ query_id: str
14
+ url: str
@@ -9,12 +9,12 @@ class MaxApiError(CamelModel):
9
9
  :ivar message: Сообщение ошибки.
10
10
  :vartype message: str
11
11
  :ivar title: Заголовок ошибки.
12
- :vartype title: str
12
+ :vartype title: str | None
13
13
  :ivar localized_message: Локализованное сообщение ошибки.
14
14
  :vartype localized_message: str | None
15
15
  """
16
16
 
17
17
  error: str
18
18
  message: str
19
- title: str
20
- localized_message: str | None
19
+ title: str | None = None
20
+ localized_message: str | None = None
@@ -1,4 +1,4 @@
1
- from collections.abc import Generator, Iterator
1
+ from collections.abc import Iterator
2
2
  from typing import Any
3
3
 
4
4
  from pydantic import Field
@@ -16,7 +16,9 @@ class LoginConfig(CamelModel):
16
16
  class LoginResponse(CamelModel):
17
17
  chats: list[Chat] = Field(default_factory=list)
18
18
  profile: Profile
19
- messages: dict[int, list[Message]] = Field(default_factory=dict) # chat_id -> [message]
19
+ messages: dict[int, list[Message]] = Field(
20
+ default_factory=dict
21
+ ) # chat_id -> [message]
20
22
  contacts: list[User | None] = Field(default_factory=list)
21
23
  token: str
22
24
  time: int | None = None
@@ -27,9 +29,19 @@ class LoginResponse(CamelModel):
27
29
  config_hash = self.config.hash if self.config is not None else None
28
30
 
29
31
  return SyncState(
30
- chats_sync=(sync_time if sync_time is not None else current.chats_sync),
31
- contacts_sync=(sync_time if sync_time is not None else current.contacts_sync),
32
- drafts_sync=(sync_time if sync_time is not None else current.drafts_sync),
33
- presence_sync=(sync_time if sync_time is not None else current.presence_sync),
34
- config_hash=(config_hash if config_hash is not None else current.config_hash),
32
+ chats_sync=(
33
+ sync_time if sync_time is not None else current.chats_sync
34
+ ),
35
+ contacts_sync=(
36
+ sync_time if sync_time is not None else current.contacts_sync
37
+ ),
38
+ drafts_sync=(
39
+ sync_time if sync_time is not None else current.drafts_sync
40
+ ),
41
+ presence_sync=(
42
+ sync_time if sync_time is not None else current.presence_sync
43
+ ),
44
+ config_hash=(
45
+ config_hash if config_hash is not None else current.config_hash
46
+ ),
35
47
  )
@@ -0,0 +1,16 @@
1
+ from .base import CamelModel
2
+ from .presence import Presence
3
+ from .user import User
4
+
5
+
6
+ class Member(CamelModel):
7
+ """Пользователь из списка участников или заявок на вступление.
8
+
9
+ :ivar contact: Данные пользователя.
10
+ :vartype contact: User
11
+ :ivar presence: Информация о присутствии пользователя.
12
+ :vartype presence: Presence
13
+ """
14
+
15
+ contact: User
16
+ presence: Presence
@@ -0,0 +1,15 @@
1
+ from .base import CamelModel
2
+
3
+
4
+ class Presence(CamelModel):
5
+ """Состояние присутствия пользователя.
6
+
7
+ :ivar seen: Время последней активности в формате Unix time, если оно
8
+ передано сервером.
9
+ :vartype seen: int | None
10
+ :ivar status: Код статуса присутствия Max.
11
+ :vartype status: int
12
+ """
13
+
14
+ seen: int | None = None
15
+ status: int
@@ -68,13 +68,29 @@ class SyncOverrides(BaseModel):
68
68
  :rtype: SyncState
69
69
  """
70
70
  return SyncState(
71
- chats_sync=(self.chats_sync if self.chats_sync is not None else saved.chats_sync),
71
+ chats_sync=(
72
+ self.chats_sync
73
+ if self.chats_sync is not None
74
+ else saved.chats_sync
75
+ ),
72
76
  contacts_sync=(
73
- self.contacts_sync if self.contacts_sync is not None else saved.contacts_sync
77
+ self.contacts_sync
78
+ if self.contacts_sync is not None
79
+ else saved.contacts_sync
80
+ ),
81
+ drafts_sync=(
82
+ self.drafts_sync
83
+ if self.drafts_sync is not None
84
+ else saved.drafts_sync
74
85
  ),
75
- drafts_sync=(self.drafts_sync if self.drafts_sync is not None else saved.drafts_sync),
76
86
  presence_sync=(
77
- self.presence_sync if self.presence_sync is not None else saved.presence_sync
87
+ self.presence_sync
88
+ if self.presence_sync is not None
89
+ else saved.presence_sync
90
+ ),
91
+ config_hash=(
92
+ self.config_hash
93
+ if self.config_hash is not None
94
+ else saved.config_hash
78
95
  ),
79
- config_hash=(self.config_hash if self.config_hash is not None else saved.config_hash),
80
96
  )
@@ -18,6 +18,10 @@ class User(CamelModel):
18
18
  :vartype id: int
19
19
  :ivar account_status: Статус аккаунта в кодировке Max.
20
20
  :vartype account_status: int | None
21
+ :ivar registration_time: Время регистрации в формате Unix time.
22
+ :vartype registration_time: int | None
23
+ :ivar country: Код страны пользователя.
24
+ :vartype country: str | None
21
25
  :ivar base_raw_url: Исходный URL аватара.
22
26
  :vartype base_raw_url: str | None
23
27
  :ivar base_url: URL аватара.
@@ -30,6 +34,10 @@ class User(CamelModel):
30
34
  :vartype photo_id: int | None
31
35
  :ivar update_time: Время обновления в формате Unix time.
32
36
  :vartype update_time: int | None
37
+ :ivar phone: Телефон пользователя, если возвращен API.
38
+ :vartype phone: int | None
39
+ :ivar status: Статус контакта, если возвращен API.
40
+ :vartype status: str | None
33
41
  :ivar description: Описание профиля.
34
42
  :vartype description: str | None
35
43
  :ivar gender: Пол пользователя.
@@ -44,12 +52,16 @@ class User(CamelModel):
44
52
 
45
53
  id: int
46
54
  account_status: int | None = None
55
+ registration_time: int | None = None
56
+ country: str | None = None
47
57
  base_raw_url: str | None = None
48
58
  base_url: str | None = None
49
59
  names: list[Name] = Field(default_factory=list)
50
60
  options: list[str] = Field(default_factory=list)
51
61
  photo_id: int | None = None
52
62
  update_time: int | None = None
63
+ phone: int | None = None
64
+ status: str | None = None
53
65
  description: str | None = None
54
66
  gender: str | None = None
55
67
  link: str | None = None