telegrinder 0.1.dev19__py3-none-any.whl → 0.1.dev158__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.

Potentially problematic release.


This version of telegrinder might be problematic. Click here for more details.

Files changed (136) hide show
  1. telegrinder/__init__.py +129 -22
  2. telegrinder/api/__init__.py +11 -2
  3. telegrinder/api/abc.py +25 -9
  4. telegrinder/api/api.py +29 -24
  5. telegrinder/api/error.py +14 -4
  6. telegrinder/api/response.py +11 -7
  7. telegrinder/bot/__init__.py +68 -7
  8. telegrinder/bot/bot.py +30 -24
  9. telegrinder/bot/cute_types/__init__.py +11 -1
  10. telegrinder/bot/cute_types/base.py +47 -0
  11. telegrinder/bot/cute_types/callback_query.py +64 -14
  12. telegrinder/bot/cute_types/inline_query.py +22 -16
  13. telegrinder/bot/cute_types/message.py +163 -43
  14. telegrinder/bot/cute_types/update.py +23 -0
  15. telegrinder/bot/dispatch/__init__.py +56 -3
  16. telegrinder/bot/dispatch/abc.py +9 -7
  17. telegrinder/bot/dispatch/composition.py +74 -0
  18. telegrinder/bot/dispatch/context.py +71 -0
  19. telegrinder/bot/dispatch/dispatch.py +86 -49
  20. telegrinder/bot/dispatch/handler/__init__.py +3 -0
  21. telegrinder/bot/dispatch/handler/abc.py +11 -5
  22. telegrinder/bot/dispatch/handler/func.py +41 -32
  23. telegrinder/bot/dispatch/handler/message_reply.py +46 -0
  24. telegrinder/bot/dispatch/middleware/__init__.py +2 -0
  25. telegrinder/bot/dispatch/middleware/abc.py +10 -4
  26. telegrinder/bot/dispatch/process.py +53 -49
  27. telegrinder/bot/dispatch/return_manager/__init__.py +19 -0
  28. telegrinder/bot/dispatch/return_manager/abc.py +95 -0
  29. telegrinder/bot/dispatch/return_manager/callback_query.py +19 -0
  30. telegrinder/bot/dispatch/return_manager/inline_query.py +14 -0
  31. telegrinder/bot/dispatch/return_manager/message.py +25 -0
  32. telegrinder/bot/dispatch/view/__init__.py +14 -2
  33. telegrinder/bot/dispatch/view/abc.py +121 -2
  34. telegrinder/bot/dispatch/view/box.py +38 -0
  35. telegrinder/bot/dispatch/view/callback_query.py +13 -38
  36. telegrinder/bot/dispatch/view/inline_query.py +11 -38
  37. telegrinder/bot/dispatch/view/message.py +11 -46
  38. telegrinder/bot/dispatch/waiter_machine/__init__.py +9 -0
  39. telegrinder/bot/dispatch/waiter_machine/machine.py +116 -0
  40. telegrinder/bot/dispatch/waiter_machine/middleware.py +76 -0
  41. telegrinder/bot/dispatch/waiter_machine/short_state.py +37 -0
  42. telegrinder/bot/polling/__init__.py +2 -0
  43. telegrinder/bot/polling/abc.py +11 -4
  44. telegrinder/bot/polling/polling.py +89 -40
  45. telegrinder/bot/rules/__init__.py +92 -5
  46. telegrinder/bot/rules/abc.py +81 -63
  47. telegrinder/bot/rules/adapter/__init__.py +11 -0
  48. telegrinder/bot/rules/adapter/abc.py +21 -0
  49. telegrinder/bot/rules/adapter/errors.py +5 -0
  50. telegrinder/bot/rules/adapter/event.py +43 -0
  51. telegrinder/bot/rules/adapter/raw_update.py +24 -0
  52. telegrinder/bot/rules/callback_data.py +159 -38
  53. telegrinder/bot/rules/command.py +116 -0
  54. telegrinder/bot/rules/enum_text.py +28 -0
  55. telegrinder/bot/rules/func.py +17 -17
  56. telegrinder/bot/rules/fuzzy.py +13 -10
  57. telegrinder/bot/rules/inline.py +61 -0
  58. telegrinder/bot/rules/integer.py +12 -7
  59. telegrinder/bot/rules/is_from.py +148 -7
  60. telegrinder/bot/rules/markup.py +21 -18
  61. telegrinder/bot/rules/mention.py +17 -0
  62. telegrinder/bot/rules/message_entities.py +33 -0
  63. telegrinder/bot/rules/regex.py +27 -19
  64. telegrinder/bot/rules/rule_enum.py +74 -0
  65. telegrinder/bot/rules/start.py +42 -0
  66. telegrinder/bot/rules/text.py +23 -14
  67. telegrinder/bot/scenario/__init__.py +2 -0
  68. telegrinder/bot/scenario/abc.py +12 -5
  69. telegrinder/bot/scenario/checkbox.py +48 -30
  70. telegrinder/bot/scenario/choice.py +16 -10
  71. telegrinder/client/__init__.py +2 -0
  72. telegrinder/client/abc.py +8 -21
  73. telegrinder/client/aiohttp.py +30 -21
  74. telegrinder/model.py +68 -37
  75. telegrinder/modules.py +189 -21
  76. telegrinder/msgspec_json.py +14 -0
  77. telegrinder/msgspec_utils.py +207 -0
  78. telegrinder/node/__init__.py +31 -0
  79. telegrinder/node/attachment.py +71 -0
  80. telegrinder/node/base.py +93 -0
  81. telegrinder/node/composer.py +71 -0
  82. telegrinder/node/container.py +22 -0
  83. telegrinder/node/message.py +18 -0
  84. telegrinder/node/rule.py +56 -0
  85. telegrinder/node/source.py +31 -0
  86. telegrinder/node/text.py +13 -0
  87. telegrinder/node/tools/__init__.py +3 -0
  88. telegrinder/node/tools/generator.py +40 -0
  89. telegrinder/node/update.py +12 -0
  90. telegrinder/rules.py +1 -1
  91. telegrinder/tools/__init__.py +165 -4
  92. telegrinder/tools/buttons.py +75 -51
  93. telegrinder/tools/error_handler/__init__.py +8 -0
  94. telegrinder/tools/error_handler/abc.py +30 -0
  95. telegrinder/tools/error_handler/error_handler.py +156 -0
  96. telegrinder/tools/formatting/__init__.py +81 -3
  97. telegrinder/tools/formatting/html.py +283 -37
  98. telegrinder/tools/formatting/links.py +32 -0
  99. telegrinder/tools/formatting/spec_html_formats.py +121 -0
  100. telegrinder/tools/global_context/__init__.py +12 -0
  101. telegrinder/tools/global_context/abc.py +66 -0
  102. telegrinder/tools/global_context/global_context.py +451 -0
  103. telegrinder/tools/global_context/telegrinder_ctx.py +25 -0
  104. telegrinder/tools/i18n/__init__.py +12 -0
  105. telegrinder/tools/i18n/base.py +31 -0
  106. telegrinder/tools/i18n/middleware/__init__.py +3 -0
  107. telegrinder/tools/i18n/middleware/base.py +26 -0
  108. telegrinder/tools/i18n/simple.py +48 -0
  109. telegrinder/tools/inline_query.py +684 -0
  110. telegrinder/tools/kb_set/__init__.py +2 -0
  111. telegrinder/tools/kb_set/base.py +3 -0
  112. telegrinder/tools/kb_set/yaml.py +28 -17
  113. telegrinder/tools/keyboard.py +84 -62
  114. telegrinder/tools/loop_wrapper/__init__.py +4 -0
  115. telegrinder/tools/loop_wrapper/abc.py +18 -0
  116. telegrinder/tools/loop_wrapper/loop_wrapper.py +132 -0
  117. telegrinder/tools/magic.py +48 -23
  118. telegrinder/tools/parse_mode.py +1 -2
  119. telegrinder/types/__init__.py +1 -0
  120. telegrinder/types/enums.py +651 -0
  121. telegrinder/types/methods.py +3933 -1128
  122. telegrinder/types/objects.py +4755 -1633
  123. {telegrinder-0.1.dev19.dist-info → telegrinder-0.1.dev158.dist-info}/LICENSE +2 -1
  124. telegrinder-0.1.dev158.dist-info/METADATA +108 -0
  125. telegrinder-0.1.dev158.dist-info/RECORD +126 -0
  126. {telegrinder-0.1.dev19.dist-info → telegrinder-0.1.dev158.dist-info}/WHEEL +1 -1
  127. telegrinder/bot/dispatch/waiter.py +0 -37
  128. telegrinder/result.py +0 -38
  129. telegrinder/tools/formatting/abc.py +0 -52
  130. telegrinder/tools/formatting/markdown.py +0 -57
  131. telegrinder/typegen/__init__.py +0 -1
  132. telegrinder/typegen/__main__.py +0 -3
  133. telegrinder/typegen/nicification.py +0 -20
  134. telegrinder/typegen/schema_generator.py +0 -259
  135. telegrinder-0.1.dev19.dist-info/METADATA +0 -22
  136. telegrinder-0.1.dev19.dist-info/RECORD +0 -74
