telegrinder 0.4.0__py3-none-any.whl → 0.4.2__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 +1 -1
- telegrinder/bot/cute_types/base.py +1 -1
- telegrinder/bot/dispatch/handler/func.py +1 -1
- telegrinder/bot/scenario/choice.py +1 -1
- telegrinder/msgspec_utils.py +2 -2
- telegrinder/node/polymorphic.py +2 -2
- telegrinder/tools/__init__.py +2 -2
- telegrinder/tools/adapter/event.py +1 -3
- telegrinder/tools/magic.py +76 -50
- {telegrinder-0.4.0.dist-info → telegrinder-0.4.2.dist-info}/METADATA +57 -50
- {telegrinder-0.4.0.dist-info → telegrinder-0.4.2.dist-info}/RECORD +32 -32
- {telegrinder-0.4.0.dist-info → telegrinder-0.4.2.dist-info}/WHEEL +1 -1
- {telegrinder-0.4.0.dist-info → telegrinder-0.4.2.dist-info/licenses}/LICENSE +0 -0
telegrinder/__init__.py
CHANGED
|
@@ -22,7 +22,7 @@ logger.set_level("INFO")
|
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
@bot.on.message(Text("/start"))
|
|
25
|
-
async def start(message: Message):
|
|
25
|
+
async def start(message: Message) -> None:
|
|
26
26
|
me = (await api.get_me()).unwrap()
|
|
27
27
|
await message.answer(f"Hello, {message.from_user.full_name}! I'm {me.full_name}.")
|
|
28
28
|
|
|
@@ -118,7 +118,7 @@ class FuncHandler(ABCHandler[Event], typing.Generic[Event, Function, ErrorHandle
|
|
|
118
118
|
try:
|
|
119
119
|
if event_param := self.get_name_event_param(event):
|
|
120
120
|
ctx = Context(**{event_param: event, **ctx})
|
|
121
|
-
return await self(**magic_bundle(self.function, ctx, start_idx=0))
|
|
121
|
+
return await self(**magic_bundle(self.function, ctx, start_idx=0, bundle_ctx=True))
|
|
122
122
|
except BaseException as exception:
|
|
123
123
|
return await self.error_handler.run(exception, event, api, ctx)
|
|
124
124
|
finally:
|
|
@@ -6,7 +6,6 @@ from telegrinder.bot.scenario.checkbox import Checkbox, ChoiceAction
|
|
|
6
6
|
|
|
7
7
|
if typing.TYPE_CHECKING:
|
|
8
8
|
from telegrinder.api.api import API
|
|
9
|
-
from telegrinder.bot.dispatch.view.base import BaseStateView
|
|
10
9
|
|
|
11
10
|
class Choice[Key: typing.Hashable](Checkbox[Key]):
|
|
12
11
|
async def wait(
|
|
@@ -16,6 +15,7 @@ if typing.TYPE_CHECKING:
|
|
|
16
15
|
) -> tuple[Key, int]: ...
|
|
17
16
|
|
|
18
17
|
else:
|
|
18
|
+
|
|
19
19
|
class Choice(Checkbox):
|
|
20
20
|
async def handle(self, cb):
|
|
21
21
|
code = cb.data.unwrap().replace(self.random_code + "/", "", 1)
|
telegrinder/msgspec_utils.py
CHANGED
|
@@ -261,7 +261,7 @@ class Decoder:
|
|
|
261
261
|
f"Unknown type `{repr_type(origin_type)}`. You can implement decode hook for this type."
|
|
262
262
|
)
|
|
263
263
|
dec_hook_func = self.dec_hooks[origin_type]
|
|
264
|
-
kwargs = magic_bundle(dec_hook_func, context or {}, start_idx=2
|
|
264
|
+
kwargs = magic_bundle(dec_hook_func, context or {}, start_idx=2)
|
|
265
265
|
return dec_hook_func(tp, obj, **kwargs)
|
|
266
266
|
|
|
267
267
|
return inner
|
|
@@ -400,7 +400,7 @@ class Encoder:
|
|
|
400
400
|
f"Not implemented encode hook for object of type `{repr_type(origin_type)}`.",
|
|
401
401
|
)
|
|
402
402
|
enc_hook_func = self.enc_hooks[origin_type]
|
|
403
|
-
kwargs = magic_bundle(enc_hook_func, context or {}, start_idx=1
|
|
403
|
+
kwargs = magic_bundle(enc_hook_func, context or {}, start_idx=1)
|
|
404
404
|
return enc_hook_func(obj, **kwargs)
|
|
405
405
|
|
|
406
406
|
return inner
|
telegrinder/node/polymorphic.py
CHANGED
|
@@ -10,7 +10,7 @@ from telegrinder.modules import logger
|
|
|
10
10
|
from telegrinder.node.base import ComposeError, Node, get_nodes
|
|
11
11
|
from telegrinder.node.composer import CONTEXT_STORE_NODES_KEY, NodeSession, compose_nodes
|
|
12
12
|
from telegrinder.node.scope import NodeScope
|
|
13
|
-
from telegrinder.tools.magic import
|
|
13
|
+
from telegrinder.tools.magic import get_polymorphic_implementations, impl, magic_bundle
|
|
14
14
|
from telegrinder.types.objects import Update
|
|
15
15
|
|
|
16
16
|
|
|
@@ -26,7 +26,7 @@ class Polymorphic(Node):
|
|
|
26
26
|
Update: raw_update,
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
for i, impl_ in enumerate(
|
|
29
|
+
for i, impl_ in enumerate(get_polymorphic_implementations(cls)):
|
|
30
30
|
logger.debug("Checking impl {!r}...", impl_.__name__)
|
|
31
31
|
node_collection = None
|
|
32
32
|
|
telegrinder/tools/__init__.py
CHANGED
|
@@ -95,7 +95,7 @@ from .magic import (
|
|
|
95
95
|
get_cached_translation,
|
|
96
96
|
get_default_args,
|
|
97
97
|
get_func_parameters,
|
|
98
|
-
|
|
98
|
+
get_polymorphic_implementations,
|
|
99
99
|
impl,
|
|
100
100
|
magic_bundle,
|
|
101
101
|
resolve_arg_names,
|
|
@@ -165,7 +165,7 @@ __all__ = (
|
|
|
165
165
|
"get_cached_translation",
|
|
166
166
|
"get_default_args",
|
|
167
167
|
"get_func_parameters",
|
|
168
|
-
"
|
|
168
|
+
"get_polymorphic_implementations",
|
|
169
169
|
"impl",
|
|
170
170
|
"italic",
|
|
171
171
|
"link",
|
|
@@ -22,9 +22,7 @@ class EventAdapter[ToEvent: BaseCute](ABCAdapter[Update, ToEvent]):
|
|
|
22
22
|
|
|
23
23
|
def __repr__(self) -> str:
|
|
24
24
|
raw_update_type = (
|
|
25
|
-
f"Update -> {self.event.__name__}"
|
|
26
|
-
if isinstance(self.event, type)
|
|
27
|
-
else f"Update.{self.event.value}" # type: ignore
|
|
25
|
+
f"Update -> {self.event.__name__}" if isinstance(self.event, type) else f"Update.{self.event.value}" # type: ignore
|
|
28
26
|
)
|
|
29
27
|
return "<{}: adapt {} -> {}>".format(
|
|
30
28
|
self.__class__.__name__,
|
telegrinder/tools/magic.py
CHANGED
|
@@ -4,11 +4,10 @@ import asyncio
|
|
|
4
4
|
import dataclasses
|
|
5
5
|
import enum
|
|
6
6
|
import inspect
|
|
7
|
-
import types
|
|
8
|
-
import typing
|
|
9
7
|
from collections import OrderedDict
|
|
10
8
|
from functools import wraps
|
|
11
9
|
|
|
10
|
+
import typing_extensions as typing
|
|
12
11
|
from fntypes import Result
|
|
13
12
|
|
|
14
13
|
from telegrinder.model import get_params
|
|
@@ -18,56 +17,67 @@ if typing.TYPE_CHECKING:
|
|
|
18
17
|
from telegrinder.node.polymorphic import Polymorphic
|
|
19
18
|
|
|
20
19
|
type Impl = type[classmethod]
|
|
21
|
-
type
|
|
22
|
-
|
|
20
|
+
type Function = typing.Callable[..., typing.Any]
|
|
23
21
|
type Executor[T] = typing.Callable[
|
|
24
22
|
[T, str, dict[str, typing.Any]],
|
|
25
23
|
typing.Awaitable[Result[typing.Any, typing.Any]],
|
|
26
24
|
]
|
|
27
25
|
|
|
28
26
|
TRANSLATIONS_KEY: typing.Final[str] = "_translations"
|
|
27
|
+
MORPH_IMPLEMENTATIONS_KEY = "__morph_implementations__"
|
|
29
28
|
IMPL_MARK: typing.Final[str] = "_is_impl"
|
|
29
|
+
CONTEXT_KEYS: typing.Final[tuple[str, ...]] = ("ctx", "context")
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class FuncParams(typing.TypedDict, total=True):
|
|
33
|
+
args: list[tuple[str, typing.Any | inspect.Parameter.empty]]
|
|
34
|
+
kwargs: list[tuple[str, typing.Any | inspect.Parameter.empty]]
|
|
35
|
+
var_args: typing.NotRequired[str]
|
|
36
|
+
var_kwargs: typing.NotRequired[str]
|
|
30
37
|
|
|
31
38
|
|
|
32
39
|
@dataclasses.dataclass(slots=True, frozen=True)
|
|
33
40
|
class Shortcut[T]:
|
|
34
41
|
method_name: str
|
|
35
42
|
executor: Executor[T] | None = dataclasses.field(default=None, kw_only=True)
|
|
36
|
-
custom_params: set[str] = dataclasses.field(default_factory=lambda: set(), kw_only=True)
|
|
43
|
+
custom_params: set[str] = dataclasses.field(default_factory=lambda: set[str](), kw_only=True)
|
|
37
44
|
|
|
38
45
|
|
|
39
46
|
def cache_magic_value(mark_key: str, /):
|
|
40
47
|
def inner[Func: typing.Callable[..., typing.Any]](func: Func) -> Func:
|
|
41
48
|
@wraps(func)
|
|
42
|
-
def wrapper(
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
49
|
+
def wrapper(
|
|
50
|
+
f: Function | None = None,
|
|
51
|
+
/,
|
|
52
|
+
*args: typing.Any,
|
|
53
|
+
**kwargs: typing.Any,
|
|
54
|
+
) -> typing.Any:
|
|
55
|
+
if f is not None and mark_key not in f.__dict__:
|
|
56
|
+
f.__dict__[mark_key] = func(f, *args, **kwargs)
|
|
57
|
+
return f.__dict__[mark_key]
|
|
46
58
|
|
|
47
59
|
return wrapper # type: ignore
|
|
48
60
|
|
|
49
61
|
return inner
|
|
50
62
|
|
|
51
63
|
|
|
52
|
-
def resolve_arg_names(func:
|
|
64
|
+
def resolve_arg_names(func: Function, start_idx: int = 1) -> tuple[str, ...]:
|
|
53
65
|
return func.__code__.co_varnames[start_idx : func.__code__.co_argcount]
|
|
54
66
|
|
|
55
67
|
|
|
56
|
-
@cache_magic_value("
|
|
57
|
-
def get_default_args(func:
|
|
58
|
-
kwdefaults = func.__kwdefaults__
|
|
59
|
-
if kwdefaults:
|
|
60
|
-
return kwdefaults
|
|
61
|
-
|
|
68
|
+
@cache_magic_value("__default_arguments__")
|
|
69
|
+
def get_default_args(func: Function, /) -> dict[str, typing.Any]:
|
|
62
70
|
defaults = func.__defaults__
|
|
71
|
+
kwdefaults = {} if not func.__kwdefaults__ else func.__kwdefaults__.copy()
|
|
63
72
|
if not defaults:
|
|
64
|
-
return
|
|
65
|
-
|
|
66
|
-
|
|
73
|
+
return kwdefaults
|
|
74
|
+
return {
|
|
75
|
+
k: defaults[i] for i, k in enumerate(resolve_arg_names(func, start_idx=0)[-len(defaults) :])
|
|
76
|
+
} | kwdefaults
|
|
67
77
|
|
|
68
78
|
|
|
69
|
-
@cache_magic_value("
|
|
70
|
-
def get_func_parameters(func:
|
|
79
|
+
@cache_magic_value("__function_parameters__")
|
|
80
|
+
def get_func_parameters(func: Function, /) -> FuncParams:
|
|
71
81
|
func_params: FuncParams = {"args": [], "kwargs": []}
|
|
72
82
|
|
|
73
83
|
for k, p in inspect.signature(func).parameters.items():
|
|
@@ -87,8 +97,8 @@ def get_func_parameters(func: FuncType, /) -> FuncParams:
|
|
|
87
97
|
return func_params
|
|
88
98
|
|
|
89
99
|
|
|
90
|
-
def get_annotations(func:
|
|
91
|
-
annotations = func.__annotations__
|
|
100
|
+
def get_annotations(func: Function, *, return_type: bool = False) -> dict[str, typing.Any]:
|
|
101
|
+
annotations = func.__annotations__.copy()
|
|
92
102
|
if not return_type:
|
|
93
103
|
annotations.pop("return", None)
|
|
94
104
|
return annotations
|
|
@@ -101,49 +111,66 @@ def to_str(s: str | enum.Enum) -> str:
|
|
|
101
111
|
|
|
102
112
|
|
|
103
113
|
@typing.overload
|
|
104
|
-
def magic_bundle(
|
|
114
|
+
def magic_bundle(
|
|
115
|
+
function: Function,
|
|
116
|
+
kw: dict[str, typing.Any],
|
|
117
|
+
*,
|
|
118
|
+
start_idx: int = 1,
|
|
119
|
+
omit_defaults: bool = False,
|
|
120
|
+
) -> dict[str, typing.Any]: ...
|
|
105
121
|
|
|
106
122
|
|
|
107
123
|
@typing.overload
|
|
108
|
-
def magic_bundle(
|
|
124
|
+
def magic_bundle(
|
|
125
|
+
function: Function,
|
|
126
|
+
kw: dict[enum.Enum, typing.Any],
|
|
127
|
+
*,
|
|
128
|
+
start_idx: int = 1,
|
|
129
|
+
omit_defaults: bool = False,
|
|
130
|
+
) -> dict[str, typing.Any]: ...
|
|
109
131
|
|
|
110
132
|
|
|
111
133
|
@typing.overload
|
|
112
134
|
def magic_bundle(
|
|
113
|
-
function:
|
|
135
|
+
function: Function,
|
|
114
136
|
kw: dict[str, typing.Any],
|
|
115
137
|
*,
|
|
116
138
|
start_idx: int = 1,
|
|
117
|
-
bundle_ctx: bool =
|
|
139
|
+
bundle_ctx: bool = False,
|
|
140
|
+
omit_defaults: bool = False,
|
|
118
141
|
) -> dict[str, typing.Any]: ...
|
|
119
142
|
|
|
120
143
|
|
|
121
144
|
@typing.overload
|
|
122
145
|
def magic_bundle(
|
|
123
|
-
function:
|
|
146
|
+
function: Function,
|
|
124
147
|
kw: dict[enum.Enum, typing.Any],
|
|
125
148
|
*,
|
|
126
149
|
start_idx: int = 1,
|
|
127
|
-
bundle_ctx: bool =
|
|
150
|
+
bundle_ctx: bool = False,
|
|
151
|
+
omit_defaults: bool = False,
|
|
128
152
|
) -> dict[str, typing.Any]: ...
|
|
129
153
|
|
|
130
154
|
|
|
131
155
|
@typing.overload
|
|
132
156
|
def magic_bundle(
|
|
133
|
-
function:
|
|
157
|
+
function: Function,
|
|
134
158
|
kw: dict[type[typing.Any], typing.Any],
|
|
135
159
|
*,
|
|
160
|
+
start_idx: int = 1,
|
|
136
161
|
typebundle: typing.Literal[True] = True,
|
|
162
|
+
omit_defaults: bool = False,
|
|
137
163
|
) -> dict[str, typing.Any]: ...
|
|
138
164
|
|
|
139
165
|
|
|
140
166
|
def magic_bundle(
|
|
141
|
-
function:
|
|
167
|
+
function: Function,
|
|
142
168
|
kw: dict[typing.Any, typing.Any],
|
|
143
169
|
*,
|
|
144
170
|
start_idx: int = 1,
|
|
145
|
-
bundle_ctx: bool =
|
|
171
|
+
bundle_ctx: bool = False,
|
|
146
172
|
typebundle: bool = False,
|
|
173
|
+
omit_defaults: bool = False,
|
|
147
174
|
) -> dict[str, typing.Any]:
|
|
148
175
|
# Bundle considering the function annotations
|
|
149
176
|
if typebundle:
|
|
@@ -154,10 +181,16 @@ def magic_bundle(
|
|
|
154
181
|
if "var_kwargs" in get_func_parameters(function) and not names:
|
|
155
182
|
return {to_str(k): v for k, v in kw.items()}
|
|
156
183
|
|
|
157
|
-
# Bundle considering the function parameters and defaults
|
|
158
|
-
|
|
159
|
-
if
|
|
160
|
-
|
|
184
|
+
# Bundle considering the function parameters and defaults (if do not omit defaults)
|
|
185
|
+
defaults = {} if omit_defaults else get_default_args(function)
|
|
186
|
+
args = defaults | {n: v for k, v in kw.items() if (n := to_str(k)) in names}
|
|
187
|
+
|
|
188
|
+
# Bundle a context if context key specified in `names`
|
|
189
|
+
if bundle_ctx:
|
|
190
|
+
for key in CONTEXT_KEYS:
|
|
191
|
+
if key in names:
|
|
192
|
+
args[key] = kw
|
|
193
|
+
break
|
|
161
194
|
|
|
162
195
|
return args
|
|
163
196
|
|
|
@@ -189,30 +222,23 @@ def impl(method: typing.Callable[..., typing.Any]):
|
|
|
189
222
|
return classmethod(method)
|
|
190
223
|
|
|
191
224
|
|
|
192
|
-
def
|
|
193
|
-
moprh_impls = getattr(cls,
|
|
225
|
+
def get_polymorphic_implementations(cls: type[Polymorphic], /) -> list[typing.Callable[..., typing.Any]]:
|
|
226
|
+
moprh_impls = getattr(cls, MORPH_IMPLEMENTATIONS_KEY, None)
|
|
194
227
|
if moprh_impls is not None:
|
|
195
228
|
return moprh_impls
|
|
196
229
|
|
|
197
230
|
impls = []
|
|
198
231
|
for cls_ in cls.mro():
|
|
199
232
|
impls += [
|
|
200
|
-
|
|
201
|
-
for
|
|
202
|
-
if isinstance(
|
|
233
|
+
obj.__func__
|
|
234
|
+
for obj in vars(cls_).values()
|
|
235
|
+
if isinstance(obj, classmethod) and getattr(obj.__func__, IMPL_MARK, False)
|
|
203
236
|
]
|
|
204
237
|
|
|
205
|
-
setattr(cls,
|
|
238
|
+
setattr(cls, MORPH_IMPLEMENTATIONS_KEY, impls)
|
|
206
239
|
return impls
|
|
207
240
|
|
|
208
241
|
|
|
209
|
-
class FuncParams(typing.TypedDict, total=True):
|
|
210
|
-
args: list[tuple[str, typing.Any | inspect.Parameter.empty]]
|
|
211
|
-
kwargs: list[tuple[str, typing.Any | inspect.Parameter.empty]]
|
|
212
|
-
var_args: typing.NotRequired[str]
|
|
213
|
-
var_kwargs: typing.NotRequired[str]
|
|
214
|
-
|
|
215
|
-
|
|
216
242
|
def shortcut[T](
|
|
217
243
|
method_name: str,
|
|
218
244
|
*,
|
|
@@ -308,7 +334,7 @@ __all__ = (
|
|
|
308
334
|
"get_default_args",
|
|
309
335
|
"get_default_args",
|
|
310
336
|
"get_func_parameters",
|
|
311
|
-
"
|
|
337
|
+
"get_polymorphic_implementations",
|
|
312
338
|
"impl",
|
|
313
339
|
"join_dicts",
|
|
314
340
|
"magic_bundle",
|
|
@@ -1,35 +1,36 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: telegrinder
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.2
|
|
4
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://telegrinder.readthedocs.io/en/latest/
|
|
8
|
+
Author-email: timoniq <tesseradecades@mail.ru>
|
|
9
|
+
Maintainer-email: luwqz1 <howluwqz1@gmail.com>
|
|
5
10
|
License: MIT License
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
Author-email: tesseradecades@mail.ru
|
|
30
|
-
Maintainer: luwqz1
|
|
31
|
-
Maintainer-email: howluwqz1@gmail.com
|
|
32
|
-
Requires-Python: >=3.12,<4.0
|
|
11
|
+
|
|
12
|
+
Copyright (c) 2022-2025 timoniq
|
|
13
|
+
Copyright (c) 2024-2025 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,composition,custom rules,framework,middleware,telegram,telegram bot api framework,telegrinder,telegrinder framework,waiter machine
|
|
33
34
|
Classifier: Environment :: Console
|
|
34
35
|
Classifier: Intended Audience :: Developers
|
|
35
36
|
Classifier: License :: OSI Approved :: MIT License
|
|
@@ -38,28 +39,25 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
38
39
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
39
40
|
Classifier: Topic :: Software Development :: Quality Assurance
|
|
40
41
|
Classifier: Typing :: Typed
|
|
42
|
+
Requires-Python: <4.0,>=3.12
|
|
43
|
+
Requires-Dist: aiohttp<4.0.0,>=3.11.14
|
|
44
|
+
Requires-Dist: certifi>=2025.1.31
|
|
45
|
+
Requires-Dist: choicelib<0.2.0,>=0.1.5
|
|
46
|
+
Requires-Dist: colorama<0.5.0,>=0.4.6
|
|
47
|
+
Requires-Dist: envparse<0.3.0,>=0.2.0
|
|
48
|
+
Requires-Dist: fntypes<0.2.0,>=0.1.4.post3
|
|
49
|
+
Requires-Dist: msgspec<0.20.0,>=0.19.0
|
|
50
|
+
Requires-Dist: typing-extensions<5.0.0,>=4.12.2
|
|
51
|
+
Requires-Dist: vbml<2.0,>=1.1.post1
|
|
41
52
|
Provides-Extra: all
|
|
53
|
+
Requires-Dist: loguru>=0.7.0; extra == 'all'
|
|
54
|
+
Requires-Dist: uvloop>=0.21.0; extra == 'all'
|
|
42
55
|
Provides-Extra: fast
|
|
56
|
+
Requires-Dist: uvloop>=0.21.0; extra == 'fast'
|
|
43
57
|
Provides-Extra: loguru
|
|
58
|
+
Requires-Dist: loguru>=0.7.0; extra == 'loguru'
|
|
44
59
|
Provides-Extra: uvloop
|
|
45
|
-
Requires-Dist:
|
|
46
|
-
Requires-Dist: certifi (>=2025.1.31)
|
|
47
|
-
Requires-Dist: choicelib (>=0.1.5,<0.2.0)
|
|
48
|
-
Requires-Dist: colorama (>=0.4.6,<0.5.0)
|
|
49
|
-
Requires-Dist: envparse (>=0.2.0,<0.3.0)
|
|
50
|
-
Requires-Dist: fntypes (>=0.1.4.post3,<0.2.0)
|
|
51
|
-
Requires-Dist: loguru (>=0.7.0) ; extra == "all"
|
|
52
|
-
Requires-Dist: loguru (>=0.7.0) ; extra == "loguru"
|
|
53
|
-
Requires-Dist: msgspec (>=0.19.0,<0.20.0)
|
|
54
|
-
Requires-Dist: pyyaml (>=6.0.2,<7.0.0)
|
|
55
|
-
Requires-Dist: typing-extensions (>=4.12.2,<5.0.0)
|
|
56
|
-
Requires-Dist: uvloop (>=0.21.0) ; extra == "all"
|
|
57
|
-
Requires-Dist: uvloop (>=0.21.0) ; extra == "fast"
|
|
58
|
-
Requires-Dist: uvloop (>=0.21.0) ; extra == "uvloop"
|
|
59
|
-
Requires-Dist: vbml (>=1.1.post1,<2.0)
|
|
60
|
-
Project-URL: Bug Tracker, https://github.com/timoniq/telegrinder/issues
|
|
61
|
-
Project-URL: Documentation, https://telegrinder.readthedocs.io/en/latest/
|
|
62
|
-
Project-URL: Source, https://github.com/timoniq/telegrinder
|
|
60
|
+
Requires-Dist: uvloop>=0.21.0; extra == 'uvloop'
|
|
63
61
|
Description-Content-Type: text/markdown
|
|
64
62
|
|
|
65
63
|
# Telegrinder
|
|
@@ -84,17 +82,26 @@ pip install telegrinder
|
|
|
84
82
|
```
|
|
85
83
|
|
|
86
84
|
Using poetry:
|
|
87
|
-
|
|
88
85
|
```console
|
|
89
86
|
poetry add telegrinder
|
|
90
87
|
```
|
|
91
88
|
|
|
89
|
+
Using uv:
|
|
90
|
+
|
|
91
|
+
```console
|
|
92
|
+
uv add telegrinder
|
|
93
|
+
```
|
|
94
|
+
|
|
92
95
|
Install from github:
|
|
93
96
|
|
|
94
97
|
```console
|
|
95
98
|
pip install -U https://github.com/timoniq/telegrinder/archive/dev.zip
|
|
96
99
|
```
|
|
97
100
|
|
|
101
|
+
```console
|
|
102
|
+
uv add "telegrinder @ git+https://github.com/timoniq/telegrinder.git@dev"
|
|
103
|
+
```
|
|
104
|
+
|
|
98
105
|
```console
|
|
99
106
|
poetry add git+https://github.com/timoniq/telegrinder.git#dev
|
|
100
107
|
```
|
|
@@ -112,7 +119,7 @@ logger.set_level("INFO")
|
|
|
112
119
|
|
|
113
120
|
|
|
114
121
|
@bot.on.message(Text("/start"))
|
|
115
|
-
async def start(message: Message):
|
|
122
|
+
async def start(message: Message) -> None:
|
|
116
123
|
me = (await api.get_me()).unwrap()
|
|
117
124
|
await message.answer(f"Hello, {message.from_user.full_name}! I'm {me.full_name}.")
|
|
118
125
|
|
|
@@ -138,7 +145,7 @@ Copyright © 2024-2025 [luwqz1](https://github.com/luwqz1)
|
|
|
138
145
|
|
|
139
146
|
# Contributors
|
|
140
147
|
|
|
148
|
+
|
|
141
149
|
<a href="https://github.com/timoniq/telegrinder/graphs/contributors">
|
|
142
150
|
<img src="https://contributors-img.web.app/image?repo=timoniq/telegrinder" />
|
|
143
151
|
</a>
|
|
144
|
-
|
|
@@ -1,4 +1,11 @@
|
|
|
1
|
-
telegrinder/__init__.py,sha256=
|
|
1
|
+
telegrinder/__init__.py,sha256=Gp0nHwVBqk024sFO40CVWgbtnKG2WYG-2czdlmO6zXA,5941
|
|
2
|
+
telegrinder/model.py,sha256=CrN2XOMG_rPFN5jF-QQeNGyepwT3DuBzWLm7oqIMajI,6106
|
|
3
|
+
telegrinder/modules.py,sha256=XcEIjz67xAKcYQfNVIm4VfidMa3M43iDcfUaX6QKFX8,7826
|
|
4
|
+
telegrinder/msgspec_json.py,sha256=eDuRTP_bFYWtNPDINuzY2OGKXbdleaKyXh2mQgfJdMk,237
|
|
5
|
+
telegrinder/msgspec_utils.py,sha256=PYs3-qQ0HoP4JzDg-8c0gC0ZIe-UmMkTHhOBnPWEIfQ,14303
|
|
6
|
+
telegrinder/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
|
+
telegrinder/rules.py,sha256=BFB8RFwKKxqs9HFfo_p0RfulQNonPZAX8cHpmnG7qCU,39
|
|
8
|
+
telegrinder/verification_utils.py,sha256=Tp-XEp5nu4ih67jbrgU5USSNRgzlILMrfKgfGENYBtg,985
|
|
2
9
|
telegrinder/api/__init__.py,sha256=RuqIF0RsCEGZth6Nc8_6lOYxr9e50Bx5OiR212U3XwU,264
|
|
3
10
|
telegrinder/api/api.py,sha256=DqeSvQcHKVbvkAv7o6r2wCVZM2fcox1DfKHiUWlgggY,3417
|
|
4
11
|
telegrinder/api/error.py,sha256=tYgJtqDakXO2ef_MvhTmNuWALktefpVlyJMfXM0Btg8,440
|
|
@@ -7,7 +14,7 @@ telegrinder/api/token.py,sha256=q2wP2GNy14LdNA3kHBJtSw3-bHZ0ADm_ASesbVWQXSE,951
|
|
|
7
14
|
telegrinder/bot/__init__.py,sha256=c8vMIjXEOZIuRccrxlRpcpbr-HzvMKxe6HrrIKlH8NM,2945
|
|
8
15
|
telegrinder/bot/bot.py,sha256=jx4ZJHBFSMCTUDgsv0fFocEr6Ti9foEnROB9sYTkyQY,3134
|
|
9
16
|
telegrinder/bot/cute_types/__init__.py,sha256=zytO2K8RuTjlhojRJlfApae9YSOu39GWsAwdffaok-I,746
|
|
10
|
-
telegrinder/bot/cute_types/base.py,sha256=
|
|
17
|
+
telegrinder/bot/cute_types/base.py,sha256=kkzYW4fntazqe3n3KH8aETgT-yAyVWW15agCWiQWDeI,6422
|
|
11
18
|
telegrinder/bot/cute_types/callback_query.py,sha256=vWnyO7dNJ_7EBYmVwurzDC606RS_99inwP9nK_6gGDo,19499
|
|
12
19
|
telegrinder/bot/cute_types/chat_join_request.py,sha256=LWs8Vta27czrZxFtKu8TkjVE4_n9s7H_OLk6r6tyJh4,2056
|
|
13
20
|
telegrinder/bot/cute_types/chat_member_updated.py,sha256=oVvQ12FSFSL9UC87r7fPuhDv0kOzk7LC8dvXZKKbVus,6251
|
|
@@ -20,12 +27,13 @@ telegrinder/bot/dispatch/__init__.py,sha256=agSk03df-VD9Odo8JqfgF8lzW8JWcaXhv3a6
|
|
|
20
27
|
telegrinder/bot/dispatch/abc.py,sha256=8BaLdmupx7Ch0zd5g6jwcTLdidKPFZVaL3kGpzLjpeE,2341
|
|
21
28
|
telegrinder/bot/dispatch/context.py,sha256=-_beXNZ82zpccDOMwO8_WK5_UcXBR6JebnqowOBk570,2727
|
|
22
29
|
telegrinder/bot/dispatch/dispatch.py,sha256=bK0IQeo0UZ_wYJccrNYLTHA481yV1l7OfPyPgYO1V60,7899
|
|
30
|
+
telegrinder/bot/dispatch/process.py,sha256=-gZ8BjMti1HXCDQmrnimwOULujJJlk0aKTSpa6QRDHs,4716
|
|
23
31
|
telegrinder/bot/dispatch/handler/__init__.py,sha256=PL17gyh9u9fHHz1yTglyBpRGoioqdMD5UxFAtmTidC0,911
|
|
24
32
|
telegrinder/bot/dispatch/handler/abc.py,sha256=JKLxHaxq9YjBe4xs1_fMYfMRy7U8TJNGtgmbtY0l0Ao,596
|
|
25
33
|
telegrinder/bot/dispatch/handler/audio_reply.py,sha256=MZkWROKdugRcu02-HHq_p8ZsCGxKLkrLJdZmfeOj98g,1340
|
|
26
34
|
telegrinder/bot/dispatch/handler/base.py,sha256=xrM6K4PNxwh37s_L6Y-9M7phaEkU9k1Bx5BQnur8kWE,1780
|
|
27
35
|
telegrinder/bot/dispatch/handler/document_reply.py,sha256=YYcC_4658eN56hlNgGPU2J8WQM6r53TPnHkYpUp4aHQ,1367
|
|
28
|
-
telegrinder/bot/dispatch/handler/func.py,sha256=
|
|
36
|
+
telegrinder/bot/dispatch/handler/func.py,sha256=5CjSVEsr6NQHffHGLPZ7qN1qmMX4eV-5BEEjTpFSMfY,4997
|
|
29
37
|
telegrinder/bot/dispatch/handler/media_group_reply.py,sha256=57Mqun52VsJblkde8IiSYZF-yBrSwpiqe3nDv0xFsd8,1401
|
|
30
38
|
telegrinder/bot/dispatch/handler/message_reply.py,sha256=E5aH3omcdhxrxe98ysrJcoJtZR7mAYP8T859cS0k3UM,1119
|
|
31
39
|
telegrinder/bot/dispatch/handler/photo_reply.py,sha256=iyfNeCLgn3j6wyEIcJqUyAoUT6kur0DHtbGFLymHEZI,1340
|
|
@@ -34,7 +42,6 @@ telegrinder/bot/dispatch/handler/video_reply.py,sha256=kqwJHxFNQ2_foWzZ59QgX2VEE
|
|
|
34
42
|
telegrinder/bot/dispatch/middleware/__init__.py,sha256=znQGQ0jnBioEXr-2RPHOkmDbjei4LEbaTjgiE9c8aXI,96
|
|
35
43
|
telegrinder/bot/dispatch/middleware/abc.py,sha256=CkZc3uW2IAZAFAdb37Cc2ViAe2kfnQ07wubjLDFsPlY,3208
|
|
36
44
|
telegrinder/bot/dispatch/middleware/global_middleware.py,sha256=6k4dY8ax5djqQ0KBlO8F-rK86VGh6sK_VQjMFygQbFI,2523
|
|
37
|
-
telegrinder/bot/dispatch/process.py,sha256=-gZ8BjMti1HXCDQmrnimwOULujJJlk0aKTSpa6QRDHs,4716
|
|
38
45
|
telegrinder/bot/dispatch/return_manager/__init__.py,sha256=ubhWS1MUT0928-KYNZLyM8CKFwTtXoh1QVUf4Xh9V-w,728
|
|
39
46
|
telegrinder/bot/dispatch/return_manager/abc.py,sha256=PK8p2rHNR_7RNIAsFNWbgtN_xfYj_LqDkOA8xQ_1emg,3619
|
|
40
47
|
telegrinder/bot/dispatch/return_manager/callback_query.py,sha256=x7FT1PioR6USsfeyNVyy8mWvP4Vkq-sysIl1OpZm-fI,722
|
|
@@ -54,14 +61,14 @@ telegrinder/bot/dispatch/view/pre_checkout_query.py,sha256=EMEISukuS45J4a_1UH_rR
|
|
|
54
61
|
telegrinder/bot/dispatch/view/raw.py,sha256=HD1iRuRqNw_6dRa-eO2SGR1j_4E_-AjHYUI07b9RS_E,3858
|
|
55
62
|
telegrinder/bot/dispatch/waiter_machine/__init__.py,sha256=2I3MQpTAVFCHoHJUxAPCWUyasGOkdGSBKRETiTLgBpg,862
|
|
56
63
|
telegrinder/bot/dispatch/waiter_machine/actions.py,sha256=omU5poxjDz9D800Zu4GjXPOW44m4-UqJ8pO9FjRV8iQ,376
|
|
64
|
+
telegrinder/bot/dispatch/waiter_machine/machine.py,sha256=uI_tx8VsbVAjHg-NK5ZlGsWVGIyvYcRj2hXTJrkXrKk,9012
|
|
65
|
+
telegrinder/bot/dispatch/waiter_machine/middleware.py,sha256=9uULMp-oF_WSOfU1jQk-D5F1pixmO0i1zj0VdfW5jXc,3075
|
|
66
|
+
telegrinder/bot/dispatch/waiter_machine/short_state.py,sha256=rBLkSgSQvHAO-9XkL5ScAu2gjf42NxOrkJV2tRR64Kk,1739
|
|
57
67
|
telegrinder/bot/dispatch/waiter_machine/hasher/__init__.py,sha256=nu0WhOWmGkhybOP-faiAFEx1nlYo_N_LW2AuAmbC_Z0,497
|
|
58
68
|
telegrinder/bot/dispatch/waiter_machine/hasher/callback.py,sha256=W-caGejmYBRx-yWdUPH-D54yPPBtESrroNLyVog8e2I,1587
|
|
59
69
|
telegrinder/bot/dispatch/waiter_machine/hasher/hasher.py,sha256=EHBdcAJEeB7_AA0RnLc8JogsEVy82Y-U4kktk3fAs5g,1845
|
|
60
70
|
telegrinder/bot/dispatch/waiter_machine/hasher/message.py,sha256=NoT2BaTrHVnyaaXsXTkf8riJZp8473-T3EXNri4y70I,1253
|
|
61
71
|
telegrinder/bot/dispatch/waiter_machine/hasher/state.py,sha256=D1j8H8XwML0nPPYcDBy9QWM5OAXi3mch5ElUOo7-RmA,677
|
|
62
|
-
telegrinder/bot/dispatch/waiter_machine/machine.py,sha256=uI_tx8VsbVAjHg-NK5ZlGsWVGIyvYcRj2hXTJrkXrKk,9012
|
|
63
|
-
telegrinder/bot/dispatch/waiter_machine/middleware.py,sha256=9uULMp-oF_WSOfU1jQk-D5F1pixmO0i1zj0VdfW5jXc,3075
|
|
64
|
-
telegrinder/bot/dispatch/waiter_machine/short_state.py,sha256=rBLkSgSQvHAO-9XkL5ScAu2gjf42NxOrkJV2tRR64Kk,1739
|
|
65
72
|
telegrinder/bot/polling/__init__.py,sha256=OqfIFPS_V6UrCg-vCv9pkMFzTKdNbDP2faBfATs_TGg,94
|
|
66
73
|
telegrinder/bot/polling/abc.py,sha256=qFiKzWTWENK-sSuShC5cPlM-JS4In2c8-1_ARdwdTms,442
|
|
67
74
|
telegrinder/bot/polling/polling.py,sha256=76YLN_MN85UF69LBNDzihRAz04cnUchtxL8n8SmtoZo,5514
|
|
@@ -94,16 +101,12 @@ telegrinder/bot/rules/update.py,sha256=-mE12-xy0AjOz9RVRVZ8vS7ohGCuf_bNmG26rDbrj
|
|
|
94
101
|
telegrinder/bot/scenario/__init__.py,sha256=nnPjdxdvjoEYYMRUEfWvIhZStiY1C984x1azdRRP9II,136
|
|
95
102
|
telegrinder/bot/scenario/abc.py,sha256=ZjcHJyVuUeNKHIHWd_3bNBxuklNMLM-HsBadLnDVzm8,409
|
|
96
103
|
telegrinder/bot/scenario/checkbox.py,sha256=4vfpbRMUFxa06ZKfYcIsVOH6-UWhAn4MjhmU9kGOVAc,5174
|
|
97
|
-
telegrinder/bot/scenario/choice.py,sha256=
|
|
104
|
+
telegrinder/bot/scenario/choice.py,sha256=VOuIrDGnX2IMrU11TMYp_9VIyhc0EAOUvqYP99Fp1Jk,1706
|
|
98
105
|
telegrinder/client/__init__.py,sha256=2TfRdGAokRyuQhwu09u0KAXc9cLIch9WJtBIjgj49yg,281
|
|
99
106
|
telegrinder/client/abc.py,sha256=rEDgfuo8dufkCY5o9ijgDawAmEuhzGDNj9WrdqUUMA8,2431
|
|
100
107
|
telegrinder/client/aiohttp.py,sha256=v5R-WZS8AwaypHsY12jT6VbI9GN763O0y69DYA3qZZ0,3932
|
|
101
108
|
telegrinder/client/form_data.py,sha256=XpSrM6b42lnoUDR7rnFko7agDzjnuChrCyjp-cACGHE,689
|
|
102
109
|
telegrinder/client/sonic.py,sha256=MZ1ZdVUlwoXkKrfzaV08n4q0M3IYfHKd3UGttVcfK8g,6523
|
|
103
|
-
telegrinder/model.py,sha256=CrN2XOMG_rPFN5jF-QQeNGyepwT3DuBzWLm7oqIMajI,6106
|
|
104
|
-
telegrinder/modules.py,sha256=XcEIjz67xAKcYQfNVIm4VfidMa3M43iDcfUaX6QKFX8,7826
|
|
105
|
-
telegrinder/msgspec_json.py,sha256=eDuRTP_bFYWtNPDINuzY2OGKXbdleaKyXh2mQgfJdMk,237
|
|
106
|
-
telegrinder/msgspec_utils.py,sha256=AbaBcKJWLqjzYtORSDzCuMHpOKEDBxFtcTrAX4L6REE,14339
|
|
107
110
|
telegrinder/node/__init__.py,sha256=WbargilSBjZHE1CUKZzbjZpZx5hl_XOw565Ecy4PRCk,2268
|
|
108
111
|
telegrinder/node/attachment.py,sha256=ocSUsqnPJEIq5aaj5-xKbKmoifnoA1fhlp2brZLJgXY,4857
|
|
109
112
|
telegrinder/node/base.py,sha256=xlqwSPuwDc5FCr-1cJkAafW2_NlZm0o2nAQI7_wYPsQ,8249
|
|
@@ -116,25 +119,31 @@ telegrinder/node/event.py,sha256=KItU-Pf7mT-ztTnVethqd63hkwwOTnqB6smasxRwk00,184
|
|
|
116
119
|
telegrinder/node/file.py,sha256=88fS9tDfGpElrqEb1ejY-kpfc0dPkgZMHFNN_wpavO8,1430
|
|
117
120
|
telegrinder/node/me.py,sha256=mBP1i1Jto0XMS9ZYgfRtte9QPfrak0ARgBDJvGQ6CX4,414
|
|
118
121
|
telegrinder/node/payload.py,sha256=Z3rjzux4oB6OKNK0kB7JALp6hclxF174N8WUj3l6FnE,2706
|
|
119
|
-
telegrinder/node/polymorphic.py,sha256=
|
|
122
|
+
telegrinder/node/polymorphic.py,sha256=S6nnB8PkqIllCTN7x1G_M5bs9jx2OUCFfFWTOAwONAA,2665
|
|
120
123
|
telegrinder/node/rule.py,sha256=pwCHC7Z2IRR-q7ewDB_cjCmbYJsdkftF0QD4r889HQs,2381
|
|
121
124
|
telegrinder/node/scope.py,sha256=tq9TyKyUeiRl0WpAyBAVTBdF9pKC_z0X0MxuxwLBQ8M,734
|
|
122
125
|
telegrinder/node/source.py,sha256=pUBICRo8bkcgzdUW60cy6fsmjAZGv2efBhaQWHTp2Y0,2691
|
|
123
126
|
telegrinder/node/text.py,sha256=vx9gQscBAqwG0e5zm9p1bt6D7yMnp1JS_NWbuZe4Rrw,1379
|
|
124
127
|
telegrinder/node/tools/__init__.py,sha256=iyjs82g3brYGzpPsUQaoK6_r7YuQhRkJ61YjjuPOx9E,67
|
|
125
128
|
telegrinder/node/tools/generator.py,sha256=4zbAASQmSJGiEPBWbHh1F0mXJrCuc4oXHI-kB51I3qQ,973
|
|
126
|
-
telegrinder/py
|
|
127
|
-
telegrinder/
|
|
128
|
-
telegrinder/tools/
|
|
129
|
+
telegrinder/tools/__init__.py,sha256=9PkcZsbdHbmQ_2-F_OVQeuBcUYwDFyiU8hnJt8mr5pY,4488
|
|
130
|
+
telegrinder/tools/buttons.py,sha256=Ez99XgIcg4_6mtdDvkN0Uq4VkcpgcGE1cufSitXe61A,3904
|
|
131
|
+
telegrinder/tools/functional.py,sha256=pkCVxLIyOLlO-hVtT5xz7LLFdLFbwQ7a0NTqhLV2jJs,201
|
|
132
|
+
telegrinder/tools/input_file_directory.py,sha256=F77qMxG7reK8VX6rnHKbYZhzQAzw229Q20K8q0CF0cw,839
|
|
133
|
+
telegrinder/tools/keyboard.py,sha256=BvxGs6RvXpqbWBEUVqKKij-Nw4acgXpH7u7fU_N9rP0,3791
|
|
134
|
+
telegrinder/tools/lifespan.py,sha256=2-vGm8Jb9Hpx0mvhWRpSvIRiibtAPJnYSQuAE-QEo-A,3199
|
|
135
|
+
telegrinder/tools/limited_dict.py,sha256=ySot8-lVd0XkRcxl_R9dvTb0g8OfspsbSXQdlB7mVgo,1039
|
|
136
|
+
telegrinder/tools/magic.py,sha256=z6soR2gU_FlxO5MhDbJg2_aQi6BUTEuGRRA5mQVaV2c,10122
|
|
137
|
+
telegrinder/tools/parse_mode.py,sha256=JyQ-x9YAMPLhIIiUX01acyKkpWgs5TBA07W-iUyPHpE,92
|
|
138
|
+
telegrinder/tools/strings.py,sha256=rb8tAmEqkkJnEAIVqME1LpV4GICBZ2IbfUJ_nd7F2Mo,285
|
|
129
139
|
telegrinder/tools/adapter/__init__.py,sha256=ZOnQl0uu7UGshKKopH5ZkFtg5N-LMrI8FXwIVTMuNDw,633
|
|
130
140
|
telegrinder/tools/adapter/abc.py,sha256=vq1Q8PzdjtkiJPtjuFg9UJJxcnlvaABlUxTy4NCGOOw,1333
|
|
131
141
|
telegrinder/tools/adapter/dataclass.py,sha256=x6xAjHB8CngwhDbOxIupgzusiP0RXtRH2z4diz4drm8,2232
|
|
132
142
|
telegrinder/tools/adapter/errors.py,sha256=2r_UBTWm5-heU-NchBfobC1f848EWeC64nKvprGnAAY,73
|
|
133
|
-
telegrinder/tools/adapter/event.py,sha256=
|
|
143
|
+
telegrinder/tools/adapter/event.py,sha256=1O3Y10JJh4NekmaXLu5z3JyB9L-4G9CyFu3ffoWZcxw,2369
|
|
134
144
|
telegrinder/tools/adapter/node.py,sha256=APX_hXf5R16vPULvfUlhh9jr9X4q_aFSyItDKstlXdM,1572
|
|
135
145
|
telegrinder/tools/adapter/raw_event.py,sha256=Ve2ziMogw533B8K_DXRBpqQGnjnjGFXu7qeYiF-stc0,975
|
|
136
146
|
telegrinder/tools/adapter/raw_update.py,sha256=o-posiO4C_YRMi2KXYGjRKdKJM0wOke90x5aYPB9ZGE,997
|
|
137
|
-
telegrinder/tools/buttons.py,sha256=Ez99XgIcg4_6mtdDvkN0Uq4VkcpgcGE1cufSitXe61A,3904
|
|
138
147
|
telegrinder/tools/callback_data_serilization/__init__.py,sha256=mavF_sXLzhcF2xZ00Z2_jbKzAc2xx4xDUTCMNJUJL8I,187
|
|
139
148
|
telegrinder/tools/callback_data_serilization/abc.py,sha256=OgzpVKw12kbabTxzoNid0a1mrjb1GYvYyYp0BU4TYik,1232
|
|
140
149
|
telegrinder/tools/callback_data_serilization/json_ser.py,sha256=gjgOJMcTmahqZUEOjZatgsqmSFi7BAyOy20FErmlxJE,1952
|
|
@@ -147,36 +156,27 @@ telegrinder/tools/formatting/__init__.py,sha256=-OwOBkYwg3Dj7fL5gKpTSMDLb2rRmLHW
|
|
|
147
156
|
telegrinder/tools/formatting/deep_links.py,sha256=o9bE3sADuTt_DluGR6yqQ3GLBFxXODeI1r3LUqEReDU,19576
|
|
148
157
|
telegrinder/tools/formatting/html_formatter.py,sha256=5r2lryBksrarn9Ejt4mp_0ZZHd8CX310Six82wn1BjM,7854
|
|
149
158
|
telegrinder/tools/formatting/spec_html_formats.py,sha256=YyppEtrgwRTrjK8h5nwIIYaPQXGovYEXarMpk5EPNKs,1542
|
|
150
|
-
telegrinder/tools/functional.py,sha256=pkCVxLIyOLlO-hVtT5xz7LLFdLFbwQ7a0NTqhLV2jJs,201
|
|
151
159
|
telegrinder/tools/global_context/__init__.py,sha256=5pF9growKd28WO739wk_DZUqCDw5hxs6eUcDtxTosX8,290
|
|
152
160
|
telegrinder/tools/global_context/abc.py,sha256=twwAmbTk49KGl_POImr4yj6POr-zdx8mz74McuphZH0,1644
|
|
153
161
|
telegrinder/tools/global_context/global_context.py,sha256=ddKLJyyczORxqb3AbAGG6YeYfV2mL55TNehG6NZMk_E,13626
|
|
154
162
|
telegrinder/tools/global_context/telegrinder_ctx.py,sha256=lEbJqgC0Ex3Cgeu3ufqbD-iVlGRNiB37N1Hto3wmf0Y,707
|
|
155
163
|
telegrinder/tools/i18n/__init__.py,sha256=jMrrdFexgMU-BUiKf-p22VowQaqtQeaCb-Cs0fq2Tls,287
|
|
156
164
|
telegrinder/tools/i18n/abc.py,sha256=jxJVYiTplJaNeklkGiin-m7BkfZiac2fbVXTEdhNw6o,726
|
|
165
|
+
telegrinder/tools/i18n/simple.py,sha256=w2SlMKYqJbDK9ScTwCAB6pdskqwtmqV7pK8yEhSUFDA,1564
|
|
157
166
|
telegrinder/tools/i18n/middleware/__init__.py,sha256=a0yJUYmDbl1Mqf_cWx2TTmA3_Andlk8ixLJyDYAA23I,81
|
|
158
167
|
telegrinder/tools/i18n/middleware/abc.py,sha256=RQLDDEGXseaf2E4XGvtof_2CxhOzHnMLXMvhb6PkWg8,701
|
|
159
|
-
telegrinder/tools/i18n/simple.py,sha256=w2SlMKYqJbDK9ScTwCAB6pdskqwtmqV7pK8yEhSUFDA,1564
|
|
160
|
-
telegrinder/tools/input_file_directory.py,sha256=F77qMxG7reK8VX6rnHKbYZhzQAzw229Q20K8q0CF0cw,839
|
|
161
|
-
telegrinder/tools/keyboard.py,sha256=BvxGs6RvXpqbWBEUVqKKij-Nw4acgXpH7u7fU_N9rP0,3791
|
|
162
|
-
telegrinder/tools/lifespan.py,sha256=2-vGm8Jb9Hpx0mvhWRpSvIRiibtAPJnYSQuAE-QEo-A,3199
|
|
163
|
-
telegrinder/tools/limited_dict.py,sha256=ySot8-lVd0XkRcxl_R9dvTb0g8OfspsbSXQdlB7mVgo,1039
|
|
164
168
|
telegrinder/tools/loop_wrapper/__init__.py,sha256=ZQ5jmE1lOKnqJlMZ9k2OYmjvOEhOlHPijUWqZ4nHIgk,165
|
|
165
169
|
telegrinder/tools/loop_wrapper/abc.py,sha256=aZG2OGoQKLUxeO6WZ_gluFAjRHubeMfKxmKeIG7isYI,383
|
|
166
170
|
telegrinder/tools/loop_wrapper/loop_wrapper.py,sha256=t31AYkk1S_uyoq4MJMQCkoC6_fSvfON3NjBBKEuQy5U,5160
|
|
167
|
-
telegrinder/tools/magic.py,sha256=hDarnKUfo3bzbPQSAttt4BY3wyT0KJ8a1nyXNNTJmlE,9295
|
|
168
|
-
telegrinder/tools/parse_mode.py,sha256=JyQ-x9YAMPLhIIiUX01acyKkpWgs5TBA07W-iUyPHpE,92
|
|
169
171
|
telegrinder/tools/state_storage/__init__.py,sha256=G2EK2HwS0NbRQIu0OotVlgEYtO_GuzN1aJOIxmDEtz4,211
|
|
170
172
|
telegrinder/tools/state_storage/abc.py,sha256=GufeznJI1AF2Cl0D6J3MW94UvsL_QHuOnlEc1lqQNss,878
|
|
171
173
|
telegrinder/tools/state_storage/memory.py,sha256=nbCHHhN3YmjvnbrS_5cLvwrkuJgFA0qGVuAsqhBGNyY,740
|
|
172
|
-
telegrinder/tools/strings.py,sha256=rb8tAmEqkkJnEAIVqME1LpV4GICBZ2IbfUJ_nd7F2Mo,285
|
|
173
174
|
telegrinder/types/__init__.py,sha256=9uF3fmerYcpt0B_3ycj-2AoAv-KVShlUAAaePo65wfY,6844
|
|
174
175
|
telegrinder/types/enums.py,sha256=xK3_4GrM5U3mIezwgzvu-C7Xx_GUQqfQRGEDPaURiec,19060
|
|
175
176
|
telegrinder/types/input_file.py,sha256=xwzag5QvhAUAraw_qeoOQjG6Qqf72GLtQKbHB6VUblI,1440
|
|
176
177
|
telegrinder/types/methods.py,sha256=D45Ou7BrNRqCGRGpatBnMGoM7ZbsXTHq42EBb7ZasrM,219112
|
|
177
178
|
telegrinder/types/objects.py,sha256=jZCyM1-A6msV9XZQcVqVN-pEh_P1qw62kj2Xh-caycU,299955
|
|
178
|
-
telegrinder/
|
|
179
|
-
telegrinder-0.4.
|
|
180
|
-
telegrinder-0.4.
|
|
181
|
-
telegrinder-0.4.
|
|
182
|
-
telegrinder-0.4.0.dist-info/RECORD,,
|
|
179
|
+
telegrinder-0.4.2.dist-info/METADATA,sha256=oL_EoJvJucIYBRfonzaYHiYqRqxCnSFaUJnGd8ZywJM,4921
|
|
180
|
+
telegrinder-0.4.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
181
|
+
telegrinder-0.4.2.dist-info/licenses/LICENSE,sha256=mKmh92w0b8JKW6Z72AJ00ZtKS_9ZhTH7uevlEspyVD4,1100
|
|
182
|
+
telegrinder-0.4.2.dist-info/RECORD,,
|
|
File without changes
|