telegrinder 0.1.dev169__py3-none-any.whl → 0.1.dev171__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/api/abc.py +7 -1
- telegrinder/api/api.py +12 -3
- telegrinder/api/error.py +2 -1
- telegrinder/bot/bot.py +6 -1
- telegrinder/bot/cute_types/base.py +144 -17
- telegrinder/bot/cute_types/callback_query.py +6 -1
- telegrinder/bot/cute_types/chat_member_updated.py +1 -2
- telegrinder/bot/cute_types/message.py +23 -11
- telegrinder/bot/cute_types/update.py +48 -0
- telegrinder/bot/cute_types/utils.py +2 -465
- telegrinder/bot/dispatch/__init__.py +2 -3
- telegrinder/bot/dispatch/abc.py +6 -3
- telegrinder/bot/dispatch/context.py +6 -6
- telegrinder/bot/dispatch/dispatch.py +61 -23
- telegrinder/bot/dispatch/handler/abc.py +2 -2
- telegrinder/bot/dispatch/handler/func.py +36 -17
- telegrinder/bot/dispatch/handler/message_reply.py +2 -2
- telegrinder/bot/dispatch/middleware/abc.py +2 -2
- telegrinder/bot/dispatch/process.py +10 -10
- telegrinder/bot/dispatch/return_manager/abc.py +3 -3
- telegrinder/bot/dispatch/view/abc.py +12 -15
- telegrinder/bot/dispatch/view/box.py +73 -62
- telegrinder/bot/dispatch/view/message.py +11 -3
- telegrinder/bot/dispatch/view/raw.py +3 -0
- telegrinder/bot/dispatch/waiter_machine/machine.py +2 -2
- telegrinder/bot/dispatch/waiter_machine/middleware.py +1 -1
- telegrinder/bot/dispatch/waiter_machine/short_state.py +2 -1
- telegrinder/bot/polling/polling.py +3 -3
- telegrinder/bot/rules/abc.py +11 -7
- telegrinder/bot/rules/adapter/event.py +7 -4
- telegrinder/bot/rules/adapter/node.py +1 -1
- telegrinder/bot/rules/command.py +5 -7
- telegrinder/bot/rules/func.py +1 -1
- telegrinder/bot/rules/fuzzy.py +1 -1
- telegrinder/bot/rules/integer.py +1 -2
- telegrinder/bot/rules/markup.py +3 -3
- telegrinder/bot/rules/message_entities.py +1 -1
- telegrinder/bot/rules/node.py +2 -2
- telegrinder/bot/rules/regex.py +1 -1
- telegrinder/bot/rules/rule_enum.py +1 -1
- telegrinder/bot/scenario/checkbox.py +2 -2
- telegrinder/model.py +87 -47
- telegrinder/modules.py +3 -3
- telegrinder/msgspec_utils.py +94 -13
- telegrinder/node/__init__.py +20 -11
- telegrinder/node/attachment.py +19 -16
- telegrinder/node/base.py +120 -24
- telegrinder/node/callback_query.py +5 -9
- telegrinder/node/command.py +6 -2
- telegrinder/node/composer.py +82 -54
- telegrinder/node/container.py +4 -4
- telegrinder/node/event.py +59 -0
- telegrinder/node/me.py +3 -0
- telegrinder/node/message.py +6 -10
- telegrinder/node/polymorphic.py +11 -12
- telegrinder/node/rule.py +27 -5
- telegrinder/node/source.py +10 -11
- telegrinder/node/text.py +4 -4
- telegrinder/node/update.py +1 -2
- telegrinder/py.typed +0 -0
- telegrinder/tools/__init__.py +2 -2
- telegrinder/tools/buttons.py +5 -10
- telegrinder/tools/error_handler/error.py +2 -0
- telegrinder/tools/error_handler/error_handler.py +1 -1
- telegrinder/tools/formatting/spec_html_formats.py +10 -10
- telegrinder/tools/global_context/__init__.py +2 -2
- telegrinder/tools/global_context/global_context.py +2 -2
- telegrinder/tools/global_context/telegrinder_ctx.py +4 -4
- telegrinder/tools/keyboard.py +2 -2
- telegrinder/tools/loop_wrapper/loop_wrapper.py +39 -5
- telegrinder/tools/magic.py +48 -15
- telegrinder/types/enums.py +1 -0
- telegrinder/types/methods.py +14 -5
- telegrinder/types/objects.py +3 -0
- {telegrinder-0.1.dev169.dist-info → telegrinder-0.1.dev171.dist-info}/METADATA +2 -2
- telegrinder-0.1.dev171.dist-info/RECORD +145 -0
- telegrinder-0.1.dev169.dist-info/RECORD +0 -143
- {telegrinder-0.1.dev169.dist-info → telegrinder-0.1.dev171.dist-info}/LICENSE +0 -0
- {telegrinder-0.1.dev169.dist-info → telegrinder-0.1.dev171.dist-info}/WHEEL +0 -0
|
@@ -24,7 +24,7 @@ def is_spec_format(obj: typing.Any) -> typing.TypeGuard[SpecialFormat]:
|
|
|
24
24
|
)
|
|
25
25
|
|
|
26
26
|
|
|
27
|
-
@dataclasses.dataclass(repr=False)
|
|
27
|
+
@dataclasses.dataclass(repr=False, slots=True)
|
|
28
28
|
class BaseSpecFormat:
|
|
29
29
|
__formatter_name__: typing.ClassVar[str] = dataclasses.field(init=False, repr=False)
|
|
30
30
|
|
|
@@ -32,7 +32,7 @@ class BaseSpecFormat:
|
|
|
32
32
|
return f"<Special formatter {self.__class__.__name__!r} -> {self.__formatter_name__!r}>"
|
|
33
33
|
|
|
34
34
|
|
|
35
|
-
@dataclasses.dataclass(repr=False)
|
|
35
|
+
@dataclasses.dataclass(repr=False, slots=True)
|
|
36
36
|
class ChannelBoostLink(BaseSpecFormat):
|
|
37
37
|
__formatter_name__ = "channel_boost_link"
|
|
38
38
|
|
|
@@ -40,7 +40,7 @@ class ChannelBoostLink(BaseSpecFormat):
|
|
|
40
40
|
string: str | None = None
|
|
41
41
|
|
|
42
42
|
|
|
43
|
-
@dataclasses.dataclass(repr=False)
|
|
43
|
+
@dataclasses.dataclass(repr=False, slots=True)
|
|
44
44
|
class InviteChatLink(BaseSpecFormat):
|
|
45
45
|
__formatter_name__ = "invite_chat_link"
|
|
46
46
|
|
|
@@ -48,7 +48,7 @@ class InviteChatLink(BaseSpecFormat):
|
|
|
48
48
|
string: str | None = None
|
|
49
49
|
|
|
50
50
|
|
|
51
|
-
@dataclasses.dataclass(repr=False)
|
|
51
|
+
@dataclasses.dataclass(repr=False, slots=True)
|
|
52
52
|
class Mention(BaseSpecFormat):
|
|
53
53
|
__formatter_name__ = "mention"
|
|
54
54
|
|
|
@@ -56,7 +56,7 @@ class Mention(BaseSpecFormat):
|
|
|
56
56
|
user_id: int
|
|
57
57
|
|
|
58
58
|
|
|
59
|
-
@dataclasses.dataclass(repr=False)
|
|
59
|
+
@dataclasses.dataclass(repr=False, slots=True)
|
|
60
60
|
class Link(BaseSpecFormat):
|
|
61
61
|
__formatter_name__ = "link"
|
|
62
62
|
|
|
@@ -64,7 +64,7 @@ class Link(BaseSpecFormat):
|
|
|
64
64
|
string: str | None = None
|
|
65
65
|
|
|
66
66
|
|
|
67
|
-
@dataclasses.dataclass(repr=False)
|
|
67
|
+
@dataclasses.dataclass(repr=False, slots=True)
|
|
68
68
|
class PreCode(BaseSpecFormat):
|
|
69
69
|
__formatter_name__ = "pre_code"
|
|
70
70
|
|
|
@@ -72,7 +72,7 @@ class PreCode(BaseSpecFormat):
|
|
|
72
72
|
lang: str | ProgrammingLanguage | None = None
|
|
73
73
|
|
|
74
74
|
|
|
75
|
-
@dataclasses.dataclass(repr=False)
|
|
75
|
+
@dataclasses.dataclass(repr=False, slots=True)
|
|
76
76
|
class TgEmoji(BaseSpecFormat):
|
|
77
77
|
__formatter_name__ = "tg_emoji"
|
|
78
78
|
|
|
@@ -80,7 +80,7 @@ class TgEmoji(BaseSpecFormat):
|
|
|
80
80
|
emoji_id: int
|
|
81
81
|
|
|
82
82
|
|
|
83
|
-
@dataclasses.dataclass(repr=False)
|
|
83
|
+
@dataclasses.dataclass(repr=False, slots=True)
|
|
84
84
|
class StartBotLink(BaseSpecFormat):
|
|
85
85
|
__formatter_name__ = "start_bot_link"
|
|
86
86
|
|
|
@@ -89,7 +89,7 @@ class StartBotLink(BaseSpecFormat):
|
|
|
89
89
|
string: str | None
|
|
90
90
|
|
|
91
91
|
|
|
92
|
-
@dataclasses.dataclass(repr=False)
|
|
92
|
+
@dataclasses.dataclass(repr=False, slots=True)
|
|
93
93
|
class StartGroupLink(BaseSpecFormat):
|
|
94
94
|
__formatter_name__ = "start_group_link"
|
|
95
95
|
|
|
@@ -98,7 +98,7 @@ class StartGroupLink(BaseSpecFormat):
|
|
|
98
98
|
string: str | None = None
|
|
99
99
|
|
|
100
100
|
|
|
101
|
-
@dataclasses.dataclass(repr=False)
|
|
101
|
+
@dataclasses.dataclass(repr=False, slots=True)
|
|
102
102
|
class ResolveDomain(BaseSpecFormat):
|
|
103
103
|
__formatter_name__ = "resolve_domain"
|
|
104
104
|
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
from .abc import ABCGlobalContext, CtxVar, GlobalCtxVar
|
|
2
2
|
from .global_context import GlobalContext, ctx_var
|
|
3
|
-
from .telegrinder_ctx import
|
|
3
|
+
from .telegrinder_ctx import TelegrinderContext
|
|
4
4
|
|
|
5
5
|
__all__ = (
|
|
6
6
|
"ABCGlobalContext",
|
|
7
7
|
"CtxVar",
|
|
8
8
|
"GlobalContext",
|
|
9
9
|
"GlobalCtxVar",
|
|
10
|
-
"
|
|
10
|
+
"TelegrinderContext",
|
|
11
11
|
"ctx_var",
|
|
12
12
|
)
|
|
@@ -81,7 +81,7 @@ def ctx_var(value: T, *, const: bool = False) -> T:
|
|
|
81
81
|
return typing.cast(T, CtxVar(value, const=const))
|
|
82
82
|
|
|
83
83
|
|
|
84
|
-
@dataclasses.dataclass(frozen=True, eq=False)
|
|
84
|
+
@dataclasses.dataclass(frozen=True, eq=False, slots=True)
|
|
85
85
|
class RootAttr:
|
|
86
86
|
name: str
|
|
87
87
|
can_be_read: bool = dataclasses.field(default=True, kw_only=True)
|
|
@@ -91,7 +91,7 @@ class RootAttr:
|
|
|
91
91
|
return self.name == __value
|
|
92
92
|
|
|
93
93
|
|
|
94
|
-
@dataclasses.dataclass(repr=False, frozen=True)
|
|
94
|
+
@dataclasses.dataclass(repr=False, frozen=True, slots=True)
|
|
95
95
|
class Storage:
|
|
96
96
|
_storage: dict[str, "GlobalContext"] = dataclasses.field(
|
|
97
97
|
default_factory=lambda: {},
|
|
@@ -5,14 +5,14 @@ import vbml
|
|
|
5
5
|
from telegrinder.tools.global_context import GlobalContext, ctx_var
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
class
|
|
8
|
+
class TelegrinderContext(GlobalContext):
|
|
9
9
|
"""Basic type-hinted telegrinder context with context name `"telegrinder"`.
|
|
10
10
|
|
|
11
11
|
You can use this class or GlobalContext:
|
|
12
12
|
```
|
|
13
|
-
from telegrinder.tools.global_context import GlobalContext,
|
|
13
|
+
from telegrinder.tools.global_context import GlobalContext, TelegrinderContext
|
|
14
14
|
|
|
15
|
-
ctx1 =
|
|
15
|
+
ctx1 = TelegrinderContext()
|
|
16
16
|
ctx2 = GlobalContext("telegrinder") # same, but without the type-hints
|
|
17
17
|
assert ctx1 == ctx2 # ok
|
|
18
18
|
```"""
|
|
@@ -22,4 +22,4 @@ class TelegrinderCtx(GlobalContext):
|
|
|
22
22
|
vbml_patcher: typing.ClassVar[vbml.Patcher] = ctx_var(vbml.Patcher(), const=True)
|
|
23
23
|
|
|
24
24
|
|
|
25
|
-
__all__ = ("
|
|
25
|
+
__all__ = ("TelegrinderContext",)
|
telegrinder/tools/keyboard.py
CHANGED
|
@@ -17,7 +17,7 @@ DictStrAny: typing.TypeAlias = dict[str, typing.Any]
|
|
|
17
17
|
AnyMarkup: typing.TypeAlias = InlineKeyboardMarkup | ReplyKeyboardMarkup
|
|
18
18
|
|
|
19
19
|
|
|
20
|
-
@dataclasses.dataclass(kw_only=True)
|
|
20
|
+
@dataclasses.dataclass(kw_only=True, slots=True)
|
|
21
21
|
class KeyboardModel:
|
|
22
22
|
resize_keyboard: bool
|
|
23
23
|
one_time_keyboard: bool
|
|
@@ -77,7 +77,7 @@ class ABCMarkup(ABC, typing.Generic[ButtonT]):
|
|
|
77
77
|
return self
|
|
78
78
|
|
|
79
79
|
|
|
80
|
-
@dataclasses.dataclass(kw_only=True)
|
|
80
|
+
@dataclasses.dataclass(kw_only=True, slots=True)
|
|
81
81
|
class Keyboard(ABCMarkup[Button], KeyboardModel):
|
|
82
82
|
BUTTON = Button
|
|
83
83
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
import contextlib
|
|
3
3
|
import dataclasses
|
|
4
|
+
import datetime
|
|
4
5
|
import typing
|
|
5
6
|
|
|
6
7
|
from telegrinder.modules import logger
|
|
@@ -32,7 +33,7 @@ def to_coroutine_task(task: Task) -> CoroutineTask[typing.Any]:
|
|
|
32
33
|
return task
|
|
33
34
|
|
|
34
35
|
|
|
35
|
-
@dataclasses.dataclass
|
|
36
|
+
@dataclasses.dataclass(slots=True)
|
|
36
37
|
class DelayedTask(typing.Generic[CoroFunc]):
|
|
37
38
|
handler: CoroFunc
|
|
38
39
|
seconds: float
|
|
@@ -60,7 +61,7 @@ class DelayedTask(typing.Generic[CoroFunc]):
|
|
|
60
61
|
self._cancelled = True
|
|
61
62
|
|
|
62
63
|
|
|
63
|
-
@dataclasses.dataclass(kw_only=True)
|
|
64
|
+
@dataclasses.dataclass(kw_only=True, slots=True)
|
|
64
65
|
class Lifespan:
|
|
65
66
|
startup_tasks: list[CoroutineTask[typing.Any]] = dataclasses.field(default_factory=lambda: [])
|
|
66
67
|
shutdown_tasks: list[CoroutineTask[typing.Any]] = dataclasses.field(default_factory=lambda: [])
|
|
@@ -86,10 +87,11 @@ class LoopWrapper(ABCLoopWrapper):
|
|
|
86
87
|
*,
|
|
87
88
|
tasks: list[CoroutineTask[typing.Any]] | None = None,
|
|
88
89
|
lifespan: Lifespan | None = None,
|
|
90
|
+
event_loop: asyncio.AbstractEventLoop | None = None,
|
|
89
91
|
) -> None:
|
|
90
92
|
self.tasks: list[CoroutineTask[typing.Any]] = tasks or []
|
|
91
93
|
self.lifespan = lifespan or Lifespan()
|
|
92
|
-
self._loop = asyncio.new_event_loop()
|
|
94
|
+
self._loop = event_loop or asyncio.new_event_loop()
|
|
93
95
|
|
|
94
96
|
def __repr__(self) -> str:
|
|
95
97
|
return "<{}: loop={!r} with tasks={!r}, lifespan={!r}>".format(
|
|
@@ -143,6 +145,10 @@ class LoopWrapper(ABCLoopWrapper):
|
|
|
143
145
|
with contextlib.suppress(asyncio.CancelledError):
|
|
144
146
|
self._loop.run_until_complete(task_to_cancel)
|
|
145
147
|
|
|
148
|
+
@typing.overload
|
|
149
|
+
def timer(self, *, seconds: datetime.timedelta) -> typing.Callable[..., typing.Any]: ...
|
|
150
|
+
|
|
151
|
+
@typing.overload
|
|
146
152
|
def timer(
|
|
147
153
|
self,
|
|
148
154
|
*,
|
|
@@ -150,7 +156,19 @@ class LoopWrapper(ABCLoopWrapper):
|
|
|
150
156
|
hours: int = 0,
|
|
151
157
|
minutes: int = 0,
|
|
152
158
|
seconds: float = 0,
|
|
153
|
-
):
|
|
159
|
+
) -> typing.Callable[..., typing.Any]: ...
|
|
160
|
+
|
|
161
|
+
def timer(
|
|
162
|
+
self,
|
|
163
|
+
*,
|
|
164
|
+
days: int = 0,
|
|
165
|
+
hours: int = 0,
|
|
166
|
+
minutes: int = 0,
|
|
167
|
+
seconds: float | datetime.timedelta = 0,
|
|
168
|
+
) -> typing.Callable[..., typing.Any]:
|
|
169
|
+
if isinstance(seconds, datetime.timedelta):
|
|
170
|
+
seconds = seconds.total_seconds()
|
|
171
|
+
|
|
154
172
|
seconds += minutes * 60
|
|
155
173
|
seconds += hours * 60 * 60
|
|
156
174
|
seconds += days * 24 * 60 * 60
|
|
@@ -161,6 +179,10 @@ class LoopWrapper(ABCLoopWrapper):
|
|
|
161
179
|
|
|
162
180
|
return decorator
|
|
163
181
|
|
|
182
|
+
@typing.overload
|
|
183
|
+
def interval(self, *, seconds: datetime.timedelta) -> typing.Callable[..., typing.Any]: ...
|
|
184
|
+
|
|
185
|
+
@typing.overload
|
|
164
186
|
def interval(
|
|
165
187
|
self,
|
|
166
188
|
*,
|
|
@@ -168,7 +190,19 @@ class LoopWrapper(ABCLoopWrapper):
|
|
|
168
190
|
hours: int = 0,
|
|
169
191
|
minutes: int = 0,
|
|
170
192
|
seconds: float = 0,
|
|
171
|
-
):
|
|
193
|
+
) -> typing.Callable[..., typing.Any]: ...
|
|
194
|
+
|
|
195
|
+
def interval(
|
|
196
|
+
self,
|
|
197
|
+
*,
|
|
198
|
+
days: int = 0,
|
|
199
|
+
hours: int = 0,
|
|
200
|
+
minutes: int = 0,
|
|
201
|
+
seconds: float | datetime.timedelta = 0,
|
|
202
|
+
) -> typing.Callable[..., typing.Any]:
|
|
203
|
+
if isinstance(seconds, datetime.timedelta):
|
|
204
|
+
seconds = seconds.total_seconds()
|
|
205
|
+
|
|
172
206
|
seconds += minutes * 60
|
|
173
207
|
seconds += hours * 60 * 60
|
|
174
208
|
seconds += days * 24 * 60 * 60
|
telegrinder/tools/magic.py
CHANGED
|
@@ -2,34 +2,56 @@ import enum
|
|
|
2
2
|
import inspect
|
|
3
3
|
import types
|
|
4
4
|
import typing
|
|
5
|
+
from functools import wraps
|
|
5
6
|
|
|
6
7
|
if typing.TYPE_CHECKING:
|
|
7
8
|
from telegrinder.bot.rules.abc import ABCRule
|
|
9
|
+
from telegrinder.node.base import Node
|
|
8
10
|
|
|
9
11
|
T = typing.TypeVar("T", bound=ABCRule)
|
|
12
|
+
F = typing.TypeVar(
|
|
13
|
+
"F",
|
|
14
|
+
bound=typing.Callable[typing.Concatenate[typing.Callable[..., typing.Any], ...], typing.Any],
|
|
15
|
+
)
|
|
10
16
|
|
|
11
17
|
Impl: typing.TypeAlias = type[classmethod]
|
|
18
|
+
NodeImpl: typing.TypeAlias = Impl
|
|
12
19
|
FuncType: typing.TypeAlias = types.FunctionType | typing.Callable[..., typing.Any]
|
|
13
20
|
|
|
14
21
|
TRANSLATIONS_KEY: typing.Final[str] = "_translations"
|
|
15
22
|
IMPL_MARK: typing.Final[str] = "_is_impl"
|
|
23
|
+
NODE_IMPL_MARK: typing.Final[str] = "_is_node_impl"
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def cache_magic_value(mark_key: str, /):
|
|
27
|
+
def inner(func: "F") -> "F":
|
|
28
|
+
@wraps(func)
|
|
29
|
+
def wrapper(*args: typing.Any, **kwargs: typing.Any) -> typing.Any:
|
|
30
|
+
if mark_key not in args[0].__dict__:
|
|
31
|
+
args[0].__dict__[mark_key] = func(*args, **kwargs)
|
|
32
|
+
return args[0].__dict__[mark_key]
|
|
33
|
+
|
|
34
|
+
return wrapper # type: ignore
|
|
35
|
+
|
|
36
|
+
return inner
|
|
16
37
|
|
|
17
38
|
|
|
18
39
|
def resolve_arg_names(func: FuncType, start_idx: int = 1) -> tuple[str, ...]:
|
|
19
40
|
return func.__code__.co_varnames[start_idx : func.__code__.co_argcount]
|
|
20
41
|
|
|
21
42
|
|
|
43
|
+
@cache_magic_value("__default_args__")
|
|
22
44
|
def get_default_args(func: FuncType) -> dict[str, typing.Any]:
|
|
23
45
|
fspec = inspect.getfullargspec(func)
|
|
24
|
-
|
|
46
|
+
if not fspec.defaults:
|
|
47
|
+
return {}
|
|
48
|
+
return dict(zip(fspec.args[-len(fspec.defaults):], fspec.defaults))
|
|
25
49
|
|
|
26
50
|
|
|
27
|
-
def get_annotations(func: FuncType) -> dict[str, typing.Any]:
|
|
28
|
-
return
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
if parameter.annotation is not inspect._empty
|
|
32
|
-
}
|
|
51
|
+
def get_annotations(func: FuncType, *, return_type: bool = False) -> dict[str, typing.Any]:
|
|
52
|
+
if not return_type and "return" in func.__annotations__:
|
|
53
|
+
del func.__annotations__["return"]
|
|
54
|
+
return func.__annotations__
|
|
33
55
|
|
|
34
56
|
|
|
35
57
|
def to_str(s: str | enum.Enum) -> str:
|
|
@@ -59,30 +81,41 @@ def get_cached_translation(rule: "T", locale: str) -> "T | None":
|
|
|
59
81
|
|
|
60
82
|
def cache_translation(base_rule: "T", locale: str, translated_rule: "T") -> None:
|
|
61
83
|
translations = getattr(base_rule, TRANSLATIONS_KEY, {})
|
|
62
|
-
|
|
84
|
+
translations[locale] = translated_rule
|
|
85
|
+
setattr(base_rule, TRANSLATIONS_KEY, translations)
|
|
63
86
|
|
|
64
87
|
|
|
65
|
-
def
|
|
66
|
-
|
|
67
|
-
|
|
88
|
+
def get_impls_by_key(cls: type["Node"], mark_key: str) -> dict[str, typing.Callable[..., typing.Any]]:
|
|
89
|
+
return {
|
|
90
|
+
name: func.__func__
|
|
91
|
+
for name, func in vars(cls).items()
|
|
92
|
+
if isinstance(func, classmethod) and getattr(func.__func__, mark_key, False)
|
|
93
|
+
}
|
|
68
94
|
|
|
69
95
|
|
|
70
96
|
@typing.cast(typing.Callable[..., Impl], lambda f: f)
|
|
71
97
|
def impl(method: typing.Callable[..., typing.Any]):
|
|
72
|
-
bound_method = classmethod(method)
|
|
73
98
|
setattr(method, IMPL_MARK, True)
|
|
74
|
-
return
|
|
99
|
+
return classmethod(method)
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
@typing.cast(typing.Callable[..., NodeImpl], lambda f: f)
|
|
103
|
+
def node_impl(method: typing.Callable[..., typing.Any]):
|
|
104
|
+
setattr(method, NODE_IMPL_MARK, True)
|
|
105
|
+
return classmethod(method)
|
|
75
106
|
|
|
76
107
|
|
|
77
108
|
__all__ = (
|
|
78
109
|
"TRANSLATIONS_KEY",
|
|
110
|
+
"cache_magic_value",
|
|
79
111
|
"cache_translation",
|
|
112
|
+
"get_annotations",
|
|
80
113
|
"get_cached_translation",
|
|
81
114
|
"get_default_args",
|
|
82
115
|
"get_default_args",
|
|
83
|
-
"magic_bundle",
|
|
84
116
|
"impl",
|
|
117
|
+
"magic_bundle",
|
|
118
|
+
"node_impl",
|
|
85
119
|
"resolve_arg_names",
|
|
86
120
|
"to_str",
|
|
87
|
-
"get_annotations",
|
|
88
121
|
)
|
telegrinder/types/enums.py
CHANGED
telegrinder/types/methods.py
CHANGED
|
@@ -13,7 +13,7 @@ if typing.TYPE_CHECKING:
|
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
class APIMethods:
|
|
16
|
-
"""Telegram Bot API 7.
|
|
16
|
+
"""Telegram Bot API 7.8 methods, released `July 31, 2024`."""
|
|
17
17
|
|
|
18
18
|
default_params = ProxiedDict(
|
|
19
19
|
typing.TypedDict(
|
|
@@ -2207,6 +2207,7 @@ class APIMethods:
|
|
|
2207
2207
|
self,
|
|
2208
2208
|
chat_id: int | str,
|
|
2209
2209
|
message_id: int,
|
|
2210
|
+
business_connection_id: str | None = None,
|
|
2210
2211
|
disable_notification: bool | None = None,
|
|
2211
2212
|
**other: typing.Any,
|
|
2212
2213
|
) -> Result[bool, APIError]:
|
|
@@ -2218,6 +2219,9 @@ class APIMethods:
|
|
|
2218
2219
|
in a supergroup or 'can_edit_messages' administrator right in a channel.
|
|
2219
2220
|
Returns True on success.
|
|
2220
2221
|
|
|
2222
|
+
:param business_connection_id: Unique identifier of the business connection on behalf of which the message \
|
|
2223
|
+
will be pinned.
|
|
2224
|
+
|
|
2221
2225
|
:param chat_id: Unique identifier for the target chat or username of the target channel \
|
|
2222
2226
|
(in the format @channelusername).
|
|
2223
2227
|
|
|
@@ -2237,6 +2241,7 @@ class APIMethods:
|
|
|
2237
2241
|
async def unpin_chat_message(
|
|
2238
2242
|
self,
|
|
2239
2243
|
chat_id: int | str,
|
|
2244
|
+
business_connection_id: str | None = None,
|
|
2240
2245
|
message_id: int | None = None,
|
|
2241
2246
|
**other: typing.Any,
|
|
2242
2247
|
) -> Result[bool, APIError]:
|
|
@@ -2248,11 +2253,15 @@ class APIMethods:
|
|
|
2248
2253
|
in a supergroup or 'can_edit_messages' administrator right in a channel.
|
|
2249
2254
|
Returns True on success.
|
|
2250
2255
|
|
|
2256
|
+
:param business_connection_id: Unique identifier of the business connection on behalf of which the message \
|
|
2257
|
+
will be unpinned.
|
|
2258
|
+
|
|
2251
2259
|
:param chat_id: Unique identifier for the target chat or username of the target channel \
|
|
2252
2260
|
(in the format @channelusername).
|
|
2253
2261
|
|
|
2254
|
-
:param message_id: Identifier of
|
|
2255
|
-
message (by sending
|
|
2262
|
+
:param message_id: Identifier of the message to unpin. Required if business_connection_id \
|
|
2263
|
+
is specified. If not specified, the most recent pinned message (by sending \
|
|
2264
|
+
date) will be unpinned.
|
|
2256
2265
|
"""
|
|
2257
2266
|
|
|
2258
2267
|
method_response = await self.api.request_raw(
|
|
@@ -3929,9 +3938,9 @@ class APIMethods:
|
|
|
3929
3938
|
|
|
3930
3939
|
:param thumbnail: A .WEBP or .PNG image with the thumbnail, must be up to 128 kilobytes in size \
|
|
3931
3940
|
and have a width and height of exactly 100px, or a .TGS animation with a thumbnail \
|
|
3932
|
-
up to 32 kilobytes in size (see https://core.telegram.org/stickers#
|
|
3941
|
+
up to 32 kilobytes in size (see https://core.telegram.org/stickers#animation-requirements \
|
|
3933
3942
|
for animated sticker technical requirements), or a WEBM video with the \
|
|
3934
|
-
thumbnail up to 32 kilobytes in size; see https://core.telegram.org/stickers#video-
|
|
3943
|
+
thumbnail up to 32 kilobytes in size; see https://core.telegram.org/stickers#video-requirements \
|
|
3935
3944
|
for video sticker technical requirements. Pass a file_id as a String to \
|
|
3936
3945
|
send a file that already exists on the Telegram servers, pass an HTTP URL \
|
|
3937
3946
|
as a String for Telegram to get a file from the Internet, or upload a new one \
|
telegrinder/types/objects.py
CHANGED
|
@@ -423,6 +423,9 @@ class User(Model):
|
|
|
423
423
|
"""Optional. True, if the bot can be connected to a Telegram Business account
|
|
424
424
|
to receive its messages. Returned only in getMe."""
|
|
425
425
|
|
|
426
|
+
has_main_web_app: Option[bool] = Nothing
|
|
427
|
+
"""Optional. True, if the bot has a main Web App. Returned only in getMe."""
|
|
428
|
+
|
|
426
429
|
def __eq__(self, other: typing.Any) -> bool:
|
|
427
430
|
return isinstance(other, self.__class__) and self.id == other.id
|
|
428
431
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: telegrinder
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.dev171
|
|
4
4
|
Summary: Modern visionary telegram bot framework.
|
|
5
5
|
Home-page: https://github.com/timoniq/telegrinder
|
|
6
6
|
License: MIT
|
|
@@ -25,7 +25,7 @@ Requires-Dist: certifi (>=2024.2.2,<2025.0.0)
|
|
|
25
25
|
Requires-Dist: choicelib (>=0.1.5,<0.2.0)
|
|
26
26
|
Requires-Dist: colorama (>=0.4.0,<0.5.0)
|
|
27
27
|
Requires-Dist: envparse (>=0.2.0,<0.3.0)
|
|
28
|
-
Requires-Dist: fntypes (>=0.1.
|
|
28
|
+
Requires-Dist: fntypes (>=0.1.3,<0.2.0)
|
|
29
29
|
Requires-Dist: msgspec (>=0.18.6,<0.19.0)
|
|
30
30
|
Requires-Dist: requests (>=2.28.1,<3.0.0)
|
|
31
31
|
Requires-Dist: typing-extensions (>=4.10.0,<5.0.0)
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
telegrinder/__init__.py,sha256=_oJyGLb0znFMchGTHQtqeBYlvgvTb9FE9QxnyJvzuTQ,4230
|
|
2
|
+
telegrinder/api/__init__.py,sha256=pIDtnsL0NwT5PgVm43Gkp-ByOqDsqnD-oFDiC9tcPT4,246
|
|
3
|
+
telegrinder/api/abc.py,sha256=JtGFXQR918uPiW4EUFdHLDE1_zfWBwq19uNCQqZ3Oz0,1931
|
|
4
|
+
telegrinder/api/api.py,sha256=EnUnxmD0bSd0hziEnLZSAhRcNLp5uBrW5EFFZwJvjuU,2844
|
|
5
|
+
telegrinder/api/error.py,sha256=6_KBR819Tg9mLI7w5aHHYnrS8VSDYNkWIrHCnfgCFKk,422
|
|
6
|
+
telegrinder/api/response.py,sha256=d7Oxd5kOdbZNJiALkzkecHl8Y3K_BzCmsRq2Sn3otqA,491
|
|
7
|
+
telegrinder/bot/__init__.py,sha256=bGXs_-fHjyeZ736Jyy9GN1J0W4ar4Kl58IBkybj5k30,1918
|
|
8
|
+
telegrinder/bot/bot.py,sha256=NnwGJIaVKV6QIh59sNJlm2DavaPMkgqqyHowy0Gknnc,2503
|
|
9
|
+
telegrinder/bot/cute_types/__init__.py,sha256=XDcZJMKDFYJExvaNSm3B-bMQ2_wRETALz7-OWAytBC0,457
|
|
10
|
+
telegrinder/bot/cute_types/base.py,sha256=3NcEROSe00cyf21UBKjtkDdKMacGt5W2OM2EmpJ5W8o,9148
|
|
11
|
+
telegrinder/bot/cute_types/callback_query.py,sha256=4YfEuKSRZ_-IkjoIDQPoKFSkY4DM7Sb1tKksr9c0auI,20851
|
|
12
|
+
telegrinder/bot/cute_types/chat_join_request.py,sha256=JJFYgaofPZeegBC-gAWUaClzzb7yOhNN_DEd3Y4A8oU,2264
|
|
13
|
+
telegrinder/bot/cute_types/chat_member_updated.py,sha256=HJUTiku9YpRKEN_VHVecFu7AgNqKmsQ85nbMVKdKev0,10885
|
|
14
|
+
telegrinder/bot/cute_types/inline_query.py,sha256=wd_zhUQXNi1xOVnDBleD4GZXgH63g5STFXUJaW0YE0Q,2474
|
|
15
|
+
telegrinder/bot/cute_types/message.py,sha256=EtcjcM31JfHm-0BRO6-Q0mLhpxElov3qkCN3CNZZWcs,150406
|
|
16
|
+
telegrinder/bot/cute_types/update.py,sha256=ugzYF5aVDyRSyXIkYlJRjaUR-pZ8sUZHH_-PxXK7HBI,2953
|
|
17
|
+
telegrinder/bot/cute_types/utils.py,sha256=ZgbKOCnwyH1gj-pWPtbnjfid8e5BhGylkYmyv3cQJ-0,2522
|
|
18
|
+
telegrinder/bot/dispatch/__init__.py,sha256=fsiHbCZBmYTxnvrct2KvMicq387nPxiNlPn0VIQcYa8,1452
|
|
19
|
+
telegrinder/bot/dispatch/abc.py,sha256=yVJjjE-TJGWY7ZH0Ak-vd44TguyRPtKqf43TypIVnCA,660
|
|
20
|
+
telegrinder/bot/dispatch/context.py,sha256=WqeZAmKrgOSMGpVwtvojjFesVAlEgFh5pyBXX2FFlxs,2319
|
|
21
|
+
telegrinder/bot/dispatch/dispatch.py,sha256=qyhy-IqPqo0GZt5-PzJGxHH173ZQUksAcp37KKC62fg,6553
|
|
22
|
+
telegrinder/bot/dispatch/handler/__init__.py,sha256=mzchbArrm0eoTEeVKHYrtJX4WSfW5t6T4xDU3-mtYaA,169
|
|
23
|
+
telegrinder/bot/dispatch/handler/abc.py,sha256=P48Dn8goXwNqbCPo0Zvmc8itf-AtBuOQomoNc1nDu28,591
|
|
24
|
+
telegrinder/bot/dispatch/handler/func.py,sha256=_gy8r6FtEBx-mzdpqoboc_buofdkE3iANNYor5FeAdY,4585
|
|
25
|
+
telegrinder/bot/dispatch/handler/message_reply.py,sha256=qMG24tqibPqxZnV7C_VSNqApP9MwdlNPuy_rAeXWqmo,1964
|
|
26
|
+
telegrinder/bot/dispatch/middleware/__init__.py,sha256=qDuTt2ZZKX9UMjPdw5xaaNZdMI-i3P4Px2T8qbYCMJw,61
|
|
27
|
+
telegrinder/bot/dispatch/middleware/abc.py,sha256=O3aiE44XpjE6h9iXYc_uWNZCBxDH1KAFrLej4nsJhUI,413
|
|
28
|
+
telegrinder/bot/dispatch/process.py,sha256=hES2zuhekAWHfOcDTsNPrfngPM1GhOCowQOrj2NTjVo,3407
|
|
29
|
+
telegrinder/bot/dispatch/return_manager/__init__.py,sha256=M9RmSqs5U_JixX_1FT1byMAxdfcC3UGvZAhmmebFDN4,446
|
|
30
|
+
telegrinder/bot/dispatch/return_manager/abc.py,sha256=iKO67VMmEbCLsqRDYmnWle2aL3xsZhjkxVKVXfeoVhE,3559
|
|
31
|
+
telegrinder/bot/dispatch/return_manager/callback_query.py,sha256=FvAmCHZQ59fA7tJdW4lWsG0WdkJJApGNHYKwC-_or_k,652
|
|
32
|
+
telegrinder/bot/dispatch/return_manager/inline_query.py,sha256=lKmg1__LBgFTrWjS2Ckp7LDWVKr8PDfB_awMyh3PnFg,475
|
|
33
|
+
telegrinder/bot/dispatch/return_manager/message.py,sha256=ZrCrvq8wNmz8TTykoVMzneKk11cIqkCFZIOynZ5PjAQ,1160
|
|
34
|
+
telegrinder/bot/dispatch/view/__init__.py,sha256=x8qPwRWosGNTk89tvyiWZhHKvVK2IqFI87D7YTrRKbk,569
|
|
35
|
+
telegrinder/bot/dispatch/view/abc.py,sha256=5r5wY4HWjppmLWVmOLF-NXoOGhcVOqrbN3bLBxt4nl4,6649
|
|
36
|
+
telegrinder/bot/dispatch/view/box.py,sha256=fQwdMJs-5tKNN5iOJKi0JlXjHA1Nu8MhLjwbpb9SDbI,5505
|
|
37
|
+
telegrinder/bot/dispatch/view/callback_query.py,sha256=ALQm-cUFDQggZqwGVOEVodvpTcYKXCebwYDbLcZ36cE,560
|
|
38
|
+
telegrinder/bot/dispatch/view/chat_join_request.py,sha256=y1wQMrPSiqxDHQm7TqdOA-ecAP3rnocYTzQxa7-7vws,447
|
|
39
|
+
telegrinder/bot/dispatch/view/chat_member.py,sha256=VGXp0F_y4b1b3kYNO5Y4QLeoM6pt_DzA1sNysBdObAY,715
|
|
40
|
+
telegrinder/bot/dispatch/view/inline_query.py,sha256=hRwrgfhgS5YF0E6eUrR8FuWVHUMlnA758kG7V049lkE,531
|
|
41
|
+
telegrinder/bot/dispatch/view/message.py,sha256=4JP9uIb9emoEzwMPOtfdnQ1qcgA6ojCmfPA9o0NdFLU,1328
|
|
42
|
+
telegrinder/bot/dispatch/view/raw.py,sha256=I46Ph66KDkEMI4Yzhgr7nprtOmdJ8ZJ-WcAb7fF4LXo,3462
|
|
43
|
+
telegrinder/bot/dispatch/waiter_machine/__init__.py,sha256=6Rt8xVhL7c-k_kNEQ7GX52DJEwVo_1Y4VacqA7rUDyc,246
|
|
44
|
+
telegrinder/bot/dispatch/waiter_machine/machine.py,sha256=6yRuYzeN4QucJSfGO2Zc1sifTwfPA81CY1B_f8w-faU,5869
|
|
45
|
+
telegrinder/bot/dispatch/waiter_machine/middleware.py,sha256=f4IJgjMwACOetmAIo6mey5WYOmO3Sw3OG3pga5ptsCc,3528
|
|
46
|
+
telegrinder/bot/dispatch/waiter_machine/short_state.py,sha256=AYrDN03cdiwFYsuMoK_LQ1AHorswIVHwqkSRstYvTjI,2122
|
|
47
|
+
telegrinder/bot/polling/__init__.py,sha256=OqfIFPS_V6UrCg-vCv9pkMFzTKdNbDP2faBfATs_TGg,94
|
|
48
|
+
telegrinder/bot/polling/abc.py,sha256=-5BpX55SJfDlEJWt15yOXWCizQRrgeY5oiA5eHkm1Nw,434
|
|
49
|
+
telegrinder/bot/polling/polling.py,sha256=Kt6CnrUAqMTaO3LdFfPQp9kyoV6coQez_jknpL6COt4,4716
|
|
50
|
+
telegrinder/bot/rules/__init__.py,sha256=4gxjLyXueNa6-4RoQuK0wsV51GtnRsRp1WvnnC_9XRw,2352
|
|
51
|
+
telegrinder/bot/rules/abc.py,sha256=1TVVfCf76RrFW_9Nr_gmQXRzCpexCHsKB-as2xAmphg,5957
|
|
52
|
+
telegrinder/bot/rules/adapter/__init__.py,sha256=r1U1mky2I5K9ZUiktGILtcGtHUU3LPIz2-G6hs9WWeg,300
|
|
53
|
+
telegrinder/bot/rules/adapter/abc.py,sha256=SXChAektvYOkGxIxjZrIn-BS4AttsWohqMF4zLPc9qM,567
|
|
54
|
+
telegrinder/bot/rules/adapter/errors.py,sha256=qrovMtrhsLfSAwfkh3tAi9ld5fl58SpYMKyju78LOcU,68
|
|
55
|
+
telegrinder/bot/rules/adapter/event.py,sha256=DUvlZHGEagtaaDWH4Z7D7GwVJTdUkWJxCPER2pEMndk,2342
|
|
56
|
+
telegrinder/bot/rules/adapter/node.py,sha256=d_R1Blkw0BkRMp_v-CWK9fklbbXdiMVBoQRRn-2kmdM,1660
|
|
57
|
+
telegrinder/bot/rules/adapter/raw_update.py,sha256=K0bwq3Hh-hIs_xbEYDOgZHMS4r-Zvo3VKs1B3gkJLGA,752
|
|
58
|
+
telegrinder/bot/rules/callback_data.py,sha256=5ZcIapEmRNxX34s0Htese2nKpGxpH9rP25cfs6qPorM,5511
|
|
59
|
+
telegrinder/bot/rules/chat_join.py,sha256=xuyotgsGc_2_jQ5GFp-_3i4bs3ofHDaXoRbWn_Qu-QY,1484
|
|
60
|
+
telegrinder/bot/rules/command.py,sha256=ESJA21HZHWT0RlYzHqOKBa223CTFbqwx_cgvNsWao44,3912
|
|
61
|
+
telegrinder/bot/rules/enum_text.py,sha256=YJ6S2fAQts8zCjCgoL7uUGWlnPOH59rjvA7Si2hKyR4,944
|
|
62
|
+
telegrinder/bot/rules/func.py,sha256=f2FB6jVs1x1rmAJzzkaWml3uX1rJcg8j8E2J4rMWUy0,761
|
|
63
|
+
telegrinder/bot/rules/fuzzy.py,sha256=Kx4S1y6iFqWM3uIUmor47mCmD08NRRJbcciH-dFs19M,676
|
|
64
|
+
telegrinder/bot/rules/inline.py,sha256=56I-TAFbha99HTgM9HXNPpL0KWTwTqhvDFon2cNl1vA,1981
|
|
65
|
+
telegrinder/bot/rules/integer.py,sha256=kyH2MxlUlDF7i--2mwunOP6Xvjvw4V2IxSyjg8EIMuQ,435
|
|
66
|
+
telegrinder/bot/rules/is_from.py,sha256=x7vCbLzqFkFE0GxPgy_WA_mRFa_ogSNTzyJ6PK3Qx0o,3382
|
|
67
|
+
telegrinder/bot/rules/markup.py,sha256=co58K9s3e6T9fyJijjJCRjB8zgNLLdTBLbu42mIml1Y,1104
|
|
68
|
+
telegrinder/bot/rules/mention.py,sha256=xteWbtSjQN3KOXpB8RjuVYu18bGrLxNtVFg6oR-UkxU,435
|
|
69
|
+
telegrinder/bot/rules/message.py,sha256=VFfcEmNrw5sW4EYpk2XgLkSE5-rRr7sWC2dFE26Q3cI,442
|
|
70
|
+
telegrinder/bot/rules/message_entities.py,sha256=gBmhDTWVNzL5oBRk6h7LfpWkLirnuGF8G_oAo16vGLc,1111
|
|
71
|
+
telegrinder/bot/rules/node.py,sha256=IP7Ke-4hILb12XHNIresMf_87kXhlLfKOloShoQvWN0,892
|
|
72
|
+
telegrinder/bot/rules/regex.py,sha256=mjXXPX-NB2e3gFU6LFihLnKANcgUoAL5lOnfmhC3Qnc,1153
|
|
73
|
+
telegrinder/bot/rules/rule_enum.py,sha256=35GwPKLBTG_ESn4TZLcFJTLNjYXAi_d9wrfIDexoEH8,2113
|
|
74
|
+
telegrinder/bot/rules/start.py,sha256=3ciA28m9JNcM-1H2YnLrUNyS1Y4UsyYPR5MClrpdAdA,1154
|
|
75
|
+
telegrinder/bot/rules/text.py,sha256=kmiL-mG_T4eoJXbYyCacf6ZvvKmKgNrEaIo2RTMBG0E,1031
|
|
76
|
+
telegrinder/bot/rules/update.py,sha256=T-sJGnpWkAZ_uxAdrRqWi33FKNlUA3wV_-vp87x0lsI,465
|
|
77
|
+
telegrinder/bot/scenario/__init__.py,sha256=nnPjdxdvjoEYYMRUEfWvIhZStiY1C984x1azdRRP9II,136
|
|
78
|
+
telegrinder/bot/scenario/abc.py,sha256=3AZYRjZlkbDtyFbsKdZ6BefzWYlJ0DOrGwh8jI3nzv4,474
|
|
79
|
+
telegrinder/bot/scenario/checkbox.py,sha256=5M-l24WK8uSvMZxVN_beE282zRtUPkDfKU8YW-EfAUk,4164
|
|
80
|
+
telegrinder/bot/scenario/choice.py,sha256=YAWY2mEqon9cO93Kc25emR9U4bPIKHFg8APIJR3APZo,1441
|
|
81
|
+
telegrinder/client/__init__.py,sha256=ZiS1Wb_l_kv3FHzEEi1oXtFLwlA_HXmWOzeN0xA3E7Y,104
|
|
82
|
+
telegrinder/client/abc.py,sha256=OxsTX_PLYBEeFT9zpidFUzAbQL9BM7rQqru7zdn5DiQ,1611
|
|
83
|
+
telegrinder/client/aiohttp.py,sha256=AqmuHd6Z3zy96YBe7xIMC4U8Hi9SA7j-0EI7xYE3ZCU,4085
|
|
84
|
+
telegrinder/model.py,sha256=2qhceVzDO7BntIQqD0eiGkek_yeyEpvfbyFeSuq816g,7233
|
|
85
|
+
telegrinder/modules.py,sha256=GDGBT79wTcC_vEG4-1zWe4E5fMNbp6-n6AwJoYF_Oek,7945
|
|
86
|
+
telegrinder/msgspec_json.py,sha256=phfyhUvYYZUGEcI6RAyRx9lnARPK_Fqtw3Q0MEJnuUk,226
|
|
87
|
+
telegrinder/msgspec_utils.py,sha256=07W8hzakLhVwGig69IpDSu_k1OksRgmRH2260826VQA,10782
|
|
88
|
+
telegrinder/node/__init__.py,sha256=OYjRrJd3ryei-JNKx-d-EQw84v2XWkB47H00Qcym9Fw,1430
|
|
89
|
+
telegrinder/node/attachment.py,sha256=n79uAt1ixgnr8qjBMNstu36qe4Fli63kSvpgW1WO7S8,3061
|
|
90
|
+
telegrinder/node/base.py,sha256=KE67MDzsrot2ecs8AbLlcczihhqbqMNTRgSppmsehOI,5528
|
|
91
|
+
telegrinder/node/callback_query.py,sha256=aDXnDGQb6H7im5J8A-M3vfZHczg0PrFAjUexIK2dTUM,507
|
|
92
|
+
telegrinder/node/command.py,sha256=S6povhUFXJ3o5keuOzTP7nbIrZ16KKkQNK3xji1LPb4,874
|
|
93
|
+
telegrinder/node/composer.py,sha256=D7dVO-2VtTrE-09ODhHd-BUhV53SxwWtihC03yTpT-o,6582
|
|
94
|
+
telegrinder/node/container.py,sha256=evExZxEy-n4NLpR0W_b75GjRTZLD42I6Z7w_wXljDIA,658
|
|
95
|
+
telegrinder/node/event.py,sha256=1FKQXCbsC-xl4bcYxTv6NRVzz39LNkW4-9JAE-BPFmE,2098
|
|
96
|
+
telegrinder/node/me.py,sha256=9RhRLsIe1e-yDLZ6ehfmGvhhLYRMu1VAjkSri9H0V8E,378
|
|
97
|
+
telegrinder/node/message.py,sha256=TbT2zeR9kVR-QAqVkRAmtse4U0BHoWfQ4esKMKLzm7A,449
|
|
98
|
+
telegrinder/node/polymorphic.py,sha256=kvjC8CaB5e-elYU4cPokFmAI6Sy6g1GRXxQL1fyd7YY,1661
|
|
99
|
+
telegrinder/node/rule.py,sha256=UWrX3ep9yybROE1Rac1uPsW5WA8o6v1wM4rUkZfpsxg,2600
|
|
100
|
+
telegrinder/node/scope.py,sha256=AU2YSB2E3tf0rAdoa1AtbcpTCKguuprl6eulBsgUuxM,677
|
|
101
|
+
telegrinder/node/source.py,sha256=hKsgVg20Ge6vQ4Da3RQoJGvN93z3089s_v9sfm7sF6c,1896
|
|
102
|
+
telegrinder/node/text.py,sha256=Jik937Pn6JGAKiplHmHseWDWoflnK5yirvvG_vrUxl8,581
|
|
103
|
+
telegrinder/node/tools/__init__.py,sha256=iyjs82g3brYGzpPsUQaoK6_r7YuQhRkJ61YjjuPOx9E,67
|
|
104
|
+
telegrinder/node/tools/generator.py,sha256=xuhZ5-TwoctFLlDBdYvjOQxHTpqC4IAdnkzMViVSsUM,1046
|
|
105
|
+
telegrinder/node/update.py,sha256=dr6w9bccH2m47Z1FX-twBzg9RfFz8Zh2L3EiuUcecY8,268
|
|
106
|
+
telegrinder/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
107
|
+
telegrinder/rules.py,sha256=BFB8RFwKKxqs9HFfo_p0RfulQNonPZAX8cHpmnG7qCU,39
|
|
108
|
+
telegrinder/tools/__init__.py,sha256=N_EGjedn096mPw1Tozc4uMCSXH2h9NCFnKuubFZu5ec,2837
|
|
109
|
+
telegrinder/tools/buttons.py,sha256=4Mc8KZ8i8l2XSiJaybbO23ywIx8T3bQiMH0UkyXuj4I,2905
|
|
110
|
+
telegrinder/tools/error_handler/__init__.py,sha256=WmYWZCNhhSk32j4lIOltEwzoYUx086TGTbOF5h3Ps7s,207
|
|
111
|
+
telegrinder/tools/error_handler/abc.py,sha256=w5t2sWa_xt9iy7pdphiFs1kgmsll7A7eaPbm3Yes8t0,888
|
|
112
|
+
telegrinder/tools/error_handler/error.py,sha256=uLcG-wqyOeCEB45m8vMcGy5kZ87bGHUS_-fPw2cGE9s,221
|
|
113
|
+
telegrinder/tools/error_handler/error_handler.py,sha256=prWsknbOCirZjBbqMIje6p7s2OOs8gfB_5QSfX9WOpY,6375
|
|
114
|
+
telegrinder/tools/formatting/__init__.py,sha256=1tFuJjMpDphCIOR4uXQhptyLHuAZ26mYSFx_BQwL5Lo,1459
|
|
115
|
+
telegrinder/tools/formatting/html.py,sha256=h8hyN6t6cJfMBjMf-XWZixVnweoAuLUIJ1xjg9JOJDw,8736
|
|
116
|
+
telegrinder/tools/formatting/links.py,sha256=dYJy2qPxa4YGHYqSSCTv-6hXz0Aa0AGuzsLXwbxPZ9A,1112
|
|
117
|
+
telegrinder/tools/formatting/spec_html_formats.py,sha256=I-OULqlof8NOeSNGBddKkudqMLjsMAQ02Pc6qH_fNRQ,2617
|
|
118
|
+
telegrinder/tools/global_context/__init__.py,sha256=5pF9growKd28WO739wk_DZUqCDw5hxs6eUcDtxTosX8,290
|
|
119
|
+
telegrinder/tools/global_context/abc.py,sha256=twwAmbTk49KGl_POImr4yj6POr-zdx8mz74McuphZH0,1644
|
|
120
|
+
telegrinder/tools/global_context/global_context.py,sha256=9gA5_ikMA3Lqi9ng_MCxwGHiSWSLjZ-4XQzAOiIegjQ,13669
|
|
121
|
+
telegrinder/tools/global_context/telegrinder_ctx.py,sha256=U6DHIC-B40HLWojwU3tAui256VcZpTpUmYhSSqV0vDY,663
|
|
122
|
+
telegrinder/tools/i18n/__init__.py,sha256=CLUoiCJzOZzF-dqDIHZ5Fc8QUa38cYhIG4WF-ctPLfE,288
|
|
123
|
+
telegrinder/tools/i18n/base.py,sha256=jxJVYiTplJaNeklkGiin-m7BkfZiac2fbVXTEdhNw6o,726
|
|
124
|
+
telegrinder/tools/i18n/middleware/__init__.py,sha256=y5ZX6s3fOix_Yn98UNO8VqQ7ihJbQ_e5Uz01RgL7pHg,82
|
|
125
|
+
telegrinder/tools/i18n/middleware/base.py,sha256=gGqcPxJLLC3f6XfV_0-drhr27TND40cL1Z5sNmC84lo,663
|
|
126
|
+
telegrinder/tools/i18n/simple.py,sha256=yiaGtEAaMkrzYV3O7esA2wi3A2n9YyndxKPKp8Fs834,1567
|
|
127
|
+
telegrinder/tools/kb_set/__init__.py,sha256=k1KCQTnvEgJ2y4KlghhJWOh5rccwg_27cs8264NtMmk,156
|
|
128
|
+
telegrinder/tools/kb_set/base.py,sha256=mbZs-ViUErfSibzyN064IqZp76LBJPg3NB4D9v4VFtg,243
|
|
129
|
+
telegrinder/tools/kb_set/yaml.py,sha256=glk27r0L9Y8ibaPmTHMAEJZw-ED-ehmSo_NdJNKkrNs,2007
|
|
130
|
+
telegrinder/tools/keyboard.py,sha256=gsHGqYkpaKgyzUwNLUz8lvQjlKt6VqHfeKrkFS14HiE,3673
|
|
131
|
+
telegrinder/tools/limited_dict.py,sha256=tb1WT4P3Oia5CsCBXTHzlFjrPnIgf9eHCkQ0zhAbEUg,1078
|
|
132
|
+
telegrinder/tools/loop_wrapper/__init__.py,sha256=ZQ5jmE1lOKnqJlMZ9k2OYmjvOEhOlHPijUWqZ4nHIgk,165
|
|
133
|
+
telegrinder/tools/loop_wrapper/abc.py,sha256=ET_Dp-kRz75Jo1fZB3qofUgEXN4FqlU0xH2diESKGCM,266
|
|
134
|
+
telegrinder/tools/loop_wrapper/loop_wrapper.py,sha256=UL3seGtMJQGc4WJjYrRvzClSUQzgVjpqriydeO_eXTM,6838
|
|
135
|
+
telegrinder/tools/magic.py,sha256=6Y-LGS0fs2AmeelKT46OFeHMeL48SFt37-c9Oh7ExyA,3578
|
|
136
|
+
telegrinder/tools/parse_mode.py,sha256=JyQ-x9YAMPLhIIiUX01acyKkpWgs5TBA07W-iUyPHpE,92
|
|
137
|
+
telegrinder/types/__init__.py,sha256=zwqYH_BevwejjvnNmbslt42646_3YKsdEdW3cisd12c,6588
|
|
138
|
+
telegrinder/types/enums.py,sha256=Jk1agclB7dqJVJf8uvZKvmOfHkN6BBSZGj95WFVzmO8,18995
|
|
139
|
+
telegrinder/types/methods.py,sha256=EPMLUNkAFsfXolb9eQZy0p4vrRsAoQZpmAJ5yadFEx8,198025
|
|
140
|
+
telegrinder/types/objects.py,sha256=spFyqkPqeHKCjyDgej58yketWOBahH2MjNcLn_0Y7_U,243731
|
|
141
|
+
telegrinder/verification_utils.py,sha256=ZUgHsouZjs930D5rI_w7VGy0ub69vovwKXeKjqgrSNc,1028
|
|
142
|
+
telegrinder-0.1.dev171.dist-info/LICENSE,sha256=Q0tKgU8mPOCQAkc6m__BrNIpRge8mPBQJDd59s21NZo,1095
|
|
143
|
+
telegrinder-0.1.dev171.dist-info/METADATA,sha256=9EOupgVlYbQZg0byXZM-L0ZJEzogMt9hqHfzvILWZbU,3007
|
|
144
|
+
telegrinder-0.1.dev171.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
145
|
+
telegrinder-0.1.dev171.dist-info/RECORD,,
|