@@ -1,259 +0,0 @@
1
- import logging
2
- import os
3
- import re
4
- import typing
5
- import pathlib
6
-
7
- import requests
8
-
9
- URL = "https://ark0f.github.io/tg-bot-api/openapi.json"
10
- TYPES = {
11
- "integer": "int",
12
- "string": "str",
13
- "long": "int",
14
- "bytes": "bytes",
15
- "boolean": "bool",
16
- "number": "float",
17
- "true": "bool",
18
- "false": "bool",
19
- }
20
- SPACES = " "
21
- NS = pathlib.Path("./nicification.py").read_text()
22
-
23
-
24
- def find_nicifications(name: str) -> typing.List[str]:
25
- regex = r"class .+\(" + name + r"\):\n((?:.|\n {4}|\n$)+)"
26
- matches = list(re.finditer(regex, NS, flags=re.MULTILINE))
27
- if matches:
28
- return [match.group(1) for match in matches]
29
- return []
30
-
31
-
32
- def convert_optional(func):
33
- def wrapper(name: str, d: dict, obj: dict, forward_ref: bool = True):
34
- t = func(name, d, obj, forward_ref)
35
- if name not in obj.get("required", []) and name:
36
- t = "typing.Optional[" + t + "]"
37
- return t
38
-
39
- return wrapper
40
-
41
-
42
- def chunks_str(s: str) -> str:
43
- words = s.split(" ")
44
- s = ""
45
- line = 0
46
- for word in words:
47
- s += word + " "
48
- line += len(word)
49
- if line >= 60:
50
- s += "\n"
51
- line = 0
52
- return s
53
-
54
-
55
- @convert_optional
56
- def convert_type(name: str, d: dict, obj: dict, forward_ref: bool = True) -> str:
57
- if "type" in d:
58
- t = d["type"]
59
- if t in TYPES:
60
- return TYPES[t]
61
- elif t == "array":
62
- nt = convert_type("", d["items"], obj, forward_ref)
63
- return "typing.List[" + nt + "]"
64
- else:
65
- if "." in t:
66
- t = t.split(".")[-1]
67
- return repr(t)
68
- elif "$ref" in d:
69
- n = d["$ref"].split("/")[-1]
70
- if forward_ref:
71
- return '"' + n + '"'
72
- else:
73
- return n
74
- elif "anyOf" in d:
75
- return (
76
- "typing.Union["
77
- + ", ".join(convert_type("", ut, obj, forward_ref) for ut in d["anyOf"])
78
- + "]"
79
- )
80
- else:
81
- logging.error(f"cannot handle {d}")
82
-
83
-
84
- def to_snakecase(s: str) -> str:
85
- ns = ""
86
- for i, symbol in enumerate(s):
87
- if i == 0:
88
- ns = ns + symbol.lower()
89
- else:
90
- ns = ns + (symbol if symbol.islower() else "_" + symbol.lower())
91
- return ns.replace("__", "_")
92
-
93
-
94
- def param_s(name: str, param: dict, obj: dict) -> str:
95
- t = convert_type(name, param, obj)
96
- s = "{}: {}{}\n".format(
97
- name if name not in ("json", "from") else name + "_",
98
- t,
99
- " = " + repr(param.get("default", None))
100
- if t.startswith("typing.Optional")
101
- else "",
102
- )
103
- return s
104
-
105
-
106
- def get_lines_for_object(name: str, properties: dict, obj: dict):
107
- if not properties:
108
- if name == "InputFile":
109
- return (
110
- "\n\n"
111
- + name
112
- + ' = typing.NamedTuple("InputFile", [("filename", str), ("data", bytes)])\n'
113
- )
114
- else:
115
- print("todo: handle {}".format(name))
116
-
117
- nicifications = find_nicifications(name)
118
- desc = ""
119
- if "description" in obj:
120
- d = obj["description"]
121
- # d = re.sub(r"\[(.+)]\(.+telegram.org/blog/(.+)\)", r"\1", d)
122
- d = chunks_str(d)
123
- d = d.replace("\\", "").replace("\n", SPACES + "\n")
124
- if "externalDocs" in obj:
125
- d += "\nDocs: {}".format(obj["externalDocs"]["url"])
126
- desc = SPACES + '"""' + d + '"""\n'
127
-
128
- return [
129
- "\n\n",
130
- "class {}(Model):\n".format(name),
131
- desc,
132
- # SPACES + "\"\"\"{}\"\"\"".format(obj["documentation"]),
133
- *(
134
- [SPACES + "pass\n"]
135
- if not properties
136
- else (
137
- SPACES + param_s(name, param, obj)
138
- for (name, param) in properties.items()
139
- if name != "flags"
140
- )
141
- ),
142
- *nicifications,
143
- ]
144
-
145
-
146
- def parse_response(rt: str):
147
- if rt.startswith('"'):
148
- rt = rt[1:-1]
149
- return f"return full_result(result, {rt})"
150
-
151
-
152
- def get_ref_names(ref_list: typing.List[dict]) -> typing.List[str]:
153
- return [d["$ref"].split("/")[-1] for d in ref_list]
154
-
155
-
156
- def generate(path: str, schema_url: str = URL) -> None:
157
- if not os.path.exists(path):
158
- os.makedirs(path)
159
-
160
- schema = requests.get(schema_url).json()
161
-
162
- paths = schema["paths"]
163
- objects = schema["components"]["schemas"]
164
-
165
- with open(path + "/__init__.py", "w") as file:
166
- file.writelines("from telegrinder.types.objects import *\n")
167
-
168
- with open(path + "/objects.py", "w") as file:
169
- file.writelines(["import typing\n", "from telegrinder.model import *\n"])
170
-
171
- for name, obj in objects.items():
172
- t, properties = obj.get("type", "object"), obj.get("properties", [])
173
-
174
- with open(path + "/objects.py", "a") as file:
175
- if obj.get("anyOf"):
176
- # creating merge to parse as fast as possible
177
- ref_names = get_ref_names(obj["anyOf"])
178
- merged_properties = {}
179
- for ref_name in ref_names:
180
- ref = objects[ref_name]
181
- merged_properties.update(ref["properties"])
182
- properties = merged_properties
183
- obj_lines = get_lines_for_object(name, properties, obj)
184
- file.writelines(obj_lines)
185
-
186
- # with open(path + "/objects.py", "a") as file:
187
- # file.writelines(
188
- # [
189
- # "\n\n",
190
- # "for v in locals().copy().values():\n",
191
- # SPACES + "if inspect.isclass(v) and issubclass(v, Model):\n",
192
- # SPACES + SPACES + "v.update_forward_refs()",
193
- # "\n\n",
194
- # "__all__ = (\n",
195
- # ]
196
- # + [SPACES + repr(n) + ",\n" for n in objects]
197
- # + [")\n"]
198
- # )
199
-
200
- with open(path + "/methods.py", "w") as file:
201
- file.writelines(
202
- [
203
- "import typing\n",
204
- "from .objects import *\n",
205
- "from telegrinder.result import Result\n",
206
- "from telegrinder.api.error import APIError\n\n",
207
- "if typing.TYPE_CHECKING:\n",
208
- SPACES + "from telegrinder.api.abc import ABCAPI\n\n",
209
- 'X = typing.TypeVar("X")\n',
210
- "\n\n",
211
- "class APIMethods:\n",
212
- SPACES + 'def __init__(self, api: "ABCAPI"):\n',
213
- SPACES + SPACES + "self.api = api\n",
214
- ]
215
- )
216
-
217
- for ps in paths:
218
- method = paths[ps]
219
- if "requestBody" not in method["post"]:
220
- props = {}
221
- else:
222
- props = list(method["post"]["requestBody"]["content"].values())[-1][
223
- "schema"
224
- ]["properties"]
225
-
226
- lines = []
227
- method_name = ps[1:]
228
- fobj = list(method["post"]["responses"]["200"]["content"].values())[-1][
229
- "schema"
230
- ]
231
- result = fobj["properties"]["result"]
232
- response = convert_type("", result, {}, False)
233
- name = to_snakecase(method_name)
234
- lines.append(f"async def {name}(\n self,\n")
235
- for n, prop in props.items():
236
- t = convert_type("", prop, {}, False)
237
- lines.append(SPACES + f"{n}: typing.Optional[{t}] = None,\n")
238
- lines.append(SPACES + "**other\n")
239
- lines.append(f") -> Result[{response}, APIError]:\n")
240
- lines.extend(
241
- [
242
- SPACES + li
243
- for li in (
244
- "result = await self.api.request_raw({}, get_params(locals()))\n".format(
245
- '"' + method_name + '"'
246
- ),
247
- ("\n" + SPACES + SPACES).join(parse_response(response).split("\n"))
248
- + "\n",
249
- )
250
- ]
251
- )
252
- with open(path + "/methods.py", "a") as file:
253
- file.writelines(["\n\n"] + [SPACES + li for li in lines])
254
-
255
- print("generated.")
256
- try:
257
- os.system("black ../types")
258
- except:
259
- print("cant run black")
@@ -1,22 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: telegrinder
3
- Version: 0.1.dev19
4
- Summary: async telegram bot building
5
- License: MIT
6
- Author: timoniq
7
- Author-email: tesseradecades@mail.ru
8
- Requires-Python: >=3.8,<4.0
9
- Classifier: License :: OSI Approved :: MIT License
10
- Classifier: Programming Language :: Python :: 3
11
- Classifier: Programming Language :: Python :: 3.8
12
- Classifier: Programming Language :: Python :: 3.9
13
- Classifier: Programming Language :: Python :: 3.10
14
- Classifier: Programming Language :: Python :: 3.11
15
- Requires-Dist: PyYAML (>=6.0,<7.0)
16
- Requires-Dist: aiohttp (>=3.8.1,<4.0.0)
17
- Requires-Dist: certifi (>=2022.6.15,<2023.0.0)
18
- Requires-Dist: choicelib (>=0.1.5,<0.2.0)
19
- Requires-Dist: envparse (>=0.2.0,<0.3.0)
20
- Requires-Dist: msgspec (>=0.9.0,<0.10.0)
21
- Requires-Dist: requests (>=2.28.1,<3.0.0)
22
- Requires-Dist: vbml (>=1.1.post1,<2.0)
@@ -1,74 +0,0 @@
1
- telegrinder/__init__.py,sha256=rb93CGVNscnwhhiWAkFbK7FtJ5JYLGprOkI0FiJo_70,740
2
- telegrinder/api/__init__.py,sha256=3ud8t2bfULV25IILu3CYYxr2_caa5B7We_l2tft_IOM,124
3
- telegrinder/api/abc.py,sha256=oxNx2PSlL6hkPuXet_rw_TJGOrbdS57h4Rq7DN_L5NM,1085
4
- telegrinder/api/api.py,sha256=LvR3_1zKKDQEClbmHUww3Jx1_Yar0qjmf6gU1r5WsXQ,1993
5
- telegrinder/api/error.py,sha256=Aca9HkvHI7hitHCd9_FObzeF5iGxLkGGYtfIoIpOQaY,162
6
- telegrinder/api/response.py,sha256=sna3gCo9T9ck5rugN7ptTFUwimrDAejb42DvbL9NNTA,463
7
- telegrinder/bot/__init__.py,sha256=BK31L1pLKg6p3T8G0ZkOtCUEeYELpOfEKLVHIS6bHLk,405
8
- telegrinder/bot/bot.py,sha256=lY7dXHLOgY3Z2Mi4RKD94RW0DpbLorilmUfYJYtDhFU,1802
9
- telegrinder/bot/cute_types/__init__.py,sha256=s0otW5gfNLBYKFgvInymzdu-BE_RwZO77vpEMXx1ICA,121
10
- telegrinder/bot/cute_types/callback_query.py,sha256=MiLutMHNgoTAF11orr1N6b2g95NmvlaUnRfc_4ORviQ,766
11
- telegrinder/bot/cute_types/inline_query.py,sha256=0jmCKIJM3Jerc65R81Fnm4VzFCyJk6v81VOZNSgvaw0,1034
12
- telegrinder/bot/cute_types/message.py,sha256=0_cv0WEK5b99Q45rId0nwQHEtMZ7dmWVa5T5al4RQNE,2545
13
- telegrinder/bot/dispatch/__init__.py,sha256=59KKzW9JFMVD03IeLCRgILHNPzDd0hv8sKxu-9qvrBA,240
14
- telegrinder/bot/dispatch/abc.py,sha256=A2pXBQhbR3SlKqI-efAgKT_9kZdKXbFRuFX3xKC6-tA,448
15
- telegrinder/bot/dispatch/dispatch.py,sha256=MPpKW0QcK-16PKf67hm6f7W1XdQcPUJEZ23V-OaxeOY,2931
16
- telegrinder/bot/dispatch/handler/__init__.py,sha256=CNqgXHxt4Lqkp-gKtehNQ83zamsjPozi_Q8p51OcQ_k,58
17
- telegrinder/bot/dispatch/handler/abc.py,sha256=cgzahm7YBZQ5HWdxDioF_iQoY4JFnWmxUppjNW7CXN0,411
18
- telegrinder/bot/dispatch/handler/func.py,sha256=RgrzXi1mr3I4C5CnFmgUGzeB1yICCtT769d0AI45CA8,1576
19
- telegrinder/bot/dispatch/middleware/__init__.py,sha256=X1zpKTP3llOu8xgZ8uWRIJOFJtEPFpKnE1V8lsPuWWE,31
20
- telegrinder/bot/dispatch/middleware/abc.py,sha256=UYvk2xPNde6FQUYY1MWh4EmNZNskUAkHZrg1qMf7W_w,268
21
- telegrinder/bot/dispatch/process.py,sha256=FJUs7rmjtuzgTYe7iocKwG8IBd8RX60lhal8j2KnOTs,2000
22
- telegrinder/bot/dispatch/view/__init__.py,sha256=6nhvURPwwhBYHLV_i8HdaXFvqu1pdrM_ltoIO-eiieA,146
23
- telegrinder/bot/dispatch/view/abc.py,sha256=pr-p1xzUJwGveI4T-0IgSxCXKHivV_-i4cAfqVlNCy4,389
24
- telegrinder/bot/dispatch/view/callback_query.py,sha256=2mr8UT6Pc-wtYuGZwYX8hYvm3-AR-wOaRReR1KwKwbA,1803
25
- telegrinder/bot/dispatch/view/inline_query.py,sha256=4-o-kUWkBCG4IddjF_8m0YBf1yw0t8ZIAiWtir7YVPE,1769
26
- telegrinder/bot/dispatch/view/message.py,sha256=ZITD-nS71eQ5mKCmPcMspABXThdkISU6a9zAsophfyg,2043
27
- telegrinder/bot/dispatch/waiter.py,sha256=HgIU3-v-NTR3V8EHrwg3EGbMX1KLHAb-fwQzF1Elvus,990
28
- telegrinder/bot/polling/__init__.py,sha256=aasMlIgjhwYcw1uhrWdMtZ8M9xHPwINv9fcHCR_lxnA,57
29
- telegrinder/bot/polling/abc.py,sha256=yvFNnk470gvbyWF9dfM1n53N990trUAyf8sbHuilrJg,401
30
- telegrinder/bot/polling/polling.py,sha256=MmOE7wzRJfGVzACanddq1KJj1ZdjXWi52EwWBeLvQc8,2040
31
- telegrinder/bot/rules/__init__.py,sha256=eOmxivOjPD1aEcEtu7wwjHaXc-OlF1yRhGSjv2ljYSo,428
32
- telegrinder/bot/rules/abc.py,sha256=WgLod1BluMoZdsXvEYOtyE0n7bIUd4eXZ1Ifnlwz9ug,3044
33
- telegrinder/bot/rules/callback_data.py,sha256=3OK0YihQwU2G018MSLSsrKI7Gu69LkI7V3CWG6Eh8Io,1763
34
- telegrinder/bot/rules/func.py,sha256=DM247BG0jBGJTrX4o7no_8__qFu5Ut1DtNu6YDeGRkA,859
35
- telegrinder/bot/rules/fuzzy.py,sha256=y4wXLAFslDDIfzuwWg1P1wOtsGR9C5_xFJ8U8aXHEbc,675
36
- telegrinder/bot/rules/integer.py,sha256=YSUAwZ3n5TaiLgXxZ3Wd5KaqTbjYbFwbJqDE_Yxo8vU,419
37
- telegrinder/bot/rules/is_from.py,sha256=heXO21MlI1IM0uxggX8sCIA_zjUYOf2qVqHpXjFIJm0,306
38
- telegrinder/bot/rules/markup.py,sha256=Hz1HZ_0LsKLjjpBJR-wocjE2dJmzbiVGTKf8d5-9OCg,1017
39
- telegrinder/bot/rules/regex.py,sha256=jJOqIcpk5MqXLymQdAB_C6SAy4j37xK0N5HamZ9uh2k,877
40
- telegrinder/bot/rules/text.py,sha256=feum_D04hxO2yqG0Wg5hBREj5B_2d1g0WM-OADNCJk4,759
41
- telegrinder/bot/scenario/__init__.py,sha256=tOl23Yss8cpzkbZfqJqJ6YGuh5PqL70hk8ZiY1MH0AY,93
42
- telegrinder/bot/scenario/abc.py,sha256=ad3VxvclZyEVuKKtunHKtxj9UiwNAmkyiC1JjOOUvS4,289
43
- telegrinder/bot/scenario/checkbox.py,sha256=m5EUMMOiuVL0l_CwSCRATfsPaH0BZiN8OEBbtX34nuQ,3586
44
- telegrinder/bot/scenario/choice.py,sha256=C5oK6R37pUGz2sZiyNcErdBnjJpRo3RUA7yowSFSr-k,1321
45
- telegrinder/client/__init__.py,sha256=YEx_WQAl9r07CE74xNyTUDOE2Da7K_A46jvC9U2zpyc,74
46
- telegrinder/client/abc.py,sha256=tPgTp2Gcs9mgd6cSeKZegMnUEIgg0puS7nt7cdrseIM,1305
47
- telegrinder/client/aiohttp.py,sha256=OZgGEPkwOeKveyTtQ8BxaEAZmXhS9XUodfswSFupgyk,3556
48
- telegrinder/model.py,sha256=hMLn50r_uvGOv4L597zcEQkBF4VrNw1K1T8LqvgV-WY,1538
49
- telegrinder/modules.py,sha256=ReQC1RXemqnRth7St4q9tBa-KZOYASjdsB9cYAAxheM,2286
50
- telegrinder/result.py,sha256=MfNCEHabXU5XEyD27K7Mh_EWgju11kec2HmpRZU08L8,904
51
- telegrinder/rules.py,sha256=O1cDQnG75wu7MULiih3gyKs7O07XQSPxvZRQVjHznLk,25
52
- telegrinder/tools/__init__.py,sha256=YLSR6IUUoLE9DAuwTKSj2S6ztHn_d_g76oicG4EAdKA,317
53
- telegrinder/tools/buttons.py,sha256=yWedpA-hFBCm1pcdwbA7jFm8zrTtQy-WDWrLsUq-OHg,1462
54
- telegrinder/tools/formatting/__init__.py,sha256=-Rd9rWkRYND3TV2oWmS88KuClV9MMbwMI9LVD_Xbe_g,102
55
- telegrinder/tools/formatting/abc.py,sha256=8sFL2h6hHGfSasnX5QvnPoH2NMLQeJa2MocVUATNGzE,958
56
- telegrinder/tools/formatting/html.py,sha256=ogLTY3PA-R02hh4yL-cMQ4glCNy2zfwsWyEO2wxwzNs,1606
57
- telegrinder/tools/formatting/markdown.py,sha256=UZQVD354ez1yFblwozha0Jl5YKtchB3CHSXIVu6Ek84,1833
58
- telegrinder/tools/kb_set/__init__.py,sha256=91sEn_9526CxNIuwopHeJD4k4iD0XxvLOFV7t5z_iEg,86
59
- telegrinder/tools/kb_set/base.py,sha256=Bp0cJGMVIqbBsmLeelBwZCBz-kicht4cwMN05kTNBO4,191
60
- telegrinder/tools/kb_set/yaml.py,sha256=xE9Ojjl21cHHAsp7JmmjYlRFYkJ9E_I85JxLT1GGqNQ,1830
61
- telegrinder/tools/keyboard.py,sha256=SZia2MxB832JMosT0NAs9TURBQYIN92fefVCgGP_LS4,3053
62
- telegrinder/tools/magic.py,sha256=r_ygCQFMiEi3-Yl6t3ujdcnI0Ptxd5WpkENZ6HL5rgA,1201
63
- telegrinder/tools/parse_mode.py,sha256=f51IlWqrdt-t-XEezceyWQKQ1noKamyyp92PxT-JPHQ,147
64
- telegrinder/typegen/__init__.py,sha256=FO3OYY109WQ2xvy2ZNTDkqabrw2C0v6zBUPGLXxrOwM,39
65
- telegrinder/typegen/__main__.py,sha256=d6uusZavfkzf7RUbb5QLTzYuyRHayYdQnqj0ooBGhVo,60
66
- telegrinder/typegen/nicification.py,sha256=ifp0mdGYWSPeesfrgPFRpv1rqOx3KnjjSeWk-Zr54_0,767
67
- telegrinder/typegen/schema_generator.py,sha256=H29yB5aiFSkwhf50w9ZycIfJNEKKrbZjDb07JULlxuY,7930
68
- telegrinder/types/__init__.py,sha256=RvjDKdmzKFNGZycud8Pn2y3VBtbWy2ZqZVDOJKYWsi8,40
69
- telegrinder/types/methods.py,sha256=zjsf6K0HQMengti907i8DlJY8Y2y4LJ8WW7_bNbanCQ,53104
70
- telegrinder/types/objects.py,sha256=yPQnMQYIRdXmFpBi_IJYlxjz9hZy3OF1-VGnRWvLcDE,77410
71
- telegrinder-0.1.dev19.dist-info/LICENSE,sha256=ZJrZvGo1MQqQN2M-pPrYlpSmquLFja0i6-liRLlbKGo,1063
72
- telegrinder-0.1.dev19.dist-info/METADATA,sha256=ZuFGSb1xOX7XKLJzjOHTi4FdAbx7cdCDWK0CN6BNFeE,818
73
- telegrinder-0.1.dev19.dist-info/WHEEL,sha256=kLuE8m1WYU0Ig0_YEGrXyTtiJvKPpLpDEiChiNyei5Y,88
74
- telegrinder-0.1.dev19.dist-info/RECORD,,