telegrinder 0.1.dev163__py3-none-any.whl → 0.1.dev165__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.
- telegrinder/__init__.py +36 -0
- telegrinder/bot/bot.py +9 -0
- telegrinder/bot/cute_types/message.py +1 -1
- telegrinder/bot/dispatch/abc.py +1 -1
- telegrinder/bot/dispatch/composition.py +15 -1
- telegrinder/bot/dispatch/context.py +8 -0
- telegrinder/bot/dispatch/dispatch.py +65 -28
- telegrinder/bot/dispatch/handler/abc.py +2 -4
- telegrinder/bot/dispatch/handler/func.py +31 -25
- telegrinder/bot/dispatch/handler/message_reply.py +21 -9
- telegrinder/bot/dispatch/middleware/abc.py +1 -1
- telegrinder/bot/dispatch/process.py +5 -3
- telegrinder/bot/dispatch/return_manager/abc.py +6 -0
- telegrinder/bot/dispatch/return_manager/callback_query.py +3 -1
- telegrinder/bot/dispatch/return_manager/inline_query.py +3 -1
- telegrinder/bot/dispatch/return_manager/message.py +9 -1
- telegrinder/bot/dispatch/view/abc.py +31 -5
- telegrinder/bot/dispatch/view/box.py +2 -1
- telegrinder/bot/dispatch/view/inline_query.py +1 -1
- telegrinder/bot/dispatch/view/message.py +1 -1
- telegrinder/bot/dispatch/waiter_machine/machine.py +14 -8
- telegrinder/bot/dispatch/waiter_machine/middleware.py +9 -7
- telegrinder/bot/dispatch/waiter_machine/short_state.py +17 -18
- telegrinder/bot/polling/polling.py +14 -0
- telegrinder/bot/rules/markup.py +1 -1
- telegrinder/bot/rules/text.py +1 -1
- telegrinder/bot/scenario/checkbox.py +16 -0
- telegrinder/model.py +10 -0
- telegrinder/msgspec_utils.py +13 -2
- telegrinder/node/base.py +1 -1
- telegrinder/node/composer.py +1 -1
- telegrinder/tools/__init__.py +2 -1
- telegrinder/tools/error_handler/abc.py +3 -3
- telegrinder/tools/error_handler/error_handler.py +21 -21
- telegrinder/tools/formatting/html.py +6 -12
- telegrinder/tools/formatting/links.py +12 -6
- telegrinder/tools/formatting/spec_html_formats.py +4 -5
- telegrinder/tools/global_context/global_context.py +2 -2
- telegrinder/tools/loop_wrapper/__init__.py +2 -2
- telegrinder/tools/loop_wrapper/abc.py +1 -4
- telegrinder/tools/loop_wrapper/loop_wrapper.py +79 -33
- telegrinder/verification_utils.py +31 -0
- {telegrinder-0.1.dev163.dist-info → telegrinder-0.1.dev165.dist-info}/METADATA +1 -1
- {telegrinder-0.1.dev163.dist-info → telegrinder-0.1.dev165.dist-info}/RECORD +46 -45
- {telegrinder-0.1.dev163.dist-info → telegrinder-0.1.dev165.dist-info}/WHEEL +1 -1
- {telegrinder-0.1.dev163.dist-info → telegrinder-0.1.dev165.dist-info}/LICENSE +0 -0
|
@@ -5,12 +5,33 @@ import typing
|
|
|
5
5
|
|
|
6
6
|
from telegrinder.modules import logger
|
|
7
7
|
|
|
8
|
-
from .abc import ABCLoopWrapper
|
|
8
|
+
from .abc import ABCLoopWrapper
|
|
9
|
+
|
|
10
|
+
T = typing.TypeVar("T")
|
|
11
|
+
P = typing.ParamSpec("P")
|
|
12
|
+
CoroFunc = typing.TypeVar("CoroFunc", bound="CoroutineFunc")
|
|
13
|
+
|
|
14
|
+
CoroutineTask: typing.TypeAlias = typing.Coroutine[typing.Any, typing.Any, T]
|
|
15
|
+
CoroutineFunc: typing.TypeAlias = typing.Callable[P, CoroutineTask[T]]
|
|
16
|
+
Task: typing.TypeAlias = typing.Union[CoroutineFunc, CoroutineTask, "DelayedTask"]
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def run_tasks(tasks: list[CoroutineTask[typing.Any]], loop: asyncio.AbstractEventLoop) -> None:
|
|
20
|
+
while len(tasks) != 0:
|
|
21
|
+
loop.run_until_complete(tasks.pop(0))
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def to_coroutine_task(task: Task) -> CoroutineTask:
|
|
25
|
+
if asyncio.iscoroutinefunction(task) or isinstance(task, DelayedTask):
|
|
26
|
+
task = task()
|
|
27
|
+
elif not asyncio.iscoroutine(task):
|
|
28
|
+
raise TypeError("Task should be coroutine or coroutine function.")
|
|
29
|
+
return task
|
|
9
30
|
|
|
10
31
|
|
|
11
32
|
@dataclasses.dataclass
|
|
12
|
-
class DelayedTask:
|
|
13
|
-
handler:
|
|
33
|
+
class DelayedTask(typing.Generic[CoroFunc]):
|
|
34
|
+
handler: CoroFunc
|
|
14
35
|
seconds: float
|
|
15
36
|
repeat: bool = dataclasses.field(default=False, kw_only=True)
|
|
16
37
|
_cancelled: bool = dataclasses.field(default=False, init=False, repr=False)
|
|
@@ -33,28 +54,59 @@ class DelayedTask:
|
|
|
33
54
|
self._cancelled = True
|
|
34
55
|
|
|
35
56
|
|
|
57
|
+
@dataclasses.dataclass(kw_only=True)
|
|
58
|
+
class Lifespan:
|
|
59
|
+
startup_tasks: list[CoroutineTask[typing.Any]] = dataclasses.field(default_factory=lambda: [])
|
|
60
|
+
shutdown_tasks: list[CoroutineTask[typing.Any]] = dataclasses.field(default_factory=lambda: [])
|
|
61
|
+
|
|
62
|
+
def on_startup(self, task_or_func: Task) -> Task:
|
|
63
|
+
task_or_func = to_coroutine_task(task_or_func)
|
|
64
|
+
self.startup_tasks.append(task_or_func)
|
|
65
|
+
return task_or_func
|
|
66
|
+
|
|
67
|
+
def on_shutdown(self, task_or_func: Task) -> Task:
|
|
68
|
+
task_or_func = to_coroutine_task(task_or_func)
|
|
69
|
+
self.shutdown_tasks.append(task_or_func)
|
|
70
|
+
return task_or_func
|
|
71
|
+
|
|
72
|
+
def start(self, loop: asyncio.AbstractEventLoop) -> None:
|
|
73
|
+
run_tasks(self.startup_tasks, loop)
|
|
74
|
+
|
|
75
|
+
def shutdown(self, loop: asyncio.AbstractEventLoop) -> None:
|
|
76
|
+
run_tasks(self.shutdown_tasks, loop)
|
|
77
|
+
|
|
78
|
+
|
|
36
79
|
class LoopWrapper(ABCLoopWrapper):
|
|
37
|
-
def __init__(
|
|
38
|
-
self
|
|
39
|
-
|
|
40
|
-
|
|
80
|
+
def __init__(
|
|
81
|
+
self,
|
|
82
|
+
*,
|
|
83
|
+
tasks: list[CoroutineTask[typing.Any]] | None = None,
|
|
84
|
+
lifespan: Lifespan | None = None,
|
|
85
|
+
) -> None:
|
|
86
|
+
self.tasks: list[CoroutineTask[typing.Any]] = tasks or []
|
|
87
|
+
self.lifespan = lifespan or Lifespan()
|
|
41
88
|
self._loop = asyncio.new_event_loop()
|
|
89
|
+
|
|
90
|
+
def __repr__(self) -> str:
|
|
91
|
+
return "<{}: loop={!r} with tasks={!r}, lifespan={!r}>".format(
|
|
92
|
+
self.__class__.__name__,
|
|
93
|
+
self._loop,
|
|
94
|
+
self.tasks,
|
|
95
|
+
self.lifespan,
|
|
96
|
+
)
|
|
42
97
|
|
|
43
98
|
def run_event_loop(self) -> None:
|
|
44
99
|
if not self.tasks:
|
|
45
100
|
logger.warning("You run loop with 0 tasks!")
|
|
46
101
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
for task in self.tasks:
|
|
50
|
-
self._loop.create_task(task)
|
|
51
|
-
|
|
52
|
-
self.tasks.clear()
|
|
102
|
+
self.lifespan.start(self._loop)
|
|
103
|
+
run_tasks(self.tasks, self._loop)
|
|
53
104
|
tasks = asyncio.all_tasks(self._loop)
|
|
105
|
+
|
|
54
106
|
try:
|
|
55
107
|
while tasks:
|
|
56
108
|
tasks_results, _ = self._loop.run_until_complete(
|
|
57
|
-
asyncio.wait(tasks, return_when=asyncio.FIRST_EXCEPTION)
|
|
109
|
+
asyncio.wait(tasks, return_when=asyncio.FIRST_EXCEPTION),
|
|
58
110
|
)
|
|
59
111
|
for task_result in tasks_results:
|
|
60
112
|
try:
|
|
@@ -64,19 +116,15 @@ class LoopWrapper(ABCLoopWrapper):
|
|
|
64
116
|
tasks = asyncio.all_tasks(self._loop)
|
|
65
117
|
except KeyboardInterrupt:
|
|
66
118
|
print() # blank print for ^C
|
|
67
|
-
logger.info("KeyboardInterrupt")
|
|
119
|
+
logger.info("Caught KeyboardInterrupt, cancellation...")
|
|
68
120
|
self.complete_tasks(tasks)
|
|
69
121
|
finally:
|
|
70
|
-
|
|
71
|
-
self._loop.run_until_complete(shutdown_task)
|
|
122
|
+
self.lifespan.shutdown(self._loop)
|
|
72
123
|
if self._loop.is_running():
|
|
73
124
|
self._loop.close()
|
|
74
125
|
|
|
75
|
-
def add_task(self, task:
|
|
76
|
-
|
|
77
|
-
task = task()
|
|
78
|
-
elif not asyncio.iscoroutine(task):
|
|
79
|
-
raise TypeError("Task should be coroutine or coroutine function.")
|
|
126
|
+
def add_task(self, task: Task) -> None:
|
|
127
|
+
task = to_coroutine_task(task)
|
|
80
128
|
|
|
81
129
|
if self._loop and self._loop.is_running():
|
|
82
130
|
self._loop.create_task(task)
|
|
@@ -97,15 +145,14 @@ class LoopWrapper(ABCLoopWrapper):
|
|
|
97
145
|
hours: int = 0,
|
|
98
146
|
minutes: int = 0,
|
|
99
147
|
seconds: float = 0,
|
|
100
|
-
)
|
|
148
|
+
):
|
|
101
149
|
seconds += minutes * 60
|
|
102
150
|
seconds += hours * 60 * 60
|
|
103
151
|
seconds += days * 24 * 60 * 60
|
|
104
152
|
|
|
105
|
-
def decorator(func:
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
return delayed_task
|
|
153
|
+
def decorator(func: CoroFunc) -> CoroFunc:
|
|
154
|
+
self.add_task(DelayedTask(func, seconds, repeat=False))
|
|
155
|
+
return func
|
|
109
156
|
|
|
110
157
|
return decorator
|
|
111
158
|
|
|
@@ -116,17 +163,16 @@ class LoopWrapper(ABCLoopWrapper):
|
|
|
116
163
|
hours: int = 0,
|
|
117
164
|
minutes: int = 0,
|
|
118
165
|
seconds: float = 0,
|
|
119
|
-
)
|
|
166
|
+
):
|
|
120
167
|
seconds += minutes * 60
|
|
121
168
|
seconds += hours * 60 * 60
|
|
122
169
|
seconds += days * 24 * 60 * 60
|
|
123
170
|
|
|
124
|
-
def decorator(func:
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
return delayed_task
|
|
171
|
+
def decorator(func: CoroFunc) -> CoroFunc:
|
|
172
|
+
self.add_task(DelayedTask(func, seconds, repeat=True))
|
|
173
|
+
return func
|
|
128
174
|
|
|
129
175
|
return decorator
|
|
130
176
|
|
|
131
177
|
|
|
132
|
-
__all__ = ("DelayedTask", "LoopWrapper")
|
|
178
|
+
__all__ = ("DelayedTask", "Lifespan", "LoopWrapper", "to_coroutine_task")
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import hashlib
|
|
2
|
+
import hmac
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
from telegrinder.api.abc import Token
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def verify_webapp_request(secret_token: str, request_headers: typing.Mapping[str, typing.Any]) -> bool:
|
|
9
|
+
"""Verifies update request is from telegram."""
|
|
10
|
+
|
|
11
|
+
return request_headers.get("X-Telegram-Bot-Api-Secret-Token") == secret_token
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def webapp_validate_request(
|
|
15
|
+
bot_token: Token,
|
|
16
|
+
request_query_params: typing.Mapping[str, typing.Any],
|
|
17
|
+
) -> bool:
|
|
18
|
+
"""Verifies authentity of webapp request by counting hash of its parameters."""
|
|
19
|
+
|
|
20
|
+
items = sorted(request_query_params.items(), key=lambda kv: kv[0])
|
|
21
|
+
data_check_string = "\n".join(f"{k}={param}" for k, param in items if k != "hash")
|
|
22
|
+
secret = hmac.new(
|
|
23
|
+
"WebAppData".encode(),
|
|
24
|
+
bot_token.encode(),
|
|
25
|
+
hashlib.sha256,
|
|
26
|
+
).digest()
|
|
27
|
+
data_chk = hmac.new(secret, data_check_string.encode(), hashlib.sha256)
|
|
28
|
+
return data_chk.hexdigest() == request_query_params.get("hash")
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
__all__ = ("verify_webapp_request", "webapp_validate_request")
|
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
telegrinder/__init__.py,sha256=
|
|
1
|
+
telegrinder/__init__.py,sha256=UWGzZrq4fnPTEiJr4lMBSK8gsnB4oV-v5YW7fOzTvKc,3593
|
|
2
2
|
telegrinder/api/__init__.py,sha256=pIDtnsL0NwT5PgVm43Gkp-ByOqDsqnD-oFDiC9tcPT4,246
|
|
3
3
|
telegrinder/api/abc.py,sha256=5pK6zqZtLphnOVAYwa8sT15F940gCQNzy53nyUTZWWQ,1803
|
|
4
4
|
telegrinder/api/api.py,sha256=6gq39odyNjyu58l7UrZKnOTMbgA5pR9nJ4ArAJFxNEY,2442
|
|
5
5
|
telegrinder/api/error.py,sha256=KjZ-14L3xY3KB0VvKktspnzRpkMBCmtwP-rg_hbohwM,425
|
|
6
6
|
telegrinder/api/response.py,sha256=d7Oxd5kOdbZNJiALkzkecHl8Y3K_BzCmsRq2Sn3otqA,491
|
|
7
7
|
telegrinder/bot/__init__.py,sha256=tLEUne5ftvKUVlkMAtPTO1_TSHkYJBbG73LuiBeC7gk,1560
|
|
8
|
-
telegrinder/bot/bot.py,sha256=
|
|
8
|
+
telegrinder/bot/bot.py,sha256=TLpdgIWEvjAooMOL1hsIkAsdRZFJiZvRErIxLJWqYCw,2472
|
|
9
9
|
telegrinder/bot/cute_types/__init__.py,sha256=HeuWq297lY209MssrEbj5MsxsGfOhwVLo1pH_-pHv_I,295
|
|
10
10
|
telegrinder/bot/cute_types/base.py,sha256=DDIJCCW-R6OxXp806aFSAdK88WSmzNPgUe1uzx6hgiI,4542
|
|
11
11
|
telegrinder/bot/cute_types/callback_query.py,sha256=gSohTLjq9IQimya41Vl6i8HvGSKwLzbkjV00Jgp13QY,20270
|
|
12
12
|
telegrinder/bot/cute_types/inline_query.py,sha256=QmaYkXSOQHrkWs7N6eD_HiTGGOtegN10hVppU37z3bE,2475
|
|
13
|
-
telegrinder/bot/cute_types/message.py,sha256=
|
|
13
|
+
telegrinder/bot/cute_types/message.py,sha256=lf5exKXqD0SzpJKGPj5y7umD0pq3qegUhANEKYjPlsA,140760
|
|
14
14
|
telegrinder/bot/cute_types/update.py,sha256=VakZ2FwapOJvpEBIyzuiT8eftHHzBS-uPXrAUROQxOg,752
|
|
15
15
|
telegrinder/bot/cute_types/utils.py,sha256=Gp7zHUn5gEfxFItIYbzkaj6wxWoPNe7hM9abHkn3Jug,16349
|
|
16
16
|
telegrinder/bot/dispatch/__init__.py,sha256=o10t98PY1BuIGaJcloxfbgUYp0bf5ZqAaBQScIaV3VQ,1322
|
|
17
|
-
telegrinder/bot/dispatch/abc.py,sha256=
|
|
18
|
-
telegrinder/bot/dispatch/composition.py,sha256=
|
|
19
|
-
telegrinder/bot/dispatch/context.py,sha256=
|
|
20
|
-
telegrinder/bot/dispatch/dispatch.py,sha256=
|
|
17
|
+
telegrinder/bot/dispatch/abc.py,sha256=YX184RfqSTMtxrt6qyNRu9uhlPHJLEJY3RKsLfBV7nw,462
|
|
18
|
+
telegrinder/bot/dispatch/composition.py,sha256=EcIgiFJm1v7y8uaumrvBl-43vl8pABbjYLdgVNp4M-s,2973
|
|
19
|
+
telegrinder/bot/dispatch/context.py,sha256=ozsL1oy5BGjXADzVT-qhe8YohMxc-ORQKfUaKNbYm-Q,2322
|
|
20
|
+
telegrinder/bot/dispatch/dispatch.py,sha256=NSPLNAUu2q2-73JXLPAatF5cej1ySZykeiHaQD4XFhE,5048
|
|
21
21
|
telegrinder/bot/dispatch/handler/__init__.py,sha256=mzchbArrm0eoTEeVKHYrtJX4WSfW5t6T4xDU3-mtYaA,169
|
|
22
|
-
telegrinder/bot/dispatch/handler/abc.py,sha256=
|
|
23
|
-
telegrinder/bot/dispatch/handler/func.py,sha256=
|
|
24
|
-
telegrinder/bot/dispatch/handler/message_reply.py,sha256=
|
|
22
|
+
telegrinder/bot/dispatch/handler/abc.py,sha256=Qi7MDVlUdvMZYqYis3HuSoSW6KF23q3nqfvQ8FM5sEw,569
|
|
23
|
+
telegrinder/bot/dispatch/handler/func.py,sha256=IvDWA3ybQUcxXBOeEwteKeIVKp9-Lj9EEfKf2IIVQ40,2369
|
|
24
|
+
telegrinder/bot/dispatch/handler/message_reply.py,sha256=rpBRDHuJ4PdCUKq0CtFWgs7jCS4PlcgYoPFr6QOYpgw,1827
|
|
25
25
|
telegrinder/bot/dispatch/middleware/__init__.py,sha256=qDuTt2ZZKX9UMjPdw5xaaNZdMI-i3P4Px2T8qbYCMJw,61
|
|
26
|
-
telegrinder/bot/dispatch/middleware/abc.py,sha256=
|
|
27
|
-
telegrinder/bot/dispatch/process.py,sha256=
|
|
26
|
+
telegrinder/bot/dispatch/middleware/abc.py,sha256=mF_G22pes-qJg6wqK9Tf71sduODXSyPjWyPT1hAiDo0,429
|
|
27
|
+
telegrinder/bot/dispatch/process.py,sha256=J9MYuP-soXXa0eFjJ-5wE_bNEFmr4SukJzdajDSTfAw,2313
|
|
28
28
|
telegrinder/bot/dispatch/return_manager/__init__.py,sha256=-4h9nU-vdyPgv7bqKi1fAlfzNOKTO9m9FtdTZOhrmuc,447
|
|
29
|
-
telegrinder/bot/dispatch/return_manager/abc.py,sha256=
|
|
30
|
-
telegrinder/bot/dispatch/return_manager/callback_query.py,sha256=
|
|
31
|
-
telegrinder/bot/dispatch/return_manager/inline_query.py,sha256
|
|
32
|
-
telegrinder/bot/dispatch/return_manager/message.py,sha256=
|
|
29
|
+
telegrinder/bot/dispatch/return_manager/abc.py,sha256=5EWmdQJExdHkbmpqK4ZBU3Uj-aCkfnTp9B94KRU7-40,3346
|
|
30
|
+
telegrinder/bot/dispatch/return_manager/callback_query.py,sha256=LIkXTGGyEnAHY-L_F82sbtzQtjvOHBi2GeL2eiWsEFc,656
|
|
31
|
+
telegrinder/bot/dispatch/return_manager/inline_query.py,sha256=-GRnPcdnNamtKL0IbbxCynyO3Dimk9Uz-_-wegfr1h4,484
|
|
32
|
+
telegrinder/bot/dispatch/return_manager/message.py,sha256=MNML9jGAAkmza1bwUOQVn9l2FmFqGHP4npub6TM_vqs,1139
|
|
33
33
|
telegrinder/bot/dispatch/view/__init__.py,sha256=iMReW_At2YzenjUGOgrVnOcHLVJAIQAfI9DdQElZdcM,379
|
|
34
|
-
telegrinder/bot/dispatch/view/abc.py,sha256=
|
|
35
|
-
telegrinder/bot/dispatch/view/box.py,sha256=
|
|
34
|
+
telegrinder/bot/dispatch/view/abc.py,sha256=E6fB_WRsX3y1i84_DwTYNhFyLUyOc0ougihvoxQSuFE,5564
|
|
35
|
+
telegrinder/bot/dispatch/view/box.py,sha256=rek4a2cxO6VTPRVXoz9KJsb0kU_rAYX2SlN-7LCZvsM,1252
|
|
36
36
|
telegrinder/bot/dispatch/view/callback_query.py,sha256=iL6DbB8ucXGvlv0w8eyMeZ94S1xz181pIn2yvYK1N_8,636
|
|
37
|
-
telegrinder/bot/dispatch/view/inline_query.py,sha256=
|
|
38
|
-
telegrinder/bot/dispatch/view/message.py,sha256=
|
|
37
|
+
telegrinder/bot/dispatch/view/inline_query.py,sha256=hRwrgfhgS5YF0E6eUrR8FuWVHUMlnA758kG7V049lkE,531
|
|
38
|
+
telegrinder/bot/dispatch/view/message.py,sha256=XX-_UmVf3_12-8I4TuH7utMRKxRcVKpWknXKhnGEx44,498
|
|
39
39
|
telegrinder/bot/dispatch/waiter_machine/__init__.py,sha256=RUuq-J1qZMeREL8omM8kxEfgAz3-7h3B9NhzSjLTMqA,190
|
|
40
|
-
telegrinder/bot/dispatch/waiter_machine/machine.py,sha256=
|
|
41
|
-
telegrinder/bot/dispatch/waiter_machine/middleware.py,sha256=
|
|
42
|
-
telegrinder/bot/dispatch/waiter_machine/short_state.py,sha256=
|
|
40
|
+
telegrinder/bot/dispatch/waiter_machine/machine.py,sha256=RHq0x6XOl7xcT3nZICIpkaDgVibiLLIEak_mYt5jnTw,3610
|
|
41
|
+
telegrinder/bot/dispatch/waiter_machine/middleware.py,sha256=6i_E2VPX71wYFnjESsUoCq1PaL4T6uaSXIWTgsTu874,2556
|
|
42
|
+
telegrinder/bot/dispatch/waiter_machine/short_state.py,sha256=2jYjr5RM2DknakcdbTc_xvH8FCrKKvDI8tsUwG0I5Hg,1200
|
|
43
43
|
telegrinder/bot/polling/__init__.py,sha256=OqfIFPS_V6UrCg-vCv9pkMFzTKdNbDP2faBfATs_TGg,94
|
|
44
44
|
telegrinder/bot/polling/abc.py,sha256=-5BpX55SJfDlEJWt15yOXWCizQRrgeY5oiA5eHkm1Nw,434
|
|
45
|
-
telegrinder/bot/polling/polling.py,sha256=
|
|
45
|
+
telegrinder/bot/polling/polling.py,sha256=IhtdF-_n77T9epntZuX6y25-pPZUkogxJelVYm308k8,4717
|
|
46
46
|
telegrinder/bot/rules/__init__.py,sha256=4jBfvj6-xLt7bpEPUOUlcG7it-HLrGMzLbDQ4gYwUNc,2119
|
|
47
47
|
telegrinder/bot/rules/abc.py,sha256=yqHIvvSuBTser6UCJgnVj1HHh7gfghzYaoV9hAFhfFM,3676
|
|
48
48
|
telegrinder/bot/rules/adapter/__init__.py,sha256=jFWpi3te8n-Ega3caCwLiA3iTW7F86brae0TZzH_BaU,231
|
|
@@ -58,28 +58,28 @@ telegrinder/bot/rules/fuzzy.py,sha256=ReweSKmql4a6AHFv2tXqCQoGktYpeezBLWvW_hS1YJ
|
|
|
58
58
|
telegrinder/bot/rules/inline.py,sha256=iN3BQr-TabRBItk0Gcy_YeqPhebnVmKgP1c_MEMpR_Q,1950
|
|
59
59
|
telegrinder/bot/rules/integer.py,sha256=iZWctQQbrUV5kIhv8GI-O3iYzeI2d0dUdQ8uCaLB9gQ,531
|
|
60
60
|
telegrinder/bot/rules/is_from.py,sha256=WdKAuU9tY9BaRt0997nCM4RKqw4jHjpSLlQIW4dgSWw,5263
|
|
61
|
-
telegrinder/bot/rules/markup.py,sha256=
|
|
61
|
+
telegrinder/bot/rules/markup.py,sha256=pqmuEhBpnZBVyLA-P2mqgfZ_MqACeu6mDNlYPAFcr8I,1110
|
|
62
62
|
telegrinder/bot/rules/mention.py,sha256=ozXV3awsrJhkFKrTvPEl1iyVkDs0GWMmuRSLSnSdOmo,493
|
|
63
63
|
telegrinder/bot/rules/message_entities.py,sha256=_lWHCNymbV1Sv-f2Q8Ca3SOxqIPSHVyVXgfYIBPy9dE,1096
|
|
64
64
|
telegrinder/bot/rules/regex.py,sha256=wqGEEiFqe5t_RwX9KjVCtg0wRZfwqo1ktGvNBo9JaKE,1191
|
|
65
65
|
telegrinder/bot/rules/rule_enum.py,sha256=BUd78f7fEa0hfu1Paa384_Q-r0lB-ZWWukqkrFXdn58,2083
|
|
66
66
|
telegrinder/bot/rules/start.py,sha256=5ok581Ww56g27rE4QkrykbBZ-ER-SnATQNzMGut2PHA,1183
|
|
67
|
-
telegrinder/bot/rules/text.py,sha256=
|
|
67
|
+
telegrinder/bot/rules/text.py,sha256=FUynYklF7VCFwOXj-cFCXWOA2N5Ul9BV9Wolbi5X72c,1158
|
|
68
68
|
telegrinder/bot/scenario/__init__.py,sha256=Ehe2uH-eQ-vRBPxIzdmE23B-FBOAa9YQyndmb6K8C5E,166
|
|
69
69
|
telegrinder/bot/scenario/abc.py,sha256=3AZYRjZlkbDtyFbsKdZ6BefzWYlJ0DOrGwh8jI3nzv4,474
|
|
70
|
-
telegrinder/bot/scenario/checkbox.py,sha256=
|
|
70
|
+
telegrinder/bot/scenario/checkbox.py,sha256=IIpC6F1JTtnH3D49R9xrXXrBd7A6klWzpDRCeBHwGg8,4202
|
|
71
71
|
telegrinder/bot/scenario/choice.py,sha256=-NYyzgfGI0njVuT-EY0j3jS4tPlsKOEkZaUagtns7dE,1442
|
|
72
72
|
telegrinder/client/__init__.py,sha256=ZiS1Wb_l_kv3FHzEEi1oXtFLwlA_HXmWOzeN0xA3E7Y,104
|
|
73
73
|
telegrinder/client/abc.py,sha256=OxsTX_PLYBEeFT9zpidFUzAbQL9BM7rQqru7zdn5DiQ,1611
|
|
74
74
|
telegrinder/client/aiohttp.py,sha256=RLhjWy-RGZ7848o75ASXBD9bqo06gaPfOv3d8QlyRYI,4147
|
|
75
|
-
telegrinder/model.py,sha256=
|
|
75
|
+
telegrinder/model.py,sha256=OpOiiW_KEi7lwhzIT0zmqgBO-LRyzaDOdoEgPFKuXck,4675
|
|
76
76
|
telegrinder/modules.py,sha256=wJM8C1MbciJE-T3iPmxNXpHEQxO1ln35eDv7joRDNwc,7977
|
|
77
77
|
telegrinder/msgspec_json.py,sha256=phfyhUvYYZUGEcI6RAyRx9lnARPK_Fqtw3Q0MEJnuUk,226
|
|
78
|
-
telegrinder/msgspec_utils.py,sha256=
|
|
78
|
+
telegrinder/msgspec_utils.py,sha256=BciLRVZh3IJHawFN3Hia-QC3SK587JhinULEigzPEtk,8213
|
|
79
79
|
telegrinder/node/__init__.py,sha256=01XTe8GPUBp5LXayDshihTxre7ejf99NYte20d08JLM,706
|
|
80
80
|
telegrinder/node/attachment.py,sha256=vMnD2tWQQQ6PFuXEIq2ZdL91xcBxiwlAkMkqJqseLlk,2587
|
|
81
|
-
telegrinder/node/base.py,sha256=
|
|
82
|
-
telegrinder/node/composer.py,sha256=
|
|
81
|
+
telegrinder/node/base.py,sha256=rEYPjLQ5EqahyIvH9ktlk_iOiym2NGK2wzh9akVIs6I,2220
|
|
82
|
+
telegrinder/node/composer.py,sha256=pGB41IzjLOJz909bVP72gzB9RZF_kqt18e1etqj_GeU,2240
|
|
83
83
|
telegrinder/node/container.py,sha256=sECP3TyC6AaNcJqKOfrL1T7-N8fkZzP2vB84kku6Jxg,636
|
|
84
84
|
telegrinder/node/message.py,sha256=2IW6DjF0KqH2_TZbZ-MXNsDioQRVPg9TUt86aQos0Kk,415
|
|
85
85
|
telegrinder/node/rule.py,sha256=VGmS4lJAFCoR0hCZSLn56fonMt0FhOGyZ1BQn_1vgeg,1724
|
|
@@ -89,19 +89,19 @@ telegrinder/node/tools/__init__.py,sha256=TI_o7MbS4DUOSkNNgJGLocXfRybPFv2WOhBty0
|
|
|
89
89
|
telegrinder/node/tools/generator.py,sha256=bc3kJSvS2TdIcBXkEbI4tpfhnvVe16m9ba5-WcIPy0c,1025
|
|
90
90
|
telegrinder/node/update.py,sha256=QD-m9soBgsP3voTbhaErWdE1FciwYyJCIFNDYf_zra0,253
|
|
91
91
|
telegrinder/rules.py,sha256=BFB8RFwKKxqs9HFfo_p0RfulQNonPZAX8cHpmnG7qCU,39
|
|
92
|
-
telegrinder/tools/__init__.py,sha256=
|
|
92
|
+
telegrinder/tools/__init__.py,sha256=9KScN5t8fuyjN2ERf20PRu4eLBwfVtfRyE6zsJmL08E,2904
|
|
93
93
|
telegrinder/tools/buttons.py,sha256=qMvtpawzkjdqopqE7o9C0k-no1dGJVy5gjFX4SiOE6A,2430
|
|
94
94
|
telegrinder/tools/error_handler/__init__.py,sha256=WmYWZCNhhSk32j4lIOltEwzoYUx086TGTbOF5h3Ps7s,207
|
|
95
|
-
telegrinder/tools/error_handler/abc.py,sha256=
|
|
95
|
+
telegrinder/tools/error_handler/abc.py,sha256=ymQGDXgnIkfjMMBsLeNcpekQ-p7lj9kSSTLFWqpZ8Ok,952
|
|
96
96
|
telegrinder/tools/error_handler/error.py,sha256=jVp3J4pMkkL20QHvDtlid9hKtAc66jZIcpsecB3-f98,188
|
|
97
|
-
telegrinder/tools/error_handler/error_handler.py,sha256=
|
|
97
|
+
telegrinder/tools/error_handler/error_handler.py,sha256=GpGNkEHZAv_4awk96tpJwcnm_YdI3MAfWVILS49jNQ4,5992
|
|
98
98
|
telegrinder/tools/formatting/__init__.py,sha256=_oxb-4y_vyIgALlO2rfaa-azqicySpHHIcaYBrVPdSg,1609
|
|
99
|
-
telegrinder/tools/formatting/html.py,sha256
|
|
100
|
-
telegrinder/tools/formatting/links.py,sha256=
|
|
101
|
-
telegrinder/tools/formatting/spec_html_formats.py,sha256=
|
|
99
|
+
telegrinder/tools/formatting/html.py,sha256=QxgCSmfuESnsIsg-UjRPBcBjWNT04j1xV_6G4z9FtR8,8580
|
|
100
|
+
telegrinder/tools/formatting/links.py,sha256=thRwOUBoJvg7iLUD1WMeV23V7T4XUj_J4EJgLcAOXts,1334
|
|
101
|
+
telegrinder/tools/formatting/spec_html_formats.py,sha256=gBsPlDCOEzPMPk_wUmmNEQUFxV8USHQgBuJOyE4y0EY,2747
|
|
102
102
|
telegrinder/tools/global_context/__init__.py,sha256=QcNZpVTS-ZsPGdF4BQ10wnrfr1fZ3jX9aI-6It0nQxE,282
|
|
103
103
|
telegrinder/tools/global_context/abc.py,sha256=twwAmbTk49KGl_POImr4yj6POr-zdx8mz74McuphZH0,1644
|
|
104
|
-
telegrinder/tools/global_context/global_context.py,sha256=
|
|
104
|
+
telegrinder/tools/global_context/global_context.py,sha256=XhrpRGYcW7I3Ke3D89ervSRZbMa6crkkiqeH8n9eqt0,13947
|
|
105
105
|
telegrinder/tools/global_context/telegrinder_ctx.py,sha256=g4iXYlK2IEi2sbJz1MqfBIDBrqF_4vznddjOUSEW8f8,651
|
|
106
106
|
telegrinder/tools/i18n/__init__.py,sha256=CLUoiCJzOZzF-dqDIHZ5Fc8QUa38cYhIG4WF-ctPLfE,288
|
|
107
107
|
telegrinder/tools/i18n/base.py,sha256=sJwgw6lobMIQEKIC4QH5O4sPKZADHAcxltZJvTtvaFE,637
|
|
@@ -112,16 +112,17 @@ telegrinder/tools/kb_set/__init__.py,sha256=k1KCQTnvEgJ2y4KlghhJWOh5rccwg_27cs82
|
|
|
112
112
|
telegrinder/tools/kb_set/base.py,sha256=mbZs-ViUErfSibzyN064IqZp76LBJPg3NB4D9v4VFtg,243
|
|
113
113
|
telegrinder/tools/kb_set/yaml.py,sha256=rDoVkdfxp3gz-pS82nB1LDQU8cyckErwMee4nCXHunI,2027
|
|
114
114
|
telegrinder/tools/keyboard.py,sha256=TZ5vVRQKbXrVqZNnok9jrbwNQYSaGpA41wsGHUNJkwo,3738
|
|
115
|
-
telegrinder/tools/loop_wrapper/__init__.py,sha256=
|
|
116
|
-
telegrinder/tools/loop_wrapper/abc.py,sha256=
|
|
117
|
-
telegrinder/tools/loop_wrapper/loop_wrapper.py,sha256=
|
|
115
|
+
telegrinder/tools/loop_wrapper/__init__.py,sha256=ZQ5jmE1lOKnqJlMZ9k2OYmjvOEhOlHPijUWqZ4nHIgk,165
|
|
116
|
+
telegrinder/tools/loop_wrapper/abc.py,sha256=ET_Dp-kRz75Jo1fZB3qofUgEXN4FqlU0xH2diESKGCM,266
|
|
117
|
+
telegrinder/tools/loop_wrapper/loop_wrapper.py,sha256=A-kO6F5KzQJXkLbxe-2Vex_TNTAgpUEawyZ6JLFao2A,5702
|
|
118
118
|
telegrinder/tools/magic.py,sha256=AA7jVv5NNOepWjv8rdPdUmeYj7_XfeCl3laYdRreZc0,1856
|
|
119
119
|
telegrinder/tools/parse_mode.py,sha256=JyQ-x9YAMPLhIIiUX01acyKkpWgs5TBA07W-iUyPHpE,92
|
|
120
120
|
telegrinder/types/__init__.py,sha256=pvPKWDXq9PBiIOCW8dFcJMqgr1kAqodPhwT-u8I4kug,78
|
|
121
121
|
telegrinder/types/enums.py,sha256=9ZYiz_KRP1o7jB5If6730YLDfLt_-wKVK8UFs5a6CVI,18330
|
|
122
122
|
telegrinder/types/methods.py,sha256=CbeuZgtH5IIH1cKZlMWVkTnNAFqQLOYLw-_DeWHKKhk,186385
|
|
123
123
|
telegrinder/types/objects.py,sha256=znpGLbPrFu5GCUf4j6p_XA7iCVaxYqUZN1UqBEpr5FY,214803
|
|
124
|
-
telegrinder
|
|
125
|
-
telegrinder-0.1.
|
|
126
|
-
telegrinder-0.1.
|
|
127
|
-
telegrinder-0.1.
|
|
124
|
+
telegrinder/verification_utils.py,sha256=zpQ_ZOJGj9Lix3gbWiHuVzIYg48jad5CqIaeu4QcfJQ,1017
|
|
125
|
+
telegrinder-0.1.dev165.dist-info/LICENSE,sha256=J9ngGsqHCNNjpm3xYPT7EnlzsnjhfqNXej5mJFjM6lw,1094
|
|
126
|
+
telegrinder-0.1.dev165.dist-info/METADATA,sha256=TePH1bhDDmVftka-P9VbCNVc5D6721ITDYM-7lWh68k,2892
|
|
127
|
+
telegrinder-0.1.dev165.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
128
|
+
telegrinder-0.1.dev165.dist-info/RECORD,,
|
|
File without changes
|