telegrinder 1.0.0rc1__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 (215) hide show
  1. telegrinder/__init__.py +258 -0
  2. telegrinder/__meta__.py +1 -0
  3. telegrinder/api/__init__.py +15 -0
  4. telegrinder/api/api.py +175 -0
  5. telegrinder/api/error.py +50 -0
  6. telegrinder/api/response.py +23 -0
  7. telegrinder/api/token.py +30 -0
  8. telegrinder/api/validators.py +30 -0
  9. telegrinder/bot/__init__.py +144 -0
  10. telegrinder/bot/bot.py +70 -0
  11. telegrinder/bot/cute_types/__init__.py +41 -0
  12. telegrinder/bot/cute_types/base.py +228 -0
  13. telegrinder/bot/cute_types/base.pyi +49 -0
  14. telegrinder/bot/cute_types/business_connection.py +9 -0
  15. telegrinder/bot/cute_types/business_messages_deleted.py +9 -0
  16. telegrinder/bot/cute_types/callback_query.py +248 -0
  17. telegrinder/bot/cute_types/chat_boost_removed.py +9 -0
  18. telegrinder/bot/cute_types/chat_boost_updated.py +9 -0
  19. telegrinder/bot/cute_types/chat_join_request.py +59 -0
  20. telegrinder/bot/cute_types/chat_member_updated.py +158 -0
  21. telegrinder/bot/cute_types/chosen_inline_result.py +11 -0
  22. telegrinder/bot/cute_types/inline_query.py +41 -0
  23. telegrinder/bot/cute_types/message.py +2809 -0
  24. telegrinder/bot/cute_types/message_reaction_count_updated.py +9 -0
  25. telegrinder/bot/cute_types/message_reaction_updated.py +9 -0
  26. telegrinder/bot/cute_types/paid_media_purchased.py +11 -0
  27. telegrinder/bot/cute_types/poll.py +9 -0
  28. telegrinder/bot/cute_types/poll_answer.py +9 -0
  29. telegrinder/bot/cute_types/pre_checkout_query.py +36 -0
  30. telegrinder/bot/cute_types/shipping_query.py +11 -0
  31. telegrinder/bot/cute_types/update.py +209 -0
  32. telegrinder/bot/cute_types/utils.py +141 -0
  33. telegrinder/bot/dispatch/__init__.py +99 -0
  34. telegrinder/bot/dispatch/abc.py +74 -0
  35. telegrinder/bot/dispatch/action.py +99 -0
  36. telegrinder/bot/dispatch/context.py +162 -0
  37. telegrinder/bot/dispatch/dispatch.py +362 -0
  38. telegrinder/bot/dispatch/handler/__init__.py +23 -0
  39. telegrinder/bot/dispatch/handler/abc.py +25 -0
  40. telegrinder/bot/dispatch/handler/audio_reply.py +43 -0
  41. telegrinder/bot/dispatch/handler/base.py +34 -0
  42. telegrinder/bot/dispatch/handler/document_reply.py +43 -0
  43. telegrinder/bot/dispatch/handler/func.py +73 -0
  44. telegrinder/bot/dispatch/handler/media_group_reply.py +43 -0
  45. telegrinder/bot/dispatch/handler/message_reply.py +35 -0
  46. telegrinder/bot/dispatch/handler/photo_reply.py +43 -0
  47. telegrinder/bot/dispatch/handler/sticker_reply.py +36 -0
  48. telegrinder/bot/dispatch/handler/video_reply.py +43 -0
  49. telegrinder/bot/dispatch/middleware/__init__.py +13 -0
  50. telegrinder/bot/dispatch/middleware/abc.py +112 -0
  51. telegrinder/bot/dispatch/middleware/box.py +32 -0
  52. telegrinder/bot/dispatch/middleware/filter.py +88 -0
  53. telegrinder/bot/dispatch/middleware/media_group.py +69 -0
  54. telegrinder/bot/dispatch/process.py +93 -0
  55. telegrinder/bot/dispatch/return_manager/__init__.py +21 -0
  56. telegrinder/bot/dispatch/return_manager/abc.py +107 -0
  57. telegrinder/bot/dispatch/return_manager/callback_query.py +19 -0
  58. telegrinder/bot/dispatch/return_manager/inline_query.py +14 -0
  59. telegrinder/bot/dispatch/return_manager/message.py +34 -0
  60. telegrinder/bot/dispatch/return_manager/pre_checkout_query.py +19 -0
  61. telegrinder/bot/dispatch/return_manager/utils.py +20 -0
  62. telegrinder/bot/dispatch/router/__init__.py +4 -0
  63. telegrinder/bot/dispatch/router/abc.py +15 -0
  64. telegrinder/bot/dispatch/router/base.py +154 -0
  65. telegrinder/bot/dispatch/view/__init__.py +15 -0
  66. telegrinder/bot/dispatch/view/abc.py +15 -0
  67. telegrinder/bot/dispatch/view/base.py +226 -0
  68. telegrinder/bot/dispatch/view/box.py +207 -0
  69. telegrinder/bot/dispatch/view/media_group.py +25 -0
  70. telegrinder/bot/dispatch/waiter_machine/__init__.py +25 -0
  71. telegrinder/bot/dispatch/waiter_machine/actions.py +16 -0
  72. telegrinder/bot/dispatch/waiter_machine/hasher/__init__.py +13 -0
  73. telegrinder/bot/dispatch/waiter_machine/hasher/callback.py +53 -0
  74. telegrinder/bot/dispatch/waiter_machine/hasher/hasher.py +61 -0
  75. telegrinder/bot/dispatch/waiter_machine/hasher/message.py +49 -0
  76. telegrinder/bot/dispatch/waiter_machine/machine.py +264 -0
  77. telegrinder/bot/dispatch/waiter_machine/middleware.py +77 -0
  78. telegrinder/bot/dispatch/waiter_machine/short_state.py +105 -0
  79. telegrinder/bot/polling/__init__.py +4 -0
  80. telegrinder/bot/polling/abc.py +25 -0
  81. telegrinder/bot/polling/error_handler.py +93 -0
  82. telegrinder/bot/polling/polling.py +167 -0
  83. telegrinder/bot/polling/utils.py +12 -0
  84. telegrinder/bot/rules/__init__.py +166 -0
  85. telegrinder/bot/rules/abc.py +150 -0
  86. telegrinder/bot/rules/button.py +20 -0
  87. telegrinder/bot/rules/callback_data.py +109 -0
  88. telegrinder/bot/rules/chat_join.py +28 -0
  89. telegrinder/bot/rules/chat_member_updated.py +145 -0
  90. telegrinder/bot/rules/command.py +137 -0
  91. telegrinder/bot/rules/enum_text.py +29 -0
  92. telegrinder/bot/rules/func.py +21 -0
  93. telegrinder/bot/rules/fuzzy.py +21 -0
  94. telegrinder/bot/rules/inline.py +45 -0
  95. telegrinder/bot/rules/integer.py +19 -0
  96. telegrinder/bot/rules/is_from.py +213 -0
  97. telegrinder/bot/rules/logic.py +22 -0
  98. telegrinder/bot/rules/magic.py +60 -0
  99. telegrinder/bot/rules/markup.py +51 -0
  100. telegrinder/bot/rules/media.py +13 -0
  101. telegrinder/bot/rules/mention.py +15 -0
  102. telegrinder/bot/rules/message_entities.py +37 -0
  103. telegrinder/bot/rules/node.py +43 -0
  104. telegrinder/bot/rules/payload.py +89 -0
  105. telegrinder/bot/rules/payment_invoice.py +14 -0
  106. telegrinder/bot/rules/regex.py +34 -0
  107. telegrinder/bot/rules/rule_enum.py +71 -0
  108. telegrinder/bot/rules/start.py +73 -0
  109. telegrinder/bot/rules/state.py +35 -0
  110. telegrinder/bot/rules/text.py +27 -0
  111. telegrinder/bot/rules/update.py +14 -0
  112. telegrinder/bot/scenario/__init__.py +5 -0
  113. telegrinder/bot/scenario/abc.py +16 -0
  114. telegrinder/bot/scenario/checkbox.py +183 -0
  115. telegrinder/bot/scenario/choice.py +44 -0
  116. telegrinder/client/__init__.py +11 -0
  117. telegrinder/client/abc.py +136 -0
  118. telegrinder/client/form_data.py +34 -0
  119. telegrinder/client/rnet.py +198 -0
  120. telegrinder/model.py +133 -0
  121. telegrinder/model.pyi +57 -0
  122. telegrinder/modules.py +1081 -0
  123. telegrinder/msgspec_utils/__init__.py +42 -0
  124. telegrinder/msgspec_utils/abc.py +16 -0
  125. telegrinder/msgspec_utils/custom_types/__init__.py +6 -0
  126. telegrinder/msgspec_utils/custom_types/datetime.py +24 -0
  127. telegrinder/msgspec_utils/custom_types/enum_meta.py +61 -0
  128. telegrinder/msgspec_utils/custom_types/literal.py +25 -0
  129. telegrinder/msgspec_utils/custom_types/option.py +17 -0
  130. telegrinder/msgspec_utils/decoder.py +388 -0
  131. telegrinder/msgspec_utils/encoder.py +204 -0
  132. telegrinder/msgspec_utils/json.py +15 -0
  133. telegrinder/msgspec_utils/tools.py +80 -0
  134. telegrinder/node/__init__.py +80 -0
  135. telegrinder/node/compose.py +193 -0
  136. telegrinder/node/nodes/__init__.py +96 -0
  137. telegrinder/node/nodes/attachment.py +169 -0
  138. telegrinder/node/nodes/callback_query.py +25 -0
  139. telegrinder/node/nodes/channel.py +97 -0
  140. telegrinder/node/nodes/command.py +33 -0
  141. telegrinder/node/nodes/error.py +43 -0
  142. telegrinder/node/nodes/event.py +70 -0
  143. telegrinder/node/nodes/file.py +39 -0
  144. telegrinder/node/nodes/global_node.py +66 -0
  145. telegrinder/node/nodes/i18n.py +110 -0
  146. telegrinder/node/nodes/me.py +26 -0
  147. telegrinder/node/nodes/message_entities.py +15 -0
  148. telegrinder/node/nodes/payload.py +84 -0
  149. telegrinder/node/nodes/reply_message.py +14 -0
  150. telegrinder/node/nodes/source.py +172 -0
  151. telegrinder/node/nodes/state_mutator.py +71 -0
  152. telegrinder/node/nodes/text.py +62 -0
  153. telegrinder/node/scope.py +88 -0
  154. telegrinder/node/utils.py +38 -0
  155. telegrinder/py.typed +0 -0
  156. telegrinder/rules.py +1 -0
  157. telegrinder/tools/__init__.py +183 -0
  158. telegrinder/tools/aio.py +147 -0
  159. telegrinder/tools/final.py +21 -0
  160. telegrinder/tools/formatting/__init__.py +85 -0
  161. telegrinder/tools/formatting/deep_links/__init__.py +39 -0
  162. telegrinder/tools/formatting/deep_links/links.py +468 -0
  163. telegrinder/tools/formatting/deep_links/parsing.py +88 -0
  164. telegrinder/tools/formatting/deep_links/validators.py +8 -0
  165. telegrinder/tools/formatting/html.py +241 -0
  166. telegrinder/tools/fullname.py +82 -0
  167. telegrinder/tools/global_context/__init__.py +13 -0
  168. telegrinder/tools/global_context/abc.py +63 -0
  169. telegrinder/tools/global_context/builtin_context.py +45 -0
  170. telegrinder/tools/global_context/global_context.py +614 -0
  171. telegrinder/tools/input_file_directory.py +30 -0
  172. telegrinder/tools/keyboard/__init__.py +6 -0
  173. telegrinder/tools/keyboard/abc.py +84 -0
  174. telegrinder/tools/keyboard/base.py +108 -0
  175. telegrinder/tools/keyboard/button.py +181 -0
  176. telegrinder/tools/keyboard/data.py +31 -0
  177. telegrinder/tools/keyboard/keyboard.py +160 -0
  178. telegrinder/tools/keyboard/utils.py +95 -0
  179. telegrinder/tools/lifespan.py +188 -0
  180. telegrinder/tools/limited_dict.py +35 -0
  181. telegrinder/tools/loop_wrapper.py +271 -0
  182. telegrinder/tools/magic/__init__.py +29 -0
  183. telegrinder/tools/magic/annotations.py +172 -0
  184. telegrinder/tools/magic/descriptors.py +57 -0
  185. telegrinder/tools/magic/function.py +254 -0
  186. telegrinder/tools/magic/inspect.py +16 -0
  187. telegrinder/tools/magic/shortcut.py +107 -0
  188. telegrinder/tools/member_descriptor_proxy.py +95 -0
  189. telegrinder/tools/parse_mode.py +12 -0
  190. telegrinder/tools/serialization/__init__.py +5 -0
  191. telegrinder/tools/serialization/abc.py +34 -0
  192. telegrinder/tools/serialization/json_ser.py +60 -0
  193. telegrinder/tools/serialization/msgpack_ser.py +197 -0
  194. telegrinder/tools/serialization/utils.py +18 -0
  195. telegrinder/tools/singleton/__init__.py +4 -0
  196. telegrinder/tools/singleton/abc.py +14 -0
  197. telegrinder/tools/singleton/singleton.py +18 -0
  198. telegrinder/tools/state_mutator/__init__.py +4 -0
  199. telegrinder/tools/state_mutator/mutation.py +85 -0
  200. telegrinder/tools/state_storage/__init__.py +4 -0
  201. telegrinder/tools/state_storage/abc.py +38 -0
  202. telegrinder/tools/state_storage/memory.py +27 -0
  203. telegrinder/tools/strings.py +22 -0
  204. telegrinder/types/__init__.py +323 -0
  205. telegrinder/types/enums.py +754 -0
  206. telegrinder/types/input_file.py +51 -0
  207. telegrinder/types/methods.py +6143 -0
  208. telegrinder/types/methods_utils.py +66 -0
  209. telegrinder/types/objects.py +8184 -0
  210. telegrinder/types/webapp.py +129 -0
  211. telegrinder/verification_utils.py +35 -0
  212. telegrinder-1.0.0rc1.dist-info/METADATA +166 -0
  213. telegrinder-1.0.0rc1.dist-info/RECORD +215 -0
  214. telegrinder-1.0.0rc1.dist-info/WHEEL +4 -0
  215. telegrinder-1.0.0rc1.dist-info/licenses/LICENSE +22 -0
@@ -0,0 +1,129 @@
1
+ from telegrinder.model import From, Model, field
2
+ from telegrinder.msgspec_utils.custom_types import Literal, Option, datetime
3
+
4
+ type ChatType = Literal["sender", "private", "group", "supergroup", "channel"]
5
+
6
+
7
+ class WebAppChat(Model):
8
+ """Object `WebAppChat`, see the [documentation](https://core.telegram.org/bots/webapps#webappchat).
9
+
10
+ This object contains the data of the Mini App chat.
11
+ """
12
+
13
+ id: int = field()
14
+ """Unique identifier for this chat. This number may have more than 32
15
+ significant bits and some programming languages may have
16
+ difficulty/silent defects in interpreting it. But it has at most 52
17
+ significant bits, so a signed 64-bit integer or double-precision float
18
+ type are safe for storing this identifier."""
19
+
20
+ type: Literal["group", "supergroup", "channel"] = field()
21
+ """Type of chat, can be either `group`, `supergroup` or `channel`."""
22
+
23
+ title: str = field()
24
+ """Title of the chat."""
25
+
26
+ username: Option[str] = field(default=..., converter=From[str | None])
27
+ """Optional. Username of the chat."""
28
+
29
+ photo_url: Option[str] = field(default=..., converter=From[str | None])
30
+ """Optional. URL of the chat’s photo. The photo can be in .jpeg or .svg formats.
31
+ Only returned for Web Apps launched from the attachment menu."""
32
+
33
+
34
+ class WebAppUser(Model):
35
+ """Object `WebAppUser`, see the [documentation](https://core.telegram.org/bots/webapps#webappuser).
36
+
37
+ This object contains the data of the Mini App user.
38
+ """
39
+
40
+ id: int = field()
41
+ """A unique identifier for the user or bot. This number may have more than 32
42
+ significant bits and some programming languages may have difficulty/silent
43
+ defects in interpreting it. It has at most 52 significant bits, so a 64-bit
44
+ integer or a double-precision float type is safe for storing this identifier."""
45
+
46
+ first_name: str = field()
47
+ """First name of the user or bot."""
48
+
49
+ is_bot: Option[bool] = field(default=..., converter=From[bool | None])
50
+ """Optional. True, if this user is a bot. Returns in the receiver field only."""
51
+
52
+ last_name: Option[str] = field(default=..., converter=From[str | None])
53
+ """Optional. Last name of the user or bot."""
54
+
55
+ username: Option[str] = field(default=..., converter=From[str | None])
56
+ """Optional. Username of the user or bot."""
57
+
58
+ language_code: Option[str] = field(default=..., converter=From[str | None])
59
+ """Optional. IETF language tag of the user's language. Returns in user field only."""
60
+
61
+ is_premium: Option[bool] = field(default=..., converter=From[bool | None])
62
+ """Optional. True, if this user is a Telegram Premium user."""
63
+
64
+ added_to_attachment_menu: Option[bool] = field(default=..., converter=From[bool | None])
65
+ """Optional. True, if this user added the bot to the attachment menu."""
66
+
67
+ allows_write_to_pm: Option[bool] = field(default=..., converter=From[bool | None])
68
+ """Optional. True, if this user allowed the bot to message them."""
69
+
70
+ photo_url: Option[str] = field(default=..., converter=From[str | None])
71
+ """Optional. URL of the user’s profile photo. The photo can be in .jpeg or .svg formats."""
72
+
73
+
74
+ class WebAppInitData(Model):
75
+ """Object `WebAppInitData`, see the [documentation](https://core.telegram.org/bots/webapps#webappinitdata).
76
+
77
+ This object contains data that is transferred to the Mini App when it is opened.
78
+ It is empty if the Mini App was launched from a keyboard button or from inline mode.
79
+ """
80
+
81
+ auth_date: datetime = field(converter=From[datetime | int])
82
+ """Unix time when the form was opened."""
83
+
84
+ hash: str = field()
85
+ """A hash of all passed parameters, which the bot server can use to check their validity."""
86
+
87
+ signature: str = field()
88
+ """A signature of all passed parameters (except hash), which the third party
89
+ can use to check their validity."""
90
+
91
+ query_id: Option[str] = field(default=..., converter=From[str | None])
92
+ """Optional. A unique identifier for the Mini App session, required for
93
+ sending messages via the answerWebAppQuery method."""
94
+
95
+ user: Option[WebAppUser] = field(default=..., converter=From[WebAppUser | None])
96
+ """Optional. An object containing data about the current user."""
97
+
98
+ receiver: Option[WebAppUser] = field(default=..., converter=From[WebAppUser | None])
99
+ """Optional. An object containing data about the chat partner of the current
100
+ user in the chat where the bot was launched via the attachment menu. Returned
101
+ only for private chats and only for Mini Apps launched via the attachment menu."""
102
+
103
+ chat: Option[WebAppChat] = field(default=..., converter=From[WebAppChat | None])
104
+ """Optional. An object containing data about the chat where the bot was launched
105
+ via the attachment menu. Returned for supergroups, channels and group chats – only
106
+ for Mini Apps launched via the attachment menu."""
107
+
108
+ chat_type: Option[ChatType] = field(default=..., converter=From[ChatType | None])
109
+ """Optional. Type of the chat from which the Mini App was opened. Can be either
110
+ `sender` for a private chat with the user opening the link, `private`, `group`,
111
+ `supergroup`, or `channel`. Returned only for Mini Apps launched from direct links."""
112
+
113
+ chat_instance: Option[str] = field(default=..., converter=From[str | None])
114
+ """Optional. Global identifier, uniquely corresponding to the chat from which the
115
+ Mini App was opened. Returned only for Mini Apps launched from a direct link."""
116
+
117
+ start_param: Option[str] = field(default=..., converter=From[str | None])
118
+ """Optional. The value of the startattach parameter, passed via link. Only
119
+ returned for Mini Apps when launched from the attachment menu via link.
120
+
121
+ The value of the `start_param` parameter will also be passed in the GET-parameter
122
+ `tgWebAppStartParam`, so the Mini App can load the correct interface right away.
123
+ """
124
+
125
+ can_send_after: Option[int] = field(default=..., converter=From[int | None])
126
+ """Optional. Time in seconds, after which a message can be sent via the answerWebAppQuery method."""
127
+
128
+
129
+ __all__ = ("WebAppChat", "WebAppInitData", "WebAppUser")
@@ -0,0 +1,35 @@
1
+ import hashlib
2
+ import hmac
3
+ import typing
4
+
5
+ SECRET_TOKEN_KEY: typing.Final = "X-Telegram-Bot-Api-Secret-Token"
6
+
7
+
8
+ def verify_secret_token(
9
+ secret_token: str,
10
+ request_headers: typing.Mapping[str, typing.Any],
11
+ ) -> bool:
12
+ """Verifies update request is from telegram."""
13
+ return request_headers.get(SECRET_TOKEN_KEY) == secret_token
14
+
15
+
16
+ def webapp_validate_request(
17
+ bot_token: str,
18
+ request_query_params: typing.Mapping[str, typing.Any],
19
+ ) -> bool:
20
+ """Verifies authentity of webapp request by counting hash of its parameters."""
21
+ items = sorted(request_query_params.items(), key=lambda kv: kv[0])
22
+ data_check_string = "\n".join(f"{k}={param}" for k, param in items if k != "hash")
23
+ secret = hmac.new(
24
+ "WebAppData".encode(),
25
+ bot_token.encode(),
26
+ hashlib.sha256,
27
+ ).digest()
28
+ data_chk = hmac.new(secret, data_check_string.encode(), hashlib.sha256)
29
+
30
+ if (hash_ := request_query_params.get("hash")) is None:
31
+ return False
32
+ return hmac.compare_digest(data_chk.hexdigest(), hash_)
33
+
34
+
35
+ __all__ = ("verify_secret_token", "webapp_validate_request")
@@ -0,0 +1,166 @@
1
+ Metadata-Version: 2.4
2
+ Name: telegrinder
3
+ Version: 1.0.0rc1
4
+ Summary: Modern visionary telegram bot framework.
5
+ Project-URL: Source, https://github.com/timoniq/telegrinder
6
+ Project-URL: Bug Tracker, https://github.com/timoniq/telegrinder/issues
7
+ Project-URL: Documentation, https://github.com/timoniq/telegrinder/blob/dev/docs/index.md
8
+ Author-email: timoniq <tesseradecades@mail.ru>
9
+ Maintainer-email: luwqz1 <howluwqz1@gmail.com>
10
+ License: MIT License
11
+
12
+ Copyright (c) 2022 timoniq
13
+ Copyright (c) 2024 luwqz1
14
+
15
+ Permission is hereby granted, free of charge, to any person obtaining a copy
16
+ of this software and associated documentation files (the "Software"), to deal
17
+ in the Software without restriction, including without limitation the rights
18
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
19
+ copies of the Software, and to permit persons to whom the Software is
20
+ furnished to do so, subject to the following conditions:
21
+
22
+ The above copyright notice and this permission notice shall be included in all
23
+ copies or substantial portions of the Software.
24
+
25
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
26
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
27
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
28
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
29
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
30
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
31
+ SOFTWARE.
32
+ License-File: LICENSE
33
+ Keywords: api schema,async,asyncio,bot api,bot building,custom rules,framework,middleware,nodes,telegram,telegram bot api framework,telegrinder,telegrinder framework,waiter machine
34
+ Classifier: Environment :: Console
35
+ Classifier: Intended Audience :: Developers
36
+ Classifier: License :: OSI Approved :: MIT License
37
+ Classifier: Programming Language :: Python :: 3.14
38
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
39
+ Classifier: Topic :: Software Development :: Quality Assurance
40
+ Classifier: Typing :: Typed
41
+ Requires-Python: <4.0,>=3.14
42
+ Requires-Dist: certifi>=2026.1.4
43
+ Requires-Dist: choicelib>=0.1.5
44
+ Requires-Dist: env-better>=1.0.0
45
+ Requires-Dist: kungfu-fp>=1.0.0
46
+ Requires-Dist: msgspec>=0.20.0
47
+ Requires-Dist: nodnod>=1.0.0
48
+ Requires-Dist: rnet>=3.0.0rc20
49
+ Requires-Dist: vbml2>=2.0.0
50
+ Provides-Extra: brotli
51
+ Requires-Dist: brotli; extra == 'brotli'
52
+ Provides-Extra: loguru
53
+ Requires-Dist: loguru; extra == 'loguru'
54
+ Provides-Extra: structlog
55
+ Requires-Dist: structlog; extra == 'structlog'
56
+ Provides-Extra: uvloop
57
+ Requires-Dist: uvloop; (sys_platform == 'darwin' or sys_platform == 'linux') and extra == 'uvloop'
58
+ Provides-Extra: winloop
59
+ Requires-Dist: winloop; (sys_platform == 'cli' or sys_platform == 'cygwin' or sys_platform == 'win32') and extra == 'winloop'
60
+ Description-Content-Type: text/markdown
61
+
62
+ <p>
63
+ <a href="https://github.com/timoniq/telegrinder">
64
+ <picture>
65
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/timoniq/telegrinder/dev/docs/logo-white.png">
66
+ <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/timoniq/telegrinder/dev/docs/logo-black.png">
67
+ <img alt="Logo" src="https://raw.githubusercontent.com/timoniq/telegrinder/dev/docs/logo-black.png" width="200">
68
+ </picture>
69
+ </a>
70
+ </p>
71
+
72
+ </p>
73
+ <h1>
74
+ telegrinder
75
+ </h1>
76
+
77
+ <p>
78
+ — effective and reliable telegram bot building.
79
+ </p>
80
+
81
+ <p>
82
+ <a href="#contributors"><img alt="Still in development" src="https://img.shields.io/badge/Still_in_development-E3956B?logo=textpattern&logoColor=fff&style=flat-square&color=black"></img></a>
83
+ <a href="#license"><img alt="GitHub License" src="https://img.shields.io/github/license/timoniq/telegrinder.svg?color=lightGreen&labelColor=black&style=flat-square"></img></a>
84
+ <a href="https://docs.astral.sh/ruff/"><img alt="Code Style" src="https://img.shields.io/badge/code_style-Ruff-D7FF64?logo=ruff&logoColor=fff&style=flat-square&labelColor=black"></img></a>
85
+ <a href="https://docs.basedpyright.com/latest/"><img alt="Type Checker" src="https://img.shields.io/badge/types-basedpyright-black?logo=python&color=%23FBCA04&logoColor=edb641&labelColor=black&style=flat-square"></img></a>
86
+ <a href="https://pypi.org/project/telegrinder/"><img alt="Python versions" src="https://img.shields.io/python/required-version-toml?tomlFilePath=https%3A%2F%2Fraw.githubusercontent.com%2Ftimoniq%2Ftelegrinder%2Frefs%2Fheads%2Fmain%2Fpyproject.toml&style=flat-square&logo=python&logoColor=fff&labelColor=black"></img></a>
87
+ <a href="https://core.telegram.org/bots/api"><img alt="Telegram Bot API Version" src="https://img.shields.io/badge/dynamic/toml?url=https%3A%2F%2Fraw.githubusercontent.com%2Ftimoniq%2Ftelegrinder%2Frefs%2Fheads%2Fmain%2Ftypegen%2Fconfig.toml&query=%24.telegram-bot-api.version&style=flat-square&logo=telegram&label=Telegram%20API&labelColor=black&color=%23FBCA04"></img></a>
88
+ </p>
89
+
90
+
91
+ * Type hinted & [type functional](https://github.com/timoniq/telegrinder/blob/dev/docs/tutorial/en/3_functional_bits.md)
92
+ * Customizable and extensible
93
+ * Fast models built on [msgspec](https://github.com/jcrist/msgspec)
94
+ * API client powered by fast [rnet](https://github.com/0x676e67/rnet) library
95
+ * Both low-level and high-level API
96
+ * Convenient [dependency injection](https://github.com/timoniq/telegrinder/blob/dev/docs/tutorial/en/5_nodes.md) via nodes
97
+ * <details> <summary>A variety of state management tools</summary><p>○ <a href="https://github.com/timoniq/telegrinder/blob/dev/examples/blueprint_bot/handlers/with_enum.py#L18">waiter machine</a> for runtime inline short state funneling<br>○ <a href="https://github.com/timoniq/telegrinder/blob/dev/examples/state_mutator_player.py">state mutator</a> to declare complex state sets</p></details>
98
+
99
+ Basic example:
100
+
101
+ ```python
102
+ from telegrinder import API, Message, Telegrinder, Token
103
+ from telegrinder.modules import setup_logger
104
+ from telegrinder.rules import Text
105
+
106
+ setup_logger(level="INFO")
107
+ api = API(token=Token("123:token"))
108
+ bot = Telegrinder(api)
109
+
110
+
111
+ @bot.on.message(Text("/start"))
112
+ async def start(message: Message) -> None:
113
+ me = (await api.get_me()).unwrap()
114
+ await message.answer(f"Hello, {message.from_user.full_name}! I'm {me.full_name}.")
115
+
116
+
117
+ bot.run_forever()
118
+ ```
119
+
120
+ # Getting started
121
+
122
+ Install using pip, uv or poetry:
123
+
124
+ <a href="https://pypi.org/project/telegrinder/"><img alt="PyPI Version" src="https://img.shields.io/pypi/v/telegrinder.svg?labelColor=black&style=flat-square&logo=pypi"></img></a>
125
+
126
+ ```console
127
+ uv add telegrinder
128
+ poetry add telegrinder
129
+ pip install telegrinder
130
+ ```
131
+
132
+ Or install from source (unstable):
133
+
134
+ <a href="https://github.com/timoniq/telegrinder/actions/workflows/push.yml"><img alt="GitHub CI" src="https://img.shields.io/github/actions/workflow/status/timoniq/telegrinder/push.yml?branch=main&style=flat-square&labelColor=black&label=CI&logo=github"></img></a>
135
+
136
+ ```console
137
+ uv add "telegrinder @ git+https://github.com/timoniq/telegrinder@dev"
138
+ poetry add git+https://github.com/timoniq/telegrinder@dev
139
+ pip install git+https://github.com/timoniq/telegrinder@dev
140
+ ```
141
+
142
+ # Documentation
143
+
144
+ [**Tutorial 📖**](/docs/tutorial/en/0_tutorial.md)
145
+
146
+ # Community
147
+
148
+ Join one of our [forums](https://github.com/timoniq/telegrinder/blob/dev/docs/community_links.md).
149
+
150
+ # License
151
+
152
+ Telegrinder is [MIT licensed](./LICENSE)\
153
+ Copyright © 2022 [timoniq](https://github.com/timoniq)\
154
+ Copyright © 2024 [luwqz1](https://github.com/luwqz1)
155
+
156
+ # Contributors
157
+
158
+ <p>
159
+ <img src="https://arseny.neocities.org/assets/te_agradezco.png" height="50px" style="vertical-align: middle;">
160
+ </p>
161
+
162
+ <a href="https://github.com/timoniq/telegrinder/graphs/contributors">
163
+ <img src="https://contributors-img.web.app/image?repo=timoniq/telegrinder"/>
164
+ </a>
165
+
166
+ We welcome your pull requests ([contrubution notes](https://github.com/timoniq/telegrinder/blob/main/contributing.md)). Telegrinder is built by the community
@@ -0,0 +1,215 @@
1
+ telegrinder/__init__.py,sha256=IuuOndtwiGVf0rVM5Nc1_SgVmEDoWdz7oTCx18KM2cY,6675
2
+ telegrinder/__meta__.py,sha256=iwDi0TUz45SMYIlshEAh-UPerqIe7nxUavbLYwEgSR8,25
3
+ telegrinder/model.py,sha256=N4VoSPzSSAVYfqsaMnhNWsAY5Tv1WVFJa3G7PdKEjsQ,4211
4
+ telegrinder/model.pyi,sha256=Oy49wK9pcdUeTdJNVAsVGtQ8pffky-lrf6cB18PoevU,1992
5
+ telegrinder/modules.py,sha256=Co2iLs_t-t3qPRg1Oj3M8YwRYM8RvvsU1K5Otd6EIoM,35478
6
+ telegrinder/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
+ telegrinder/rules.py,sha256=F7iYyAyY3MBVfKiv9brBgejciuQaoXiGW71EI5uue0E,36
8
+ telegrinder/verification_utils.py,sha256=gNNWFn3_NoyXCfnAYaho_iJwr7owxvHwGRc8hUjjfiU,1106
9
+ telegrinder/api/__init__.py,sha256=St7SHErtC7BEbgExD0icinS9t__AI94nOaxWlnxMDAE,400
10
+ telegrinder/api/api.py,sha256=iyQKLern-pxnTJPx5GQSVT60ztHcFSKwWWfAbCXfbDY,5309
11
+ telegrinder/api/error.py,sha256=uAQBpl-IB_DH2zF9cAweZ82jrLGVSVBr_7h4tlbohP8,1320
12
+ telegrinder/api/response.py,sha256=2LJXkgu_Hz4ndTgiI578AxYVwBP91KUTU7XYCSCWtiE,667
13
+ telegrinder/api/token.py,sha256=cQ4UTp4iSBMRx1NEHjjK0H0qX4FdsqGXuiiVuvdY8qQ,840
14
+ telegrinder/api/validators.py,sha256=s99gXZQAiKQCANvR9jQk_SKnP4wHijCn_bNbZ8dnd0M,923
15
+ telegrinder/bot/__init__.py,sha256=PVT2RHQGlG4qeiLmoM5nf7qydd5bdDbdxD0cBfUggDs,3330
16
+ telegrinder/bot/bot.py,sha256=mmeYx4uv_2rMgKsNOF17NngSLfEO9udpNvihbxkhDiU,2397
17
+ telegrinder/bot/cute_types/__init__.py,sha256=jWal2ItrcU-1C5CNdWcvlg_E1JFACO9wOmnEfHHutY8,1946
18
+ telegrinder/bot/cute_types/base.py,sha256=59Em1re_cWgqLbAooFRPZJ5xyowRjUAZTCEjAmFdUJI,7310
19
+ telegrinder/bot/cute_types/base.pyi,sha256=_Sn_V4TtOCtYNNWTwunIPsxu0ht3HOk33M6Rb_S0SdU,1551
20
+ telegrinder/bot/cute_types/business_connection.py,sha256=KoGECfPHoQpT9XSLYSQSYQGPKvkWfSc9CG25ejBY-m0,255
21
+ telegrinder/bot/cute_types/business_messages_deleted.py,sha256=cL23KhYFI5vrHh-Wf9IxuhoDknvEbI38NnoYRwMWSEI,280
22
+ telegrinder/bot/cute_types/callback_query.py,sha256=tNVJhAUpYHpzD-dqtpV-EtJGDNiEKCgD7KiHq6kBMsQ,10813
23
+ telegrinder/bot/cute_types/chat_boost_removed.py,sha256=0F4ul9WOOFJ9iy1STtK-iOFX9Rbt7FwpPxd-A71yJ2o,245
24
+ telegrinder/bot/cute_types/chat_boost_updated.py,sha256=nDUMb99ek7EnQxPeSgYvwvmYmOEvP66-xCoVKwfLlNI,245
25
+ telegrinder/bot/cute_types/chat_join_request.py,sha256=iiuBiUZPEGcKTbA8tuW1eO7PrtB21jVnUaxi7tRhlO4,2015
26
+ telegrinder/bot/cute_types/chat_member_updated.py,sha256=ofVcg1q4bjdjDZfnVB-4CwSup064jf5M_pHZuxTxu9s,6460
27
+ telegrinder/bot/cute_types/chosen_inline_result.py,sha256=X4G4ohjuSVRnAZoRiAVYV5xlMMf_Ys4PAZHzTYPQzNw,325
28
+ telegrinder/bot/cute_types/inline_query.py,sha256=oEmcLGfyrO1ZYeKqvKPYxYU2ZWG7joZ70Er-4NRQIEo,1523
29
+ telegrinder/bot/cute_types/message.py,sha256=88msyDd6XWnU8bus-FUZ80YujWhaJ692MuBKdCM_rik,166237
30
+ telegrinder/bot/cute_types/message_reaction_count_updated.py,sha256=8GK-HAU1ns6iBu8pabAj7CcFy-ntJvv02hYpSJlvnmU,300
31
+ telegrinder/bot/cute_types/message_reaction_updated.py,sha256=QZQS4v94IFfHbh8arOBERxGzr0K08bPM5aF7ZoHShYw,275
32
+ telegrinder/bot/cute_types/paid_media_purchased.py,sha256=_2CMRfKeLm2PtU9bAn9OoqT55nQUTD3vBcKbe3tbu0g,325
33
+ telegrinder/bot/cute_types/poll.py,sha256=-uxF4gXzaHKm8VgJ7K-ZbcMuRRwLqz3C-Vga7O9mSyQ,185
34
+ telegrinder/bot/cute_types/poll_answer.py,sha256=ae9eHljMeqE7Kq4SNbcHus8QTvo307QuK_JPn-IFKtA,215
35
+ telegrinder/bot/cute_types/pre_checkout_query.py,sha256=tSKgXDlGY2-UTkiAmJptMTxa3OlsBxnXmkAj2X2DTJ8,1532
36
+ telegrinder/bot/cute_types/shipping_query.py,sha256=msANx5BM5pmHvCLOVSYRVbzudVsgNLzLdW0uSZdWy80,300
37
+ telegrinder/bot/cute_types/update.py,sha256=0Nk9N6AyaeseTixZbcnT6quNLx-WbIQ3S8mjpn_mH_E,8716
38
+ telegrinder/bot/cute_types/utils.py,sha256=oAXVRUn8MgpP7XXvHm8lvHyQaX0EsR9bk8v58CtWnJk,4334
39
+ telegrinder/bot/dispatch/__init__.py,sha256=BtaCg9jQE2173_LsB1EI4z-qy_XsxQ_dx9SwvPQ_pkw,2540
40
+ telegrinder/bot/dispatch/abc.py,sha256=r8Hx8w4Ou6zbFVPswQowLjBhUfBzgAyBwlfZVoWrmZg,2353
41
+ telegrinder/bot/dispatch/action.py,sha256=wfjmesLax3GoO_spfqx-eZTR_9zDpv8mj0HRykQVKWM,3216
42
+ telegrinder/bot/dispatch/context.py,sha256=m10c0BQVScNcOhvmcMWT4cVAewMkf_kZO4tDwwDMYzM,4795
43
+ telegrinder/bot/dispatch/dispatch.py,sha256=rXL-qWHIWAWLtQNIuZFlfCOHRv4UmJyJMRulu9Ftcwk,13454
44
+ telegrinder/bot/dispatch/process.py,sha256=kaLt3cAk0ou-AB_okSLn6LQQZfvE_fv0dbcdYKklaTQ,3135
45
+ telegrinder/bot/dispatch/handler/__init__.py,sha256=ialxb7vkoN_5NCeZ7eO68Cg7rqVgg86vw_V6mFfRN7U,1002
46
+ telegrinder/bot/dispatch/handler/abc.py,sha256=wVhW0ETN3S19uyKSUuHeWrE0zrthJk0E54h5a3PqGlI,502
47
+ telegrinder/bot/dispatch/handler/audio_reply.py,sha256=oGFr173fjmSebQNsdMQtFecCUGkK4cGxFs3PNOaJMNo,1286
48
+ telegrinder/bot/dispatch/handler/base.py,sha256=o7C3jNy43kOqUdPjQTuhYi2WFPjgWujYI_orvIJzEYY,884
49
+ telegrinder/bot/dispatch/handler/document_reply.py,sha256=InY3ZIEYpo8k3za_TTgwDzoEBjpa-A3dJtih-yINyjk,1313
50
+ telegrinder/bot/dispatch/handler/func.py,sha256=eXdqJnIs2KWMxi2B6xzz30O-1TKGqTPxR8zYvQX4zKk,2555
51
+ telegrinder/bot/dispatch/handler/media_group_reply.py,sha256=Uk4dWkPBOEZnBsCIxQFDg5-rQT0rzOSqM_fW26I_Gfs,1347
52
+ telegrinder/bot/dispatch/handler/message_reply.py,sha256=U5gPnTqEg49lmHT_HkjEXoa3vpGpHkM2qxsGiNn0rw0,1065
53
+ telegrinder/bot/dispatch/handler/photo_reply.py,sha256=G6JHLrytKUNkOgSEStj9c2KX1c7xPrfZO7o1Rz8bIYk,1286
54
+ telegrinder/bot/dispatch/handler/sticker_reply.py,sha256=FPs6O7gY25Jxzo16D6xRGadJ_bLOY7zs-Xj7kjUAp3E,1131
55
+ telegrinder/bot/dispatch/handler/video_reply.py,sha256=7j4SgJIue-zZ3cWFi8u88-ndKRxzCYytQ7x8kboeCVY,1283
56
+ telegrinder/bot/dispatch/middleware/__init__.py,sha256=sPN3voueL9tPUiHCFgiRS9KvyB2ZXotLeJppalkQLoI,488
57
+ telegrinder/bot/dispatch/middleware/abc.py,sha256=lazdTZAYYH-RALVXl9ULEes9F5wB1X9VIPYClTPxDJc,3886
58
+ telegrinder/bot/dispatch/middleware/box.py,sha256=VGu9YR7l6X810GmrMTgeRd1O_kRgvCIA3OYifYYa7_0,1183
59
+ telegrinder/bot/dispatch/middleware/filter.py,sha256=ps2ColeFFr0GWtNx8-eV4wXO1_-r_UIpEZi9cjOX4sA,3025
60
+ telegrinder/bot/dispatch/middleware/media_group.py,sha256=RAYw3CRIcQgOIxR0c_O5AQWplR6qxxGJTNgY-dwuXCE,2085
61
+ telegrinder/bot/dispatch/return_manager/__init__.py,sha256=tmgf7Q_GxTLexKWK0LCOa72XeMAkKcXZ9oDuc5BQ2M8,740
62
+ telegrinder/bot/dispatch/return_manager/abc.py,sha256=e67HR91C_7Vh2zgWv56mi6JZ5uf3McR79nOViD49zFs,3418
63
+ telegrinder/bot/dispatch/return_manager/callback_query.py,sha256=tkqJIE7rgkJhjs8JtLHKTGPtfnhUU6oZympmt5nu5yk,649
64
+ telegrinder/bot/dispatch/return_manager/inline_query.py,sha256=-mGEv-EgjXXysDXq4NXtqMSGtpzvn1AkTh7YnuluVc4,464
65
+ telegrinder/bot/dispatch/return_manager/message.py,sha256=0yBfJLnSQ92I8kirzeJ0xZjS8AV39tnPComNEGMvfjg,1138
66
+ telegrinder/bot/dispatch/return_manager/pre_checkout_query.py,sha256=KMtXycENBU_xMykby7ToSBMsHpUB5CNf7s_c4pj4sbM,671
67
+ telegrinder/bot/dispatch/return_manager/utils.py,sha256=GA8PGG11whLy-7eADtSWTswFFdwfZFHvaAq_G8JxcRI,561
68
+ telegrinder/bot/dispatch/router/__init__.py,sha256=Jh_4-l5zw-C-OosHriMaJvsuuorHYdj5symePw9eoOg,149
69
+ telegrinder/bot/dispatch/router/abc.py,sha256=lPyuvfdmtG3BcsKhZSgZAfeDG0lpu6h6iPe9XgTFL0Q,354
70
+ telegrinder/bot/dispatch/router/base.py,sha256=l8qH66He1UyrlZHAPok5fpUNVOkqx2eTkzk9QJOizcM,5313
71
+ telegrinder/bot/dispatch/view/__init__.py,sha256=JikRF8RabSkbYN4A2sDvrKF61u5ie4aaYZ4CZv__BYE,436
72
+ telegrinder/bot/dispatch/view/abc.py,sha256=5JQ8ugYDShqOypF7OdSJ6QEAzXdU2WysV_CiwWZ6KvI,352
73
+ telegrinder/bot/dispatch/view/base.py,sha256=cNErgZcRGsbqkg4D1KgDAuyTNzX3XrIEbCaGx1kEhmI,6966
74
+ telegrinder/bot/dispatch/view/box.py,sha256=nR_GmFrCgVY85S2erxk82HjTqMewZrOV8hFQzO194vg,8541
75
+ telegrinder/bot/dispatch/view/media_group.py,sha256=r4qz_QRBrtq3btAelUcPP2Dp7GFFGL7RkfA9TDZzYN8,691
76
+ telegrinder/bot/dispatch/waiter_machine/__init__.py,sha256=Z87NOBkRIO24U362EI4tY-90C8N1Wdfg2frsgdl-Q0w,762
77
+ telegrinder/bot/dispatch/waiter_machine/actions.py,sha256=QDPgf2kCPKnqBlRTPYKealQBETThN_l2G3hYQicFb5U,484
78
+ telegrinder/bot/dispatch/waiter_machine/machine.py,sha256=bp-s3KcvvLqw1fyE0oTMe97DIhf80v9x4GzfgMZY_CE,9256
79
+ telegrinder/bot/dispatch/waiter_machine/middleware.py,sha256=VmGWLVQJo-uvHJTwjiiecfuUG8NTAnrByWIB32iOQjo,2910
80
+ telegrinder/bot/dispatch/waiter_machine/short_state.py,sha256=_JIhKuUjH2pCNRke34780f9YQ0IRCvtOXDte1sPS1GI,3600
81
+ telegrinder/bot/dispatch/waiter_machine/hasher/__init__.py,sha256=6VWAodIFaQfu12vYAkPo4air1aifW8IS2UfoE5jTgNM,439
82
+ telegrinder/bot/dispatch/waiter_machine/hasher/callback.py,sha256=3Kk4RrN88t8CP6FJkCtCh2rB57Lp_oLTfK0lU-nqLnw,1449
83
+ telegrinder/bot/dispatch/waiter_machine/hasher/hasher.py,sha256=yrRF8VdrmQw9Mj_a7FBpuU9xC5YhgC-qvxD1KQ-MQno,1900
84
+ telegrinder/bot/dispatch/waiter_machine/hasher/message.py,sha256=1-gcHVC17rgs3g-1iMVT-eglUHxjRALgo-irup7fNZU,1123
85
+ telegrinder/bot/polling/__init__.py,sha256=OqfIFPS_V6UrCg-vCv9pkMFzTKdNbDP2faBfATs_TGg,94
86
+ telegrinder/bot/polling/abc.py,sha256=qFiKzWTWENK-sSuShC5cPlM-JS4In2c8-1_ARdwdTms,442
87
+ telegrinder/bot/polling/error_handler.py,sha256=xI-3Ws561eml0uGQbqwZl17236G5c0q2kwaCrkTWAbs,3339
88
+ telegrinder/bot/polling/polling.py,sha256=pKblyzv6KTvU_HdKHpXIgl2cZHX7hZdAMyV1WAzvtLM,5899
89
+ telegrinder/bot/polling/utils.py,sha256=JN8pGJINRpBO7w9eV8EZowNyd1_UnaqIQigSpDWme2A,308
90
+ telegrinder/bot/rules/__init__.py,sha256=o3BzRZEJVGNR1mv5m8dr9xGbFoNBsdmiICW8j-ovqPc,3912
91
+ telegrinder/bot/rules/abc.py,sha256=pcqEE7oEH39zlN7aZhy-stz87sN_DpbHNL9fHRH_wnw,4044
92
+ telegrinder/bot/rules/button.py,sha256=Ebxd0kZbUGE4cBd8iwvyeOg8ERXQICcPq_lP-NUuNP0,529
93
+ telegrinder/bot/rules/callback_data.py,sha256=4Xs3MuIKhqvCugrSl1sLtcXOpPNoowY9r6Hi_U0VyAI,3819
94
+ telegrinder/bot/rules/chat_join.py,sha256=KGfUJN-eBoh50WrS10DjM1_CbLuQfy_NMglnGTetgLM,906
95
+ telegrinder/bot/rules/chat_member_updated.py,sha256=0_FSAMpSV2UhnufLzIUwwPpTRp5gGxkJcB776Rn6bCI,4606
96
+ telegrinder/bot/rules/command.py,sha256=BpwyHXjQXr925e9q3xIrPSKGHWL825kNGn7vtznZ964,4309
97
+ telegrinder/bot/rules/enum_text.py,sha256=QmnUjPzzMGIaAcdZGDDU9iTmLPo0g1-uiTWzyRTEESw,926
98
+ telegrinder/bot/rules/func.py,sha256=2Ho_AxLARrj6Bn5-1kuEsnlVpMpMPQSbSHTYpZDff1E,553
99
+ telegrinder/bot/rules/fuzzy.py,sha256=n88DMu6Nlq3kS-zbMPk_nv658RYdICKswNDAzEAXTMo,686
100
+ telegrinder/bot/rules/inline.py,sha256=H1QEVnNRCBqX4cOAaoPjSTnMa1N0JlkrfdmkPq6Y8f0,1511
101
+ telegrinder/bot/rules/integer.py,sha256=l3gxs03WRn2cliTKgh1KRrWBY_1JX7xVOB5ZDA0dck4,476
102
+ telegrinder/bot/rules/is_from.py,sha256=HS-j1RR0L119zYca1pdaL4CUKrADCbt9kKy8aGmKPyc,5219
103
+ telegrinder/bot/rules/logic.py,sha256=yBF7rV4Fw8-aBmdRnLfhl5AwwMVmgzu0vv40G1TzxXs,583
104
+ telegrinder/bot/rules/magic.py,sha256=CBs7iuZEm626dZXJ2PYvLcn0KGdh2NP8ClZ8D2TeWIo,1872
105
+ telegrinder/bot/rules/markup.py,sha256=0HFDPVm85DN09J9GhwcApyXFCb1ePdd8QffrMGyhYVs,1512
106
+ telegrinder/bot/rules/media.py,sha256=QnfPzO8m95K9YQUc7HtUwhAfhNJNf3G98ZOLFoY2kdc,389
107
+ telegrinder/bot/rules/mention.py,sha256=vWhZq6A8H7E4OyoBuPTA2D2UrEAzCu-qydP3tCw8Mws,523
108
+ telegrinder/bot/rules/message_entities.py,sha256=Djh14OdqPmVb26eS4IUxuzWVPqsYiY8KVpzvdi6YpjA,1167
109
+ telegrinder/bot/rules/node.py,sha256=vnfl37ECIxeCaDIvV0iSU8zntcG6V6I9GCYsKen1hoA,1342
110
+ telegrinder/bot/rules/payload.py,sha256=bMUDpG7WZZZIuVoAO1KmWqqUpj5OSjQWiulnVYLvgcg,2863
111
+ telegrinder/bot/rules/payment_invoice.py,sha256=qE9XKKcSHklP2HgWvmoXTaCniMKwRfm0__NYtq8JoYM,445
112
+ telegrinder/bot/rules/regex.py,sha256=J4A8iwdDl_CPP6nB4a9v0yX3o9u3-USTMJSl5cxc0qw,1141
113
+ telegrinder/bot/rules/rule_enum.py,sha256=VwWctwNeTphqfNnm14__beFOf124AGvnQ5GmDcLyrbI,2079
114
+ telegrinder/bot/rules/start.py,sha256=Qjw0lOornXLGYaihp_Vpac8zqqI020jH5rkZeikLjU0,2174
115
+ telegrinder/bot/rules/state.py,sha256=567K70aymoLAjWo2K9HI5ZFGoCSAm9u5uKXv-46lmOw,925
116
+ telegrinder/bot/rules/text.py,sha256=9mm3llxqs6n90PUnxatAgpvSwgJ5bq3a_4FHTvxxVQ4,835
117
+ telegrinder/bot/rules/update.py,sha256=adKXXZnuVR407jXlUNXnC8KrTBR0jhpaL7HYXH_TKKI,398
118
+ telegrinder/bot/scenario/__init__.py,sha256=nnPjdxdvjoEYYMRUEfWvIhZStiY1C984x1azdRRP9II,136
119
+ telegrinder/bot/scenario/abc.py,sha256=YZs9YS49ilRHL0hGvIDFEG27yZSrURmnS2DxoGczfOY,414
120
+ telegrinder/bot/scenario/checkbox.py,sha256=8YOi49QJBSzJXi5R-Lsdn7YyUuz97LM2RiqrTF4DUN4,5390
121
+ telegrinder/bot/scenario/choice.py,sha256=zPRF_J_NWo2twkabT3tkq1o5Zlt4ddSXIKSi_4T3G38,1595
122
+ telegrinder/client/__init__.py,sha256=PzIqtYalRAzLwORVqCFvhDcw8iFBQ4zESSAr4Bg9M_o,302
123
+ telegrinder/client/abc.py,sha256=85c-xGh1bC-tDgTMSQFmVHGx0XZXsPa_ss_HO_iacss,3184
124
+ telegrinder/client/form_data.py,sha256=I0pmDlzOv2fRx0Uv9CQfs6Xg8Wn96nzyyfZrHKfcEdg,754
125
+ telegrinder/client/rnet.py,sha256=2lLJr2DDPMvLXCnwXHPK4Y7QAhod8MoDVqthseVg_A4,6802
126
+ telegrinder/msgspec_utils/__init__.py,sha256=2smfqGyi3h3kjgpDqvtyAP1xvTv0HCuUvXA9ODUl7pc,1148
127
+ telegrinder/msgspec_utils/abc.py,sha256=lo6pwN-_LyEeVPUcgtaQLFkpvwtR4eZSdtTisUVk5YQ,354
128
+ telegrinder/msgspec_utils/decoder.py,sha256=q-bgD7AWkDQqP47eGUw7aCc6ggmspJ5Bhz8ySjjNz_I,11474
129
+ telegrinder/msgspec_utils/encoder.py,sha256=uync4apMNU_c5QYW-fJB5bHmYBxhgyVO5t5QHz0j408,6530
130
+ telegrinder/msgspec_utils/json.py,sha256=bDZcRdicJBD9W4sIbk343nsBHHEjQ87JgQeWg3NgWok,290
131
+ telegrinder/msgspec_utils/tools.py,sha256=ydj42ZSxtdyuPhsj2JkoKORSk2ujxz49NpyjX5AZEoQ,2119
132
+ telegrinder/msgspec_utils/custom_types/__init__.py,sha256=bb5FFJoOwiZcEX-Ff7hFZLdaY_eRPQZMrxVLfOtvo_U,360
133
+ telegrinder/msgspec_utils/custom_types/datetime.py,sha256=NMzXqqnNh80lJAuagHZZdSAQ4J3QFL7aRyFjGwMGM9Q,663
134
+ telegrinder/msgspec_utils/custom_types/enum_meta.py,sha256=2lf4PAmNE_9798xFrVUgKpJCklPrc0_CcPigT4azxyc,1688
135
+ telegrinder/msgspec_utils/custom_types/literal.py,sha256=KJzCB9HxR4yAydyer0zkuScmWsXn48S3KfEMTUt6GQk,581
136
+ telegrinder/msgspec_utils/custom_types/option.py,sha256=qtkmUBlKP83Vk18X5_xMvZx2_79UTwhm_4-Xce15C2M,413
137
+ telegrinder/node/__init__.py,sha256=ZqZQfz3j3IKNpFTO6EKU3o-i6S3YqGWPs-T9bTBZdPQ,1692
138
+ telegrinder/node/compose.py,sha256=JiKJb7yA31RAuejfJ5aa8Dr-_mZK9RwV3fLpayNDQHE,6261
139
+ telegrinder/node/scope.py,sha256=ov1GFpaMNvbGXnDh_Ricg8K8A7AICIk9CX-f2Z8OOgs,2734
140
+ telegrinder/node/utils.py,sha256=aDpgK_Ygm4gM1kbNAJ2wKDatjbt90rnk_TTFbEd1W-o,1191
141
+ telegrinder/node/nodes/__init__.py,sha256=JcQ4CACr6JcUWmRmet_QLgKh8EvAoJ8nbDIcNrH_UOE,2508
142
+ telegrinder/node/nodes/attachment.py,sha256=S5wwRftLSkxwLmp0h-XZ2STcj6JFnjo5jHTHUjVmBPc,4758
143
+ telegrinder/node/nodes/callback_query.py,sha256=sraueN7i30Tw9wVJNt6U_AVnD6PMUSLeg5Kf4foEr8c,734
144
+ telegrinder/node/nodes/channel.py,sha256=z-Jacvwe9A5E6iGYFoMo41RfQRb06BipSCtk9E4HyNk,2731
145
+ telegrinder/node/nodes/command.py,sha256=SqJwL-9T33WVy2Bee-5DQWn8DM-9pcuI6RZXbdcAvEw,936
146
+ telegrinder/node/nodes/error.py,sha256=jOjMwOuZuzMebGhm3-qOSCCXU0Ks8MukRzWTGk56Ev4,1274
147
+ telegrinder/node/nodes/event.py,sha256=niuV1WGCEbNUwVNEUl4j1uXJHM3Pgol3R6ntJzsk7tQ,2173
148
+ telegrinder/node/nodes/file.py,sha256=oZobs4eCFHwFDKBwAvjZM7DV6fe1L8hQVDYOkJYQfs0,1230
149
+ telegrinder/node/nodes/global_node.py,sha256=THLmTWoSV_S7gefDkotkTa6OwiGaQGduYt_iwRerrU0,1895
150
+ telegrinder/node/nodes/i18n.py,sha256=41lGpxPnF3S4sWLwlps655Oqna9Qzta-0zeWdGhbFI0,3266
151
+ telegrinder/node/nodes/me.py,sha256=U0AA0leA7MlE8zIXmpngW_5zbjeLIz7jAGdTPNwMw6k,598
152
+ telegrinder/node/nodes/message_entities.py,sha256=BthiTDe11ySpuw6QPA0KQPvhmLFzEO9_XwAMy7AQjpw,432
153
+ telegrinder/node/nodes/payload.py,sha256=hWmZ7_J1BUqoxKe85fIji9u-uHsKYthw5QsHNWGWvGw,2720
154
+ telegrinder/node/nodes/reply_message.py,sha256=J0ix1HGSpH_H8Rnt_McQK1NGqcRIkKiw5D9ZPeCcWVk,376
155
+ telegrinder/node/nodes/source.py,sha256=S_X7qCrQpEanxiu7DaEBTPAHuvt01yNxMb_sx6qF2T8,5056
156
+ telegrinder/node/nodes/state_mutator.py,sha256=W2elP9dUWmh7k5BavBUsmTvhlkBrrP8ZjoFWKqSCOqc,2345
157
+ telegrinder/node/nodes/text.py,sha256=r-16vGxo1bZQlS4JOcd2CBh0KvA5lpjuJRnR4zKU1bk,1624
158
+ telegrinder/tools/__init__.py,sha256=1Im-hX_uOuzBksnyhs-HXUePIe-UFyoHg9h4tAwspsE,4492
159
+ telegrinder/tools/aio.py,sha256=ZfJjgz5vjuD97lNnYCw2aVMMyCkq7rFVsKwg6MWkiic,4050
160
+ telegrinder/tools/final.py,sha256=1N6jRZeTleMxmzVOE8SeLJVWjQDotJkH15YqYPWEVCY,601
161
+ telegrinder/tools/fullname.py,sha256=bz2YFwmelfu_72ol6wxlXqt0at_5BjWKkAesgGGi7Hc,2608
162
+ telegrinder/tools/input_file_directory.py,sha256=F77qMxG7reK8VX6rnHKbYZhzQAzw229Q20K8q0CF0cw,839
163
+ telegrinder/tools/lifespan.py,sha256=BIYvihC-1jOIF6MFTUfTUthyodWTX12sXjK6CrtvIBA,6450
164
+ telegrinder/tools/limited_dict.py,sha256=HdMzqhs5wCCy6Omk81Cn0pCALxPWghkMRkDoIeYVN2A,1045
165
+ telegrinder/tools/loop_wrapper.py,sha256=XczDR4s7pBHSbfThGnUbtQNJrUMQKPwjkow9qEqKKik,8615
166
+ telegrinder/tools/member_descriptor_proxy.py,sha256=LBsMSwq0uoLVY68uW9LRswA0zwqX2dbClg_g0nSp7lY,2920
167
+ telegrinder/tools/parse_mode.py,sha256=H3jhkTcZUDVcpUnThG4vK81zs_5cjxJIleqLl9gFMu8,254
168
+ telegrinder/tools/strings.py,sha256=hbDyvISC8T2KkYvIgY3zhi8wfXQy9dkUsbf2eWPki24,536
169
+ telegrinder/tools/formatting/__init__.py,sha256=AICopIFkxg-P2IfVrAGfWs2Ox_kBZ_yCyxU6snlVYdY,1945
170
+ telegrinder/tools/formatting/html.py,sha256=IWoahVKkxeVp8wrkVUIBQnNA6ExYz5MopSXAl8YDGoM,6223
171
+ telegrinder/tools/formatting/deep_links/__init__.py,sha256=CnXQh_VCBe2VP-2QCAEfgA6Dm9v3VPQub6yxid6rZ3Y,1122
172
+ telegrinder/tools/formatting/deep_links/links.py,sha256=OQRpkzwOJigap0t3yYw7kpoJKGj5-5zlen7PoMYkV6Y,17312
173
+ telegrinder/tools/formatting/deep_links/parsing.py,sha256=jAkYbVLLn3WCZmHw-DDFGeAIT3YTMO030Lufxa4_lE8,2512
174
+ telegrinder/tools/formatting/deep_links/validators.py,sha256=YPsXhjGQF0x_cjLOQvBNpaVZ9KBJvhT4z1duQbQU09g,201
175
+ telegrinder/tools/global_context/__init__.py,sha256=wT_yvZYqyWOXjCqur6tGh_H7fDt0P-rD5cxEzsjceb0,420
176
+ telegrinder/tools/global_context/abc.py,sha256=dSa9AkdsHqgs2LjyVPpo1PZXwnQ-EkpJdeildqUVksY,1742
177
+ telegrinder/tools/global_context/builtin_context.py,sha256=-KPRxiz711rpF-QL6svQ2ObRlPa9nSfj-tpJDESdl-A,1382
178
+ telegrinder/tools/global_context/global_context.py,sha256=-71wXaVuzS_9JjOl8-K1dXFQy4wXpdFIKSeUm339DAo,21053
179
+ telegrinder/tools/keyboard/__init__.py,sha256=wkJQAjqMxnP7OUpwiFo96PoUxrW-CNzDbe0HldmUWw8,348
180
+ telegrinder/tools/keyboard/abc.py,sha256=v4I11h62uxQzqDCMVHwaHdKozOKNfPv2M4lhqCDLXwY,2365
181
+ telegrinder/tools/keyboard/base.py,sha256=go_EqxznZ35A0mcQuqQD2EXAfbC5X6wojPZHm66Hm7s,3545
182
+ telegrinder/tools/keyboard/button.py,sha256=LDLdl3tkpNLBiImeJgmKM1p2EVKUszhLYeNPiWxVb48,6671
183
+ telegrinder/tools/keyboard/data.py,sha256=8_K47emT5TIM-Z4sjIGsE3T8CCohWfcXmwVMgI_OqLE,1001
184
+ telegrinder/tools/keyboard/keyboard.py,sha256=IkS1vGYV7KOd-hLFNVAQVvY03gX5Hrs3Wf-5VAhOi_4,5274
185
+ telegrinder/tools/keyboard/utils.py,sha256=4_x4BCw1_Ja8AvtOsg32YaEf7BCpTKwzoQ61hJD9N40,2797
186
+ telegrinder/tools/magic/__init__.py,sha256=6LgbkdwgGqWZOUZfwFVVqy9aXHBsWv43kqMEyFVPIB8,766
187
+ telegrinder/tools/magic/annotations.py,sha256=vDi2PA-R13WzsnhM08kxVyDIyZw96JBNftR02xQVKo0,5326
188
+ telegrinder/tools/magic/descriptors.py,sha256=3V2rjOd14tNUt4Dhh30SFmkuhsnabduPz29fCKsJVLE,1811
189
+ telegrinder/tools/magic/function.py,sha256=kxGM8-QXjYDlHGwhYb16IEjdKKsN7m_Xo0h2LAX0u3k,7105
190
+ telegrinder/tools/magic/inspect.py,sha256=XiFKGa_bhIJz4D1GwsBd8-qf7scY0cFCYr1vCCgjqdU,362
191
+ telegrinder/tools/magic/shortcut.py,sha256=qoWyG_78OSu_LpUYmnTJaEIvr-vLwG20Cfwzh01iqgg,3407
192
+ telegrinder/tools/serialization/__init__.py,sha256=l74F_yuQ_eCgsBIYdzK3JuHrC0u1qWhkzuLdFw8l3GU,280
193
+ telegrinder/tools/serialization/abc.py,sha256=FbqXMYQxosmpnM_28C6VHFdDfHffPhvaB9sKPncU_lY,768
194
+ telegrinder/tools/serialization/json_ser.py,sha256=xFt2t72dXcsY9CNTkwXukk3zJcAzmI9xxgpcJev75Q0,2025
195
+ telegrinder/tools/serialization/msgpack_ser.py,sha256=krrVlitA53MXvIgpDGZeg4SKYrYOfIchetmzRqYQcfY,7653
196
+ telegrinder/tools/serialization/utils.py,sha256=YOgkF3q8zWJItKBOBuCpEa5zJRIy_a6mYbjD4PlVlOc,505
197
+ telegrinder/tools/singleton/__init__.py,sha256=Ou1DSYFN8zb4f3jKNWGs5mYtntzBKmI9tf8IBJQ2Z0M,228
198
+ telegrinder/tools/singleton/abc.py,sha256=fB3xLK6zWAbw1KroUEsH21TtowCLiQHuReWOmkA7eYM,247
199
+ telegrinder/tools/singleton/singleton.py,sha256=m7W-ZxzW3MaVfxW0sz6CJMEWTJGzKgJKUOiGxo4fonc,383
200
+ telegrinder/tools/state_mutator/__init__.py,sha256=SkAbHVZgFANVSxtbgrzZCrLpJ3ZV6IUWuj54JtAP6KE,160
201
+ telegrinder/tools/state_mutator/mutation.py,sha256=fJEDhumawC2FIpP7hSGt-pMmvW6j9cplgZbO0rNufTQ,2681
202
+ telegrinder/tools/state_storage/__init__.py,sha256=G2EK2HwS0NbRQIu0OotVlgEYtO_GuzN1aJOIxmDEtz4,211
203
+ telegrinder/tools/state_storage/abc.py,sha256=25LKAkTSMXBlbg4paokvXuH9v0pti7OXzJiNSANJPKY,1145
204
+ telegrinder/tools/state_storage/memory.py,sha256=e1TJlicDeQl-XV_VUvpxcG-Exdh_zpIeqOt__zJo3sw,746
205
+ telegrinder/types/__init__.py,sha256=TxcjDjnwSlP_vi9sdG020QjS_YOwgwscVltzu60FTYo,8263
206
+ telegrinder/types/enums.py,sha256=BRDMdQqfF6xaiGIM9dL8_Yq7nXPvZwSFl99S6oZOtI8,21390
207
+ telegrinder/types/input_file.py,sha256=Y3XzgAQEMZwUja-jifUleHlORk_1xAMyHxLtq3UE_Ss,1439
208
+ telegrinder/types/methods.py,sha256=wMsO3UHRe6uarHu1wAV_b4jMaml5ZBCiidGJrEPq9g4,271417
209
+ telegrinder/types/methods_utils.py,sha256=v1YZxJQE8dPNXQlcgCu4V1aN7TDPcif5AWxp2vvUYCg,1730
210
+ telegrinder/types/objects.py,sha256=6LP_qvSjmxiAhpKgOG0-TTO6EWOb7Jb1SmmREToujm4,352781
211
+ telegrinder/types/webapp.py,sha256=VSYXaz7Cii3eVwG2GUIgApUmgfHJ-flLRy7ua7jX4GU,6143
212
+ telegrinder-1.0.0rc1.dist-info/METADATA,sha256=sHme5dHdsYoABA_BFMRAcJiMHtmtGZUTXGa2rXbxhkQ,8079
213
+ telegrinder-1.0.0rc1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
214
+ telegrinder-1.0.0rc1.dist-info/licenses/LICENSE,sha256=600GDWRYmQjnImAbM_UucVu6QC_jdiCKaQdCqa60l9s,1090
215
+ telegrinder-1.0.0rc1.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.28.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2022 timoniq
4
+ Copyright (c) 2024 luwqz1
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in all
14
+ copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ SOFTWARE.