maxapi-python 1.2.4__tar.gz → 2.0.0__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 (250) hide show
  1. {maxapi_python-1.2.4 → maxapi_python-2.0.0}/.github/workflows/publish.yml +13 -13
  2. maxapi_python-2.0.0/.gitignore +44 -0
  3. maxapi_python-2.0.0/PKG-INFO +217 -0
  4. maxapi_python-2.0.0/README.md +174 -0
  5. maxapi_python-2.0.0/docs/_static/.gitkeep +1 -0
  6. maxapi_python-2.0.0/docs/account.rst +127 -0
  7. maxapi_python-2.0.0/docs/api/auth.rst +35 -0
  8. maxapi_python-2.0.0/docs/api/client.rst +17 -0
  9. maxapi_python-2.0.0/docs/api/files.rst +14 -0
  10. maxapi_python-2.0.0/docs/api/router.rst +10 -0
  11. maxapi_python-2.0.0/docs/auth.rst +231 -0
  12. maxapi_python-2.0.0/docs/chats.rst +164 -0
  13. maxapi_python-2.0.0/docs/client.rst +244 -0
  14. maxapi_python-2.0.0/docs/conf.py +148 -0
  15. maxapi_python-2.0.0/docs/examples.rst +151 -0
  16. maxapi_python-2.0.0/docs/faq.rst +98 -0
  17. maxapi_python-2.0.0/docs/files.rst +117 -0
  18. maxapi_python-2.0.0/docs/formatting.rst +81 -0
  19. maxapi_python-2.0.0/docs/getting-started.rst +126 -0
  20. maxapi_python-2.0.0/docs/index.rst +48 -0
  21. maxapi_python-2.0.0/docs/messages.rst +148 -0
  22. maxapi_python-2.0.0/docs/router.rst +188 -0
  23. maxapi_python-2.0.0/docs/troubleshooting.rst +114 -0
  24. maxapi_python-2.0.0/docs/types/audio_attachment.rst +6 -0
  25. maxapi_python-2.0.0/docs/types/call_attachment.rst +6 -0
  26. maxapi_python-2.0.0/docs/types/chat.rst +6 -0
  27. maxapi_python-2.0.0/docs/types/contact_attachment.rst +6 -0
  28. maxapi_python-2.0.0/docs/types/control_attachment.rst +6 -0
  29. maxapi_python-2.0.0/docs/types/element.rst +6 -0
  30. maxapi_python-2.0.0/docs/types/enums.rst +44 -0
  31. maxapi_python-2.0.0/docs/types/file_attachment.rst +6 -0
  32. maxapi_python-2.0.0/docs/types/folder.rst +6 -0
  33. maxapi_python-2.0.0/docs/types/folder_list.rst +6 -0
  34. maxapi_python-2.0.0/docs/types/folder_update.rst +6 -0
  35. maxapi_python-2.0.0/docs/types/index.rst +110 -0
  36. maxapi_python-2.0.0/docs/types/inline_keyboard_attachment.rst +8 -0
  37. maxapi_python-2.0.0/docs/types/message.rst +6 -0
  38. maxapi_python-2.0.0/docs/types/message_delete_event.rst +6 -0
  39. maxapi_python-2.0.0/docs/types/name.rst +6 -0
  40. maxapi_python-2.0.0/docs/types/photo_attachment.rst +6 -0
  41. maxapi_python-2.0.0/docs/types/profile.rst +6 -0
  42. maxapi_python-2.0.0/docs/types/reaction_counter.rst +6 -0
  43. maxapi_python-2.0.0/docs/types/reaction_info.rst +6 -0
  44. maxapi_python-2.0.0/docs/types/read_state.rst +6 -0
  45. maxapi_python-2.0.0/docs/types/session.rst +6 -0
  46. maxapi_python-2.0.0/docs/types/share_attachment.rst +6 -0
  47. maxapi_python-2.0.0/docs/types/sticker_attachment.rst +6 -0
  48. maxapi_python-2.0.0/docs/types/sync_overrides.rst +6 -0
  49. maxapi_python-2.0.0/docs/types/sync_state.rst +6 -0
  50. maxapi_python-2.0.0/docs/types/user.rst +6 -0
  51. maxapi_python-2.0.0/docs/types/video_attachment.rst +6 -0
  52. maxapi_python-2.0.0/docs/users.rst +115 -0
  53. {maxapi_python-1.2.4 → maxapi_python-2.0.0}/pyproject.toml +67 -49
  54. maxapi_python-2.0.0/src/pymax/__init__.py +58 -0
  55. maxapi_python-2.0.0/src/pymax/api/__init__.py +17 -0
  56. maxapi_python-2.0.0/src/pymax/api/auth/__init__.py +1 -0
  57. maxapi_python-2.0.0/src/pymax/api/auth/enums.py +17 -0
  58. maxapi_python-2.0.0/src/pymax/api/auth/payloads.py +129 -0
  59. maxapi_python-2.0.0/src/pymax/api/auth/service.py +313 -0
  60. maxapi_python-2.0.0/src/pymax/api/auth/types.py +13 -0
  61. maxapi_python-2.0.0/src/pymax/api/chats/__init__.py +8 -0
  62. maxapi_python-2.0.0/src/pymax/api/chats/enums.py +27 -0
  63. maxapi_python-2.0.0/src/pymax/api/chats/payloads.py +103 -0
  64. maxapi_python-2.0.0/src/pymax/api/chats/service.py +277 -0
  65. maxapi_python-2.0.0/src/pymax/api/facade.py +32 -0
  66. maxapi_python-2.0.0/src/pymax/api/messages/__init__.py +1 -0
  67. maxapi_python-2.0.0/src/pymax/api/messages/enums.py +17 -0
  68. maxapi_python-2.0.0/src/pymax/api/messages/payloads.py +92 -0
  69. maxapi_python-2.0.0/src/pymax/api/messages/service.py +337 -0
  70. maxapi_python-2.0.0/src/pymax/api/models.py +13 -0
  71. maxapi_python-2.0.0/src/pymax/api/response.py +123 -0
  72. maxapi_python-2.0.0/src/pymax/api/self/__init__.py +2 -0
  73. maxapi_python-2.0.0/src/pymax/api/self/enums.py +11 -0
  74. maxapi_python-2.0.0/src/pymax/api/self/payloads.py +41 -0
  75. maxapi_python-2.0.0/src/pymax/api/self/service.py +142 -0
  76. maxapi_python-2.0.0/src/pymax/api/session/__init__.py +1 -0
  77. maxapi_python-2.0.0/src/pymax/api/session/enums.py +10 -0
  78. maxapi_python-2.0.0/src/pymax/api/session/payloads.py +76 -0
  79. maxapi_python-2.0.0/src/pymax/api/session/service.py +72 -0
  80. maxapi_python-2.0.0/src/pymax/api/uploads/__init__.py +1 -0
  81. maxapi_python-2.0.0/src/pymax/api/uploads/models.py +49 -0
  82. maxapi_python-2.0.0/src/pymax/api/uploads/payloads.py +25 -0
  83. maxapi_python-2.0.0/src/pymax/api/uploads/service.py +458 -0
  84. maxapi_python-2.0.0/src/pymax/api/users/__init__.py +2 -0
  85. maxapi_python-2.0.0/src/pymax/api/users/enums.py +12 -0
  86. maxapi_python-2.0.0/src/pymax/api/users/payloads.py +16 -0
  87. maxapi_python-2.0.0/src/pymax/api/users/service.py +124 -0
  88. maxapi_python-2.0.0/src/pymax/app.py +273 -0
  89. maxapi_python-2.0.0/src/pymax/auth/__init__.py +25 -0
  90. maxapi_python-2.0.0/src/pymax/auth/base.py +37 -0
  91. maxapi_python-2.0.0/src/pymax/auth/email.py +0 -0
  92. maxapi_python-2.0.0/src/pymax/auth/models.py +5 -0
  93. maxapi_python-2.0.0/src/pymax/auth/providers.py +127 -0
  94. maxapi_python-2.0.0/src/pymax/auth/qr.py +135 -0
  95. maxapi_python-2.0.0/src/pymax/auth/service.py +25 -0
  96. maxapi_python-2.0.0/src/pymax/auth/sms.py +122 -0
  97. maxapi_python-2.0.0/src/pymax/base.py +204 -0
  98. maxapi_python-2.0.0/src/pymax/client.py +106 -0
  99. maxapi_python-2.0.0/src/pymax/client_web.py +83 -0
  100. maxapi_python-2.0.0/src/pymax/config.py +215 -0
  101. maxapi_python-2.0.0/src/pymax/connection/__init__.py +1 -0
  102. maxapi_python-2.0.0/src/pymax/connection/connection.py +205 -0
  103. maxapi_python-2.0.0/src/pymax/connection/pending.py +46 -0
  104. maxapi_python-2.0.0/src/pymax/connection/readers/__init__.py +2 -0
  105. maxapi_python-2.0.0/src/pymax/connection/readers/base.py +6 -0
  106. maxapi_python-2.0.0/src/pymax/connection/readers/tcp.py +29 -0
  107. maxapi_python-2.0.0/src/pymax/connection/readers/ws.py +14 -0
  108. maxapi_python-2.0.0/src/pymax/dispatch/__init__.py +10 -0
  109. maxapi_python-2.0.0/src/pymax/dispatch/dispatcher.py +222 -0
  110. maxapi_python-2.0.0/src/pymax/dispatch/enums.py +12 -0
  111. maxapi_python-2.0.0/src/pymax/dispatch/mapping.py +73 -0
  112. maxapi_python-2.0.0/src/pymax/dispatch/resolvers.py +52 -0
  113. maxapi_python-2.0.0/src/pymax/dispatch/router.py +216 -0
  114. maxapi_python-2.0.0/src/pymax/exceptions.py +41 -0
  115. maxapi_python-2.0.0/src/pymax/files/__init__.py +9 -0
  116. maxapi_python-2.0.0/src/pymax/files/base.py +82 -0
  117. maxapi_python-2.0.0/src/pymax/files/file.py +76 -0
  118. maxapi_python-2.0.0/src/pymax/files/photo.py +108 -0
  119. maxapi_python-2.0.0/src/pymax/files/static.py +10 -0
  120. maxapi_python-2.0.0/src/pymax/files/video.py +74 -0
  121. maxapi_python-2.0.0/src/pymax/formatting/__init__.py +0 -0
  122. maxapi_python-2.0.0/src/pymax/formatting/markdown.py +217 -0
  123. maxapi_python-2.0.0/src/pymax/infra/__init__.py +1 -0
  124. maxapi_python-2.0.0/src/pymax/infra/auth.py +55 -0
  125. maxapi_python-2.0.0/src/pymax/infra/base.py +15 -0
  126. maxapi_python-2.0.0/src/pymax/infra/chat.py +240 -0
  127. maxapi_python-2.0.0/src/pymax/infra/message.py +252 -0
  128. maxapi_python-2.0.0/src/pymax/infra/protocol.py +9 -0
  129. maxapi_python-2.0.0/src/pymax/infra/self.py +139 -0
  130. maxapi_python-2.0.0/src/pymax/infra/user.py +107 -0
  131. maxapi_python-2.0.0/src/pymax/logging.py +129 -0
  132. maxapi_python-2.0.0/src/pymax/protocol/__init__.py +11 -0
  133. maxapi_python-2.0.0/src/pymax/protocol/base.py +13 -0
  134. maxapi_python-1.2.4/src/pymax/static/enum.py → maxapi_python-2.0.0/src/pymax/protocol/enums.py +36 -79
  135. maxapi_python-2.0.0/src/pymax/protocol/models.py +33 -0
  136. maxapi_python-2.0.0/src/pymax/protocol/tcp/__init__.py +1 -0
  137. maxapi_python-2.0.0/src/pymax/protocol/tcp/compression.py +97 -0
  138. maxapi_python-2.0.0/src/pymax/protocol/tcp/framing.py +68 -0
  139. maxapi_python-2.0.0/src/pymax/protocol/tcp/payload.py +127 -0
  140. maxapi_python-2.0.0/src/pymax/protocol/tcp/protocol.py +68 -0
  141. maxapi_python-2.0.0/src/pymax/protocol/ws/__init__.py +1 -0
  142. maxapi_python-2.0.0/src/pymax/protocol/ws/protocol.py +27 -0
  143. maxapi_python-2.0.0/src/pymax/py.typed +0 -0
  144. maxapi_python-2.0.0/src/pymax/routers.py +8 -0
  145. maxapi_python-2.0.0/src/pymax/session/__init__.py +3 -0
  146. maxapi_python-2.0.0/src/pymax/session/models.py +11 -0
  147. maxapi_python-2.0.0/src/pymax/session/protocol.py +14 -0
  148. maxapi_python-2.0.0/src/pymax/session/store.py +232 -0
  149. maxapi_python-2.0.0/src/pymax/telemetry/__init__.py +3 -0
  150. maxapi_python-2.0.0/src/pymax/telemetry/navigation.py +181 -0
  151. maxapi_python-2.0.0/src/pymax/telemetry/payloads.py +142 -0
  152. maxapi_python-2.0.0/src/pymax/telemetry/service.py +225 -0
  153. maxapi_python-2.0.0/src/pymax/transport/__init__.py +0 -0
  154. maxapi_python-2.0.0/src/pymax/transport/base.py +14 -0
  155. maxapi_python-2.0.0/src/pymax/transport/tcp.py +93 -0
  156. maxapi_python-2.0.0/src/pymax/transport/websocket.py +50 -0
  157. maxapi_python-2.0.0/src/pymax/types/__init__.py +2 -0
  158. maxapi_python-2.0.0/src/pymax/types/domain/__init__.py +11 -0
  159. maxapi_python-2.0.0/src/pymax/types/domain/attachments/__init__.py +11 -0
  160. maxapi_python-2.0.0/src/pymax/types/domain/attachments/audio.py +35 -0
  161. maxapi_python-2.0.0/src/pymax/types/domain/attachments/call.py +26 -0
  162. maxapi_python-2.0.0/src/pymax/types/domain/attachments/contact.py +32 -0
  163. maxapi_python-2.0.0/src/pymax/types/domain/attachments/control.py +20 -0
  164. maxapi_python-2.0.0/src/pymax/types/domain/attachments/enums.py +27 -0
  165. maxapi_python-2.0.0/src/pymax/types/domain/attachments/file.py +56 -0
  166. maxapi_python-2.0.0/src/pymax/types/domain/attachments/keyboards/__init__.py +1 -0
  167. maxapi_python-2.0.0/src/pymax/types/domain/attachments/keyboards/inline.py +19 -0
  168. maxapi_python-2.0.0/src/pymax/types/domain/attachments/photo.py +45 -0
  169. maxapi_python-2.0.0/src/pymax/types/domain/attachments/share.py +29 -0
  170. maxapi_python-2.0.0/src/pymax/types/domain/attachments/sticker.py +50 -0
  171. maxapi_python-2.0.0/src/pymax/types/domain/attachments/video.py +90 -0
  172. maxapi_python-2.0.0/src/pymax/types/domain/auth.py +161 -0
  173. maxapi_python-2.0.0/src/pymax/types/domain/base.py +17 -0
  174. maxapi_python-2.0.0/src/pymax/types/domain/chat.py +426 -0
  175. maxapi_python-2.0.0/src/pymax/types/domain/element.py +24 -0
  176. maxapi_python-2.0.0/src/pymax/types/domain/enums.py +24 -0
  177. maxapi_python-2.0.0/src/pymax/types/domain/error.py +20 -0
  178. maxapi_python-2.0.0/src/pymax/types/domain/folder.py +74 -0
  179. maxapi_python-2.0.0/src/pymax/types/domain/login.py +35 -0
  180. maxapi_python-2.0.0/src/pymax/types/domain/message.py +378 -0
  181. maxapi_python-2.0.0/src/pymax/types/domain/name.py +20 -0
  182. maxapi_python-2.0.0/src/pymax/types/domain/profile.py +15 -0
  183. maxapi_python-2.0.0/src/pymax/types/domain/session.py +52 -0
  184. maxapi_python-2.0.0/src/pymax/types/domain/sync.py +80 -0
  185. maxapi_python-2.0.0/src/pymax/types/domain/user.py +117 -0
  186. maxapi_python-2.0.0/src/pymax/types/events/__init__.py +3 -0
  187. maxapi_python-2.0.0/src/pymax/types/events/file.py +5 -0
  188. maxapi_python-2.0.0/src/pymax/types/events/message.py +37 -0
  189. maxapi_python-2.0.0/src/pymax/types/events/video.py +5 -0
  190. maxapi_python-2.0.0/uv.lock +2534 -0
  191. maxapi_python-1.2.4/.coderabbit.yaml +0 -6
  192. maxapi_python-1.2.4/.github/FUNDING.yml +0 -15
  193. maxapi_python-1.2.4/.github/workflows/tests.yml +0 -153
  194. maxapi_python-1.2.4/.gitignore +0 -123
  195. maxapi_python-1.2.4/.pre-commit-config.yaml +0 -41
  196. maxapi_python-1.2.4/PKG-INFO +0 -205
  197. maxapi_python-1.2.4/README.md +0 -174
  198. maxapi_python-1.2.4/assets/icon.svg +0 -13
  199. maxapi_python-1.2.4/assets/logo.svg +0 -13
  200. maxapi_python-1.2.4/examples/example.py +0 -74
  201. maxapi_python-1.2.4/examples/telegram_bridge.py +0 -194
  202. maxapi_python-1.2.4/pytest.ini +0 -26
  203. maxapi_python-1.2.4/redocs/Makefile +0 -20
  204. maxapi_python-1.2.4/redocs/build.sh +0 -1
  205. maxapi_python-1.2.4/redocs/make.bat +0 -35
  206. maxapi_python-1.2.4/redocs/source/_static/logo.svg +0 -13
  207. maxapi_python-1.2.4/redocs/source/clients.rst +0 -252
  208. maxapi_python-1.2.4/redocs/source/conf.py +0 -49
  209. maxapi_python-1.2.4/redocs/source/decorators.rst +0 -6
  210. maxapi_python-1.2.4/redocs/source/examples.rst +0 -369
  211. maxapi_python-1.2.4/redocs/source/guides.rst +0 -478
  212. maxapi_python-1.2.4/redocs/source/index.rst +0 -118
  213. maxapi_python-1.2.4/redocs/source/installation.rst +0 -151
  214. maxapi_python-1.2.4/redocs/source/quickstart.rst +0 -261
  215. maxapi_python-1.2.4/redocs/source/release_notes.rst +0 -143
  216. maxapi_python-1.2.4/redocs/source/types.rst +0 -8
  217. maxapi_python-1.2.4/ruff.toml +0 -76
  218. maxapi_python-1.2.4/src/pymax/__init__.py +0 -113
  219. maxapi_python-1.2.4/src/pymax/core.py +0 -390
  220. maxapi_python-1.2.4/src/pymax/crud.py +0 -96
  221. maxapi_python-1.2.4/src/pymax/exceptions.py +0 -108
  222. maxapi_python-1.2.4/src/pymax/files.py +0 -138
  223. maxapi_python-1.2.4/src/pymax/filters.py +0 -164
  224. maxapi_python-1.2.4/src/pymax/formatter.py +0 -31
  225. maxapi_python-1.2.4/src/pymax/formatting.py +0 -74
  226. maxapi_python-1.2.4/src/pymax/interfaces.py +0 -552
  227. maxapi_python-1.2.4/src/pymax/mixins/__init__.py +0 -40
  228. maxapi_python-1.2.4/src/pymax/mixins/auth.py +0 -368
  229. maxapi_python-1.2.4/src/pymax/mixins/channel.py +0 -130
  230. maxapi_python-1.2.4/src/pymax/mixins/group.py +0 -458
  231. maxapi_python-1.2.4/src/pymax/mixins/handler.py +0 -285
  232. maxapi_python-1.2.4/src/pymax/mixins/message.py +0 -879
  233. maxapi_python-1.2.4/src/pymax/mixins/scheduler.py +0 -28
  234. maxapi_python-1.2.4/src/pymax/mixins/self.py +0 -259
  235. maxapi_python-1.2.4/src/pymax/mixins/socket.py +0 -297
  236. maxapi_python-1.2.4/src/pymax/mixins/telemetry.py +0 -112
  237. maxapi_python-1.2.4/src/pymax/mixins/user.py +0 -219
  238. maxapi_python-1.2.4/src/pymax/mixins/websocket.py +0 -142
  239. maxapi_python-1.2.4/src/pymax/models.py +0 -8
  240. maxapi_python-1.2.4/src/pymax/navigation.py +0 -187
  241. maxapi_python-1.2.4/src/pymax/payloads.py +0 -367
  242. maxapi_python-1.2.4/src/pymax/protocols.py +0 -123
  243. maxapi_python-1.2.4/src/pymax/static/constant.py +0 -89
  244. maxapi_python-1.2.4/src/pymax/types.py +0 -1220
  245. maxapi_python-1.2.4/src/pymax/utils.py +0 -90
  246. {maxapi_python-1.2.4 → maxapi_python-2.0.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  247. {maxapi_python-1.2.4 → maxapi_python-2.0.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  248. {maxapi_python-1.2.4 → maxapi_python-2.0.0}/.github/ISSUE_TEMPLATE/refactor.md +0 -0
  249. {maxapi_python-1.2.4 → maxapi_python-2.0.0}/.github/pull_request_template.md +0 -0
  250. {maxapi_python-1.2.4 → maxapi_python-2.0.0}/LICENSE +0 -0
@@ -21,8 +21,10 @@ jobs:
21
21
  python-version: "3.10"
22
22
 
23
23
  - name: Build release distributions
24
- run: |
25
- uv build
24
+ run: uv build
25
+
26
+ - name: Check distributions
27
+ run: uvx twine check dist/*
26
28
 
27
29
  - name: Upload distributions
28
30
  uses: actions/upload-artifact@v4
@@ -32,8 +34,14 @@ jobs:
32
34
 
33
35
  pypi-publish:
34
36
  runs-on: ubuntu-latest
35
- needs:
36
- - release-build
37
+ needs: release-build
38
+ environment:
39
+ name: pypi
40
+ url: https://pypi.org/project/maxapi-python/
41
+
42
+ permissions:
43
+ contents: read
44
+ id-token: write
37
45
 
38
46
  steps:
39
47
  - name: Retrieve release distributions
@@ -42,13 +50,5 @@ jobs:
42
50
  name: release-dists
43
51
  path: dist/
44
52
 
45
- - name: Set up uv
46
- uses: astral-sh/setup-uv@v4
47
- with:
48
- python-version: "3.10"
49
-
50
53
  - name: Publish release distributions to PyPI
51
- env:
52
- TOKEN: ${{ secrets.PYPI_API_TOKEN }}
53
- run: |
54
- uv publish -t $TOKEN
54
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,44 @@
1
+ # Python-generated files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # Build artifacts
7
+ build/
8
+ dist/
9
+ wheels/
10
+ *.egg-info/
11
+
12
+ # Virtual environments
13
+ .venv/
14
+ venv/
15
+ env/
16
+
17
+ # Tool caches
18
+ .mypy_cache/
19
+ .pyright/
20
+ .pytest_cache/
21
+ .ruff_cache/
22
+ .coverage
23
+ coverage.xml
24
+ htmlcov/
25
+
26
+ # Sphinx
27
+ docs/_build/
28
+
29
+ # Local/runtime artifacts
30
+ .codex/
31
+ .agents/
32
+ cache/
33
+ cache*/
34
+ *.db
35
+ *.sqlite
36
+ *.sqlite3
37
+
38
+ # Local experiments
39
+ tests2/
40
+
41
+ # OS/editor
42
+ .DS_Store
43
+ .idea/
44
+ .vscode/
@@ -0,0 +1,217 @@
1
+ Metadata-Version: 2.4
2
+ Name: maxapi-python
3
+ Version: 2.0.0
4
+ Summary: Python wrapper для API мессенджера Max
5
+ Project-URL: Homepage, https://github.com/MaxApiTeam/PyMax
6
+ Project-URL: Repository, https://github.com/MaxApiTeam/PyMax
7
+ Project-URL: Issues, https://github.com/MaxApiTeam/PyMax/issues
8
+ Project-URL: Documentation, https://maxapiteam.github.io/PyMax/
9
+ Author-email: ink <inkdev@proton.me>
10
+ License-Expression: MIT
11
+ License-File: LICENSE
12
+ Keywords: api,asyncio,max,messenger,tcp,websocket,wrapper
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Framework :: AsyncIO
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: License :: OSI Approved :: MIT License
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3.10
20
+ Classifier: Programming Language :: Python :: 3.11
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Programming Language :: Python :: 3.13
23
+ Classifier: Typing :: Typed
24
+ Requires-Python: >=3.10
25
+ Requires-Dist: aiofiles>=25.1.0
26
+ Requires-Dist: aiohttp>=3.13.5
27
+ Requires-Dist: aiosqlite>=0.22.1
28
+ Requires-Dist: msgpack>=1.1.2
29
+ Requires-Dist: pydantic>=2.10.0
30
+ Requires-Dist: python-socks[asyncio]>=2.8.1
31
+ Requires-Dist: qrcode>=8.2
32
+ Requires-Dist: websockets>=16.0
33
+ Provides-Extra: docs
34
+ Requires-Dist: furo>=2025.12.19; extra == 'docs'
35
+ Requires-Dist: sphinx-copybutton>=0.5.2; extra == 'docs'
36
+ Requires-Dist: sphinx>=8.1.3; extra == 'docs'
37
+ Provides-Extra: test
38
+ Requires-Dist: pytest-asyncio>=0.24.0; extra == 'test'
39
+ Requires-Dist: pytest-cov>=5.0.0; extra == 'test'
40
+ Requires-Dist: pytest-timeout>=2.1.0; extra == 'test'
41
+ Requires-Dist: pytest>=8.0.0; extra == 'test'
42
+ Description-Content-Type: text/markdown
43
+
44
+ # PyMax
45
+
46
+ Python-библиотека для Max API.
47
+
48
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://www.python.org/)
49
+ [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
50
+ [![Package](https://img.shields.io/badge/package-maxapi--python-orange.svg)](https://pypi.org/project/maxapi-python/)
51
+
52
+ > [!WARNING]
53
+ > PyMax использует неофициальный внутренний API Max. API может измениться без
54
+ > предупреждения, а использование библиотеки может нарушать условия сервиса.
55
+ > Вы используете PyMax на свой риск; авторы и контрибьюторы не несут
56
+ > ответственности за блокировки аккаунтов, потерю данных или другие последствия.
57
+
58
+ ## Что это
59
+
60
+ **PyMax** - асинхронная Python-библиотека для внутреннего API Max. Она умеет
61
+ авторизоваться в аккаунте, слушать события, отправлять сообщения, работать с
62
+ чатами, пользователями, файлами, сессиями и доменными типами Max через TCP или
63
+ WebSocket.
64
+
65
+ ## Возможности
66
+
67
+ - Авторизация по телефону и SMS-коду через `Client`.
68
+ - QR-авторизация web-клиента через `WebClient`.
69
+ - Роутеры, фильтры, `on_start`, raw-события и typed events.
70
+ - Сообщения: отправка, ответы, reply, реакции, pin, read, delete и история.
71
+ - Чаты, группы, участники, invite-ссылки и настройки групп.
72
+ - Пользователи, контакты, профиль, папки, активные сессии и 2FA.
73
+ - Вложения: `Photo`, `File`, `Video`.
74
+ - SQLite-сессии, sync-state, reconnect и debug-логи.
75
+ - Pydantic-модели и удобные domain-объекты.
76
+
77
+ ## Установка
78
+
79
+ Требуется Python 3.10 или новее.
80
+
81
+ ```bash
82
+ pip install -U maxapi-python
83
+ ```
84
+
85
+ Через `uv`:
86
+
87
+ ```bash
88
+ uv add -U maxapi-python
89
+ ```
90
+
91
+ Напрямую из репозитория:
92
+
93
+ ```bash
94
+ pip install git+https://github.com/MaxApiTeam/PyMax.git
95
+ ```
96
+
97
+ ## Быстрый старт
98
+
99
+ `Client` использует TCP-соединение. При первом запуске PyMax попросит SMS-код
100
+ и сохранит сессию в SQLite-файл; дальше этот файл используется автоматически.
101
+
102
+ ```python
103
+ import asyncio
104
+
105
+ from pymax import Client, Message
106
+
107
+ client = Client(
108
+ phone="+79990000000",
109
+ work_dir="cache",
110
+ session_name="main.db",
111
+ )
112
+
113
+
114
+ @client.on_start()
115
+ async def on_start(client: Client) -> None:
116
+ print("Клиент запущен")
117
+ print("Ваш ID:", client.me.contact.id if client.me else "unknown")
118
+
119
+
120
+ @client.on_message()
121
+ async def on_message(message: Message, client: Client) -> None:
122
+ print(message.chat_id, message.sender, message.text)
123
+
124
+ if message.chat_id is not None and message.text:
125
+ await message.answer("Привет от PyMax")
126
+
127
+
128
+ async def main() -> None:
129
+ await client.start()
130
+
131
+
132
+ if __name__ == "__main__":
133
+ asyncio.run(main())
134
+ ```
135
+
136
+ ## WebClient
137
+
138
+ `WebClient` использует WebSocket и QR-авторизацию:
139
+
140
+ ```python
141
+ import asyncio
142
+
143
+ from pymax import WebClient
144
+
145
+ client = WebClient(work_dir="cache", session_name="web.db")
146
+
147
+
148
+ @client.on_start()
149
+ async def on_start(client: WebClient) -> None:
150
+ print("Web-клиент запущен")
151
+
152
+
153
+ asyncio.run(client.start())
154
+ ```
155
+
156
+ ## Роутеры
157
+
158
+ Обработчики можно регистрировать на клиенте или вынести в отдельный роутер.
159
+ Handler всегда принимает событие и клиента: `(event, client)`.
160
+
161
+ ```python
162
+ from pymax import Client, ClientRouter, Message
163
+
164
+ router = ClientRouter()
165
+
166
+
167
+ def is_start(message: Message) -> bool:
168
+ return message.text == "/start"
169
+
170
+
171
+ @router.on_message(is_start)
172
+ async def start(message: Message, client: Client) -> None:
173
+ await message.answer("Готово")
174
+
175
+
176
+ client = Client(phone="+79990000000", work_dir="cache")
177
+ client.include_router(router)
178
+ ```
179
+
180
+ ## Куда дальше
181
+
182
+ - [Getting Started](docs/getting-started.rst) - первый запуск и сессии.
183
+ - [Client](docs/client.rst) - жизненный цикл клиента, reconnect и sync-state.
184
+ - [Router](docs/router.rst) - роутеры, фильтры и raw events.
185
+ - [Messages](docs/messages.rst) - сообщения, реакции, история и вложения.
186
+ - [Files](docs/files.rst) - отправка и скачивание файлов.
187
+ - [FAQ](docs/faq.rst) и [Troubleshooting](docs/troubleshooting.rst) - частые
188
+ проблемы.
189
+
190
+ Опубликованная документация:
191
+
192
+ - [docs.pymax.org](https://docs.pymax.org/)
193
+ - [DeepWiki](https://deepwiki.com/MaxApiTeam/PyMax)
194
+
195
+ ## Разработка
196
+
197
+ ```bash
198
+ uv sync --all-groups
199
+ uv run python -c "import pymax; print(pymax.__all__)"
200
+ uv run sphinx-build -b html docs docs/_build/html
201
+ ```
202
+
203
+ ## Ссылки
204
+
205
+ - [GitHub](https://github.com/MaxApiTeam/PyMax)
206
+ - [PyPI](https://pypi.org/project/maxapi-python/)
207
+ - [Telegram](https://t.me/pymax_news)
208
+
209
+ ## Лицензия
210
+
211
+ Проект распространяется под лицензией MIT. Подробности см. в [LICENSE](LICENSE).
212
+
213
+ ## Авторы
214
+
215
+ - [ink](https://github.com/ink-developer) - основной разработчик, исследование
216
+ API и документация.
217
+ - [noxzion](https://github.com/noxzion) - оригинальный автор проекта.
@@ -0,0 +1,174 @@
1
+ # PyMax
2
+
3
+ Python-библиотека для Max API.
4
+
5
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://www.python.org/)
6
+ [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
7
+ [![Package](https://img.shields.io/badge/package-maxapi--python-orange.svg)](https://pypi.org/project/maxapi-python/)
8
+
9
+ > [!WARNING]
10
+ > PyMax использует неофициальный внутренний API Max. API может измениться без
11
+ > предупреждения, а использование библиотеки может нарушать условия сервиса.
12
+ > Вы используете PyMax на свой риск; авторы и контрибьюторы не несут
13
+ > ответственности за блокировки аккаунтов, потерю данных или другие последствия.
14
+
15
+ ## Что это
16
+
17
+ **PyMax** - асинхронная Python-библиотека для внутреннего API Max. Она умеет
18
+ авторизоваться в аккаунте, слушать события, отправлять сообщения, работать с
19
+ чатами, пользователями, файлами, сессиями и доменными типами Max через TCP или
20
+ WebSocket.
21
+
22
+ ## Возможности
23
+
24
+ - Авторизация по телефону и SMS-коду через `Client`.
25
+ - QR-авторизация web-клиента через `WebClient`.
26
+ - Роутеры, фильтры, `on_start`, raw-события и typed events.
27
+ - Сообщения: отправка, ответы, reply, реакции, pin, read, delete и история.
28
+ - Чаты, группы, участники, invite-ссылки и настройки групп.
29
+ - Пользователи, контакты, профиль, папки, активные сессии и 2FA.
30
+ - Вложения: `Photo`, `File`, `Video`.
31
+ - SQLite-сессии, sync-state, reconnect и debug-логи.
32
+ - Pydantic-модели и удобные domain-объекты.
33
+
34
+ ## Установка
35
+
36
+ Требуется Python 3.10 или новее.
37
+
38
+ ```bash
39
+ pip install -U maxapi-python
40
+ ```
41
+
42
+ Через `uv`:
43
+
44
+ ```bash
45
+ uv add -U maxapi-python
46
+ ```
47
+
48
+ Напрямую из репозитория:
49
+
50
+ ```bash
51
+ pip install git+https://github.com/MaxApiTeam/PyMax.git
52
+ ```
53
+
54
+ ## Быстрый старт
55
+
56
+ `Client` использует TCP-соединение. При первом запуске PyMax попросит SMS-код
57
+ и сохранит сессию в SQLite-файл; дальше этот файл используется автоматически.
58
+
59
+ ```python
60
+ import asyncio
61
+
62
+ from pymax import Client, Message
63
+
64
+ client = Client(
65
+ phone="+79990000000",
66
+ work_dir="cache",
67
+ session_name="main.db",
68
+ )
69
+
70
+
71
+ @client.on_start()
72
+ async def on_start(client: Client) -> None:
73
+ print("Клиент запущен")
74
+ print("Ваш ID:", client.me.contact.id if client.me else "unknown")
75
+
76
+
77
+ @client.on_message()
78
+ async def on_message(message: Message, client: Client) -> None:
79
+ print(message.chat_id, message.sender, message.text)
80
+
81
+ if message.chat_id is not None and message.text:
82
+ await message.answer("Привет от PyMax")
83
+
84
+
85
+ async def main() -> None:
86
+ await client.start()
87
+
88
+
89
+ if __name__ == "__main__":
90
+ asyncio.run(main())
91
+ ```
92
+
93
+ ## WebClient
94
+
95
+ `WebClient` использует WebSocket и QR-авторизацию:
96
+
97
+ ```python
98
+ import asyncio
99
+
100
+ from pymax import WebClient
101
+
102
+ client = WebClient(work_dir="cache", session_name="web.db")
103
+
104
+
105
+ @client.on_start()
106
+ async def on_start(client: WebClient) -> None:
107
+ print("Web-клиент запущен")
108
+
109
+
110
+ asyncio.run(client.start())
111
+ ```
112
+
113
+ ## Роутеры
114
+
115
+ Обработчики можно регистрировать на клиенте или вынести в отдельный роутер.
116
+ Handler всегда принимает событие и клиента: `(event, client)`.
117
+
118
+ ```python
119
+ from pymax import Client, ClientRouter, Message
120
+
121
+ router = ClientRouter()
122
+
123
+
124
+ def is_start(message: Message) -> bool:
125
+ return message.text == "/start"
126
+
127
+
128
+ @router.on_message(is_start)
129
+ async def start(message: Message, client: Client) -> None:
130
+ await message.answer("Готово")
131
+
132
+
133
+ client = Client(phone="+79990000000", work_dir="cache")
134
+ client.include_router(router)
135
+ ```
136
+
137
+ ## Куда дальше
138
+
139
+ - [Getting Started](docs/getting-started.rst) - первый запуск и сессии.
140
+ - [Client](docs/client.rst) - жизненный цикл клиента, reconnect и sync-state.
141
+ - [Router](docs/router.rst) - роутеры, фильтры и raw events.
142
+ - [Messages](docs/messages.rst) - сообщения, реакции, история и вложения.
143
+ - [Files](docs/files.rst) - отправка и скачивание файлов.
144
+ - [FAQ](docs/faq.rst) и [Troubleshooting](docs/troubleshooting.rst) - частые
145
+ проблемы.
146
+
147
+ Опубликованная документация:
148
+
149
+ - [docs.pymax.org](https://docs.pymax.org/)
150
+ - [DeepWiki](https://deepwiki.com/MaxApiTeam/PyMax)
151
+
152
+ ## Разработка
153
+
154
+ ```bash
155
+ uv sync --all-groups
156
+ uv run python -c "import pymax; print(pymax.__all__)"
157
+ uv run sphinx-build -b html docs docs/_build/html
158
+ ```
159
+
160
+ ## Ссылки
161
+
162
+ - [GitHub](https://github.com/MaxApiTeam/PyMax)
163
+ - [PyPI](https://pypi.org/project/maxapi-python/)
164
+ - [Telegram](https://t.me/pymax_news)
165
+
166
+ ## Лицензия
167
+
168
+ Проект распространяется под лицензией MIT. Подробности см. в [LICENSE](LICENSE).
169
+
170
+ ## Авторы
171
+
172
+ - [ink](https://github.com/ink-developer) - основной разработчик, исследование
173
+ API и документация.
174
+ - [noxzion](https://github.com/noxzion) - оригинальный автор проекта.
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,127 @@
1
+ Account
2
+ =======
3
+
4
+ Что это
5
+ -------
6
+
7
+ Методы аккаунта работают с профилем текущего пользователя, папками чатов,
8
+ активными сессиями и выходом из аккаунта. Они доступны напрямую на клиенте.
9
+
10
+ Профиль
11
+ -------
12
+
13
+ После успешного login профиль текущего аккаунта лежит в ``client.me``:
14
+
15
+ .. code-block:: python
16
+
17
+ @client.on_start()
18
+ async def on_start(client: Client) -> None:
19
+ if client.me is not None:
20
+ print(client.me.contact.id)
21
+
22
+ Обновить имя, фамилию и описание:
23
+
24
+ .. code-block:: python
25
+
26
+ await client.change_profile(
27
+ first_name="Alex",
28
+ last_name="PyMax",
29
+ description="Testing Max API",
30
+ )
31
+
32
+ Фотография профиля
33
+ ------------------
34
+
35
+ Сейчас ``change_profile(photo=...)`` не загружает файл напрямую. Для фото
36
+ нужен ``photo_token`` от API Max:
37
+
38
+ .. code-block:: python
39
+
40
+ upload_url = await client.request_profile_photo_upload_url()
41
+ print(upload_url)
42
+
43
+ await client.change_profile(
44
+ first_name="Alex",
45
+ photo_token="PHOTO_TOKEN",
46
+ )
47
+
48
+ Если передать ``photo`` вместо ``photo_token``, PyMax выбросит
49
+ ``NotImplementedError``.
50
+
51
+ Папки чатов
52
+ -----------
53
+
54
+ Создать папку:
55
+
56
+ .. code-block:: python
57
+
58
+ update = await client.create_folder(
59
+ title="Работа",
60
+ chat_include=[123456, 234567],
61
+ )
62
+
63
+ Получить список папок:
64
+
65
+ .. code-block:: python
66
+
67
+ folders = await client.get_folders()
68
+ for folder in folders:
69
+ print(folder.id, folder.title)
70
+
71
+ Обновить и удалить папку:
72
+
73
+ .. code-block:: python
74
+
75
+ await client.update_folder(
76
+ folder_id="folder-id",
77
+ title="Новый заголовок",
78
+ chat_include=[123456],
79
+ )
80
+
81
+ await client.delete_folder("folder-id")
82
+
83
+ ``FolderList`` можно итерировать напрямую: он перебирает ``folders`` внутри
84
+ ответа.
85
+
86
+ Сессии и выход
87
+ --------------
88
+
89
+ Получить активные сессии:
90
+
91
+ .. code-block:: python
92
+
93
+ sessions = await client.get_sessions()
94
+ for session in sessions:
95
+ print(session.id, session.device_name, session.current)
96
+
97
+ Закрыть остальные сессии аккаунта:
98
+
99
+ .. code-block:: python
100
+
101
+ await client.close_all_sessions()
102
+
103
+ Выйти из текущей сессии Max:
104
+
105
+ .. code-block:: python
106
+
107
+ await client.logout()
108
+ await client.close()
109
+
110
+ ``logout()`` завершает серверную сессию. ``close()`` закрывает локальное
111
+ соединение, фоновые задачи и файл сессии.
112
+
113
+ Частые ошибки
114
+ -------------
115
+
116
+ ``client.me`` равен ``None``
117
+ Login еще не завершился или клиент не запущен. Читайте профиль внутри
118
+ ``on_start`` или после успешного ``await client.start()`` в собственном
119
+ lifecycle.
120
+
121
+ ``NotImplementedError`` при ``change_profile(photo=...)``
122
+ Прямая загрузка фото через параметр ``photo`` пока не реализована.
123
+ Используйте ``photo_token``.
124
+
125
+ Папка создалась, но список старый
126
+ Используйте ``get_folders()`` после изменения и сохраняйте новый
127
+ ``folder_sync``, если строите собственную синхронизацию папок.
@@ -0,0 +1,35 @@
1
+ Auth API
2
+ ========
3
+
4
+ .. autoclass:: pymax.AuthFlow
5
+ :members:
6
+
7
+ .. autoclass:: pymax.SmsAuthFlow
8
+ :members:
9
+
10
+ .. autoclass:: pymax.QrAuthFlow
11
+ :members:
12
+
13
+ .. autoclass:: pymax.SmsCodeProvider
14
+ :members:
15
+
16
+ .. autoclass:: pymax.PasswordProvider
17
+ :members:
18
+
19
+ .. autoclass:: pymax.auth.EmailCodeProvider
20
+ :members:
21
+
22
+ .. autoclass:: pymax.QrHandler
23
+ :members:
24
+
25
+ .. autoclass:: pymax.ConsoleSmsCodeProvider
26
+ :members:
27
+
28
+ .. autoclass:: pymax.ConsolePasswordProvider
29
+ :members:
30
+
31
+ .. autoclass:: pymax.auth.providers.ConsoleEmailCodeProvider
32
+ :members:
33
+
34
+ .. autoclass:: pymax.ConsoleQrHandler
35
+ :members:
@@ -0,0 +1,17 @@
1
+ Client API
2
+ ==========
3
+
4
+ .. currentmodule:: pymax
5
+
6
+ .. autoclass:: Client
7
+ :members:
8
+ :inherited-members:
9
+
10
+ .. autoclass:: WebClient
11
+ :members:
12
+ :inherited-members:
13
+
14
+ .. autoclass:: ExtraConfig
15
+ :members:
16
+
17
+ .. autofunction:: configure_logging
@@ -0,0 +1,14 @@
1
+ Files API
2
+ =========
3
+
4
+ .. autoclass:: pymax.File
5
+ :members:
6
+ :show-inheritance:
7
+
8
+ .. autoclass:: pymax.Photo
9
+ :members:
10
+ :show-inheritance:
11
+
12
+ .. autoclass:: pymax.Video
13
+ :members:
14
+ :show-inheritance:
@@ -0,0 +1,10 @@
1
+ Router API
2
+ ==========
3
+
4
+ .. autoclass:: pymax.Router
5
+ :members:
6
+ :show-inheritance:
7
+
8
+ .. autodata:: pymax.ClientRouter
9
+
10
+ .. autodata:: pymax.WebRouter