telegrinder 0.1.dev162__py3-none-any.whl → 0.1.dev163__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/bot/bot.py +7 -11
- telegrinder/bot/dispatch/dispatch.py +2 -3
- telegrinder/bot/dispatch/view/box.py +6 -6
- telegrinder/bot/rules/__init__.py +4 -0
- telegrinder/bot/rules/is_from.py +18 -3
- telegrinder/client/aiohttp.py +1 -2
- telegrinder/msgspec_utils.py +51 -8
- telegrinder/node/source.py +2 -3
- telegrinder/tools/error_handler/error_handler.py +2 -2
- telegrinder/tools/global_context/global_context.py +7 -5
- telegrinder/tools/magic.py +1 -1
- telegrinder/types/objects.py +19 -2
- {telegrinder-0.1.dev162.dist-info → telegrinder-0.1.dev163.dist-info}/METADATA +1 -1
- {telegrinder-0.1.dev162.dist-info → telegrinder-0.1.dev163.dist-info}/RECORD +16 -16
- {telegrinder-0.1.dev162.dist-info → telegrinder-0.1.dev163.dist-info}/LICENSE +0 -0
- {telegrinder-0.1.dev162.dist-info → telegrinder-0.1.dev163.dist-info}/WHEEL +0 -0
telegrinder/bot/bot.py
CHANGED
|
@@ -11,11 +11,7 @@ PollingT = typing.TypeVar("PollingT", bound=ABCPolling, default=Polling)
|
|
|
11
11
|
LoopWrapperT = typing.TypeVar("LoopWrapperT", bound=ABCLoopWrapper, default=LoopWrapper)
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
class Telegrinder(typing.Generic[DispatchT, PollingT, LoopWrapperT]):
|
|
15
|
-
dispatch: DispatchT
|
|
16
|
-
polling: PollingT
|
|
17
|
-
loop_wrapper: LoopWrapperT
|
|
18
|
-
|
|
14
|
+
class Telegrinder(typing.Generic[DispatchT, PollingT, LoopWrapperT]):
|
|
19
15
|
def __init__(
|
|
20
16
|
self,
|
|
21
17
|
api: API,
|
|
@@ -25,9 +21,9 @@ class Telegrinder(typing.Generic[DispatchT, PollingT, LoopWrapperT]):
|
|
|
25
21
|
loop_wrapper: LoopWrapperT | None = None,
|
|
26
22
|
) -> None:
|
|
27
23
|
self.api = api
|
|
28
|
-
self.dispatch = dispatch or Dispatch()
|
|
29
|
-
self.polling = polling or Polling(api)
|
|
30
|
-
self.loop_wrapper = loop_wrapper or LoopWrapper()
|
|
24
|
+
self.dispatch = typing.cast(DispatchT, dispatch or Dispatch())
|
|
25
|
+
self.polling = typing.cast(PollingT, polling or Polling(api))
|
|
26
|
+
self.loop_wrapper = typing.cast(LoopWrapperT, loop_wrapper or LoopWrapper())
|
|
31
27
|
|
|
32
28
|
@property
|
|
33
29
|
def on(self) -> DispatchT:
|
|
@@ -38,7 +34,7 @@ class Telegrinder(typing.Generic[DispatchT, PollingT, LoopWrapperT]):
|
|
|
38
34
|
return
|
|
39
35
|
await self.api.delete_webhook()
|
|
40
36
|
|
|
41
|
-
async def run_polling(self, offset: int = 0, skip_updates: bool = False) -> None:
|
|
37
|
+
async def run_polling(self, *, offset: int = 0, skip_updates: bool = False) -> None:
|
|
42
38
|
if skip_updates:
|
|
43
39
|
logger.debug("Dropping pending updates")
|
|
44
40
|
await self.reset_webhook()
|
|
@@ -50,9 +46,9 @@ class Telegrinder(typing.Generic[DispatchT, PollingT, LoopWrapperT]):
|
|
|
50
46
|
logger.debug("Received update (update_id={})", update.update_id)
|
|
51
47
|
self.loop_wrapper.add_task(self.dispatch.feed(update, self.api))
|
|
52
48
|
|
|
53
|
-
def run_forever(self, offset: int = 0, skip_updates: bool = False) -> None:
|
|
49
|
+
def run_forever(self, *, offset: int = 0, skip_updates: bool = False) -> None:
|
|
54
50
|
logger.debug("Running blocking polling (id={})", self.api.id)
|
|
55
|
-
self.loop_wrapper.add_task(self.run_polling(offset, skip_updates=skip_updates))
|
|
51
|
+
self.loop_wrapper.add_task(self.run_polling(offset=offset, skip_updates=skip_updates))
|
|
56
52
|
self.loop_wrapper.run_event_loop()
|
|
57
53
|
|
|
58
54
|
|
|
@@ -17,12 +17,11 @@ from .handler.func import ErrorHandlerT
|
|
|
17
17
|
from .view.box import CallbackQueryViewT, InlineQueryViewT, MessageViewT, ViewBox
|
|
18
18
|
|
|
19
19
|
T = typing.TypeVar("T")
|
|
20
|
-
|
|
21
|
-
Event = typing.TypeVar("Event", bound=BaseCute)
|
|
22
20
|
R = typing.TypeVar("R")
|
|
23
21
|
P = typing.ParamSpec("P")
|
|
22
|
+
Event = typing.TypeVar("Event", bound=BaseCute)
|
|
24
23
|
|
|
25
|
-
DEFAULT_DATACLASS = Update
|
|
24
|
+
DEFAULT_DATACLASS: typing.Final[type[Update]] = Update
|
|
26
25
|
|
|
27
26
|
|
|
28
27
|
@dataclasses.dataclass(repr=False, kw_only=True)
|
|
@@ -18,14 +18,14 @@ MessageViewT = typing.TypeVar("MessageViewT", bound=ABCView, default=MessageView
|
|
|
18
18
|
|
|
19
19
|
@dataclasses.dataclass(kw_only=True)
|
|
20
20
|
class ViewBox(typing.Generic[CallbackQueryViewT, InlineQueryViewT, MessageViewT]):
|
|
21
|
-
callback_query: CallbackQueryViewT = dataclasses.field(
|
|
22
|
-
default_factory=lambda: CallbackQueryView(),
|
|
21
|
+
callback_query: CallbackQueryViewT = dataclasses.field(
|
|
22
|
+
default_factory=lambda: typing.cast(CallbackQueryViewT, CallbackQueryView()),
|
|
23
23
|
)
|
|
24
|
-
inline_query: InlineQueryViewT = dataclasses.field(
|
|
25
|
-
default_factory=lambda: InlineQueryView(),
|
|
24
|
+
inline_query: InlineQueryViewT = dataclasses.field(
|
|
25
|
+
default_factory=lambda: typing.cast(InlineQueryViewT, InlineQueryView()),
|
|
26
26
|
)
|
|
27
|
-
message: MessageViewT = dataclasses.field(
|
|
28
|
-
default_factory=lambda: MessageView(),
|
|
27
|
+
message: MessageViewT = dataclasses.field(
|
|
28
|
+
default_factory=lambda: typing.cast(MessageViewT, MessageView()),
|
|
29
29
|
)
|
|
30
30
|
|
|
31
31
|
def get_views(self) -> dict[str, ABCView]:
|
|
@@ -30,6 +30,8 @@ from .is_from import (
|
|
|
30
30
|
IsDartDice,
|
|
31
31
|
IsDice,
|
|
32
32
|
IsForum,
|
|
33
|
+
IsForward,
|
|
34
|
+
IsForwardType,
|
|
33
35
|
IsGroup,
|
|
34
36
|
IsLanguageCode,
|
|
35
37
|
IsPremium,
|
|
@@ -78,6 +80,8 @@ __all__ = (
|
|
|
78
80
|
"IsDartDice",
|
|
79
81
|
"IsDice",
|
|
80
82
|
"IsForum",
|
|
83
|
+
"IsForward",
|
|
84
|
+
"IsForwardType",
|
|
81
85
|
"IsGroup",
|
|
82
86
|
"IsLanguageCode",
|
|
83
87
|
"IsPremium",
|
telegrinder/bot/rules/is_from.py
CHANGED
|
@@ -12,13 +12,13 @@ T = typing.TypeVar("T", bound=BaseCute)
|
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
@typing.runtime_checkable
|
|
15
|
-
class
|
|
15
|
+
class FromUserProto(typing.Protocol):
|
|
16
16
|
from_: User | Option[User]
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
class HasFrom(ABCRule[T]):
|
|
20
20
|
async def check(self, event: T, ctx: Context) -> bool:
|
|
21
|
-
return isinstance(event,
|
|
21
|
+
return isinstance(event, FromUserProto) and bool(event.from_)
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
class HasDice(MessageRule):
|
|
@@ -26,6 +26,19 @@ class HasDice(MessageRule):
|
|
|
26
26
|
return bool(message.dice)
|
|
27
27
|
|
|
28
28
|
|
|
29
|
+
class IsForward(MessageRule):
|
|
30
|
+
async def check(self, message: Message, ctx: Context) -> bool:
|
|
31
|
+
return bool(message.forward_origin)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class IsForwardType(MessageRule, requires=[IsForward()]):
|
|
35
|
+
def __init__(self, fwd_type: typing.Literal["user", "hidden_user", "chat", "channel"], /) -> None:
|
|
36
|
+
self.fwd_type = fwd_type
|
|
37
|
+
|
|
38
|
+
async def check(self, message: Message, ctx: Context) -> bool:
|
|
39
|
+
return message.forward_origin.unwrap().v.type == self.fwd_type
|
|
40
|
+
|
|
41
|
+
|
|
29
42
|
class IsReply(MessageRule):
|
|
30
43
|
async def check(self, message: Message, ctx: Context) -> bool:
|
|
31
44
|
return bool(message.reply_to_message)
|
|
@@ -58,7 +71,7 @@ class IsLanguageCode(MessageRule, requires=[HasFrom()]):
|
|
|
58
71
|
async def check(self, message: Message, ctx: Context) -> bool:
|
|
59
72
|
if not message.from_user.language_code:
|
|
60
73
|
return False
|
|
61
|
-
return message.from_user.language_code.
|
|
74
|
+
return message.from_user.language_code.unwrap() in self.lang_codes
|
|
62
75
|
|
|
63
76
|
|
|
64
77
|
class IsForum(MessageRule):
|
|
@@ -141,6 +154,8 @@ __all__ = (
|
|
|
141
154
|
"IsDartDice",
|
|
142
155
|
"IsDice",
|
|
143
156
|
"IsForum",
|
|
157
|
+
"IsForward",
|
|
158
|
+
"IsForwardType",
|
|
144
159
|
"IsGroup",
|
|
145
160
|
"IsLanguageCode",
|
|
146
161
|
"IsPremium",
|
telegrinder/client/aiohttp.py
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import secrets
|
|
2
1
|
import ssl
|
|
3
2
|
import typing
|
|
4
3
|
|
|
@@ -31,7 +30,7 @@ class AiohttpClient(ABCClient):
|
|
|
31
30
|
self.__class__.__name__,
|
|
32
31
|
self.session,
|
|
33
32
|
self.timeout,
|
|
34
|
-
|
|
33
|
+
True if self.session is None else self.session.closed,
|
|
35
34
|
)
|
|
36
35
|
|
|
37
36
|
async def request_raw(
|
telegrinder/msgspec_utils.py
CHANGED
|
@@ -4,9 +4,6 @@ import fntypes.option
|
|
|
4
4
|
import msgspec
|
|
5
5
|
from fntypes.co import Error, Ok, Result, Variative
|
|
6
6
|
|
|
7
|
-
T = typing.TypeVar("T")
|
|
8
|
-
Ts = typing.TypeVarTuple("Ts")
|
|
9
|
-
|
|
10
7
|
if typing.TYPE_CHECKING:
|
|
11
8
|
from datetime import datetime
|
|
12
9
|
|
|
@@ -18,6 +15,7 @@ else:
|
|
|
18
15
|
|
|
19
16
|
datetime = type("datetime", (dt,), {})
|
|
20
17
|
|
|
18
|
+
|
|
21
19
|
class OptionMeta(type):
|
|
22
20
|
def __instancecheck__(cls, __instance: typing.Any) -> bool:
|
|
23
21
|
return isinstance(__instance, fntypes.option.Some | fntypes.option.Nothing)
|
|
@@ -26,6 +24,9 @@ else:
|
|
|
26
24
|
class Option(typing.Generic[Value], metaclass=OptionMeta):
|
|
27
25
|
pass
|
|
28
26
|
|
|
27
|
+
T = typing.TypeVar("T")
|
|
28
|
+
Ts = typing.TypeVarTuple("Ts")
|
|
29
|
+
|
|
29
30
|
DecHook: typing.TypeAlias = typing.Callable[[type[T], typing.Any], object]
|
|
30
31
|
EncHook: typing.TypeAlias = typing.Callable[[T], typing.Any]
|
|
31
32
|
|
|
@@ -90,6 +91,32 @@ def variative_dec_hook(tp: type[Variative], obj: typing.Any) -> Variative:
|
|
|
90
91
|
|
|
91
92
|
|
|
92
93
|
class Decoder:
|
|
94
|
+
"""Class `Decoder` for `msgspec` module with decode hook
|
|
95
|
+
for objects with the specified type.
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
import enum
|
|
99
|
+
|
|
100
|
+
from datetime import datetime as dt
|
|
101
|
+
|
|
102
|
+
class Digit(enum.IntEnum):
|
|
103
|
+
ONE = 1
|
|
104
|
+
TWO = 2
|
|
105
|
+
THREE = 3
|
|
106
|
+
|
|
107
|
+
decoder = Encoder()
|
|
108
|
+
decoder.dec_hooks[dt] = lambda t, timestamp: t.fromtimestamp(timestamp)
|
|
109
|
+
|
|
110
|
+
decoder.dec_hook(dt, 1713354732) #> datetime.datetime(2024, 4, 17, 14, 52, 12)
|
|
111
|
+
decoder.dec_hook(int, "123") #> TypeError: Unknown type `int`. You can implement decode hook for this type.
|
|
112
|
+
|
|
113
|
+
decoder.convert("123", type=int, strict=False) #> 123
|
|
114
|
+
decoder.convert(1, type=Digit) #> <Digit.ONE: 1>
|
|
115
|
+
|
|
116
|
+
decoder.decode(b'{"digit":3}', type=dict[str, Digit]) #> {'digit': <Digit.THREE: 3>}
|
|
117
|
+
```
|
|
118
|
+
"""
|
|
119
|
+
|
|
93
120
|
def __init__(self) -> None:
|
|
94
121
|
self.dec_hooks: dict[typing.Any, DecHook[typing.Any]] = {
|
|
95
122
|
Option: option_dec_hook,
|
|
@@ -119,7 +146,7 @@ class Decoder:
|
|
|
119
146
|
type: type[T] = dict,
|
|
120
147
|
strict: bool = True,
|
|
121
148
|
from_attributes: bool = False,
|
|
122
|
-
builtin_types: typing.Iterable[type] | None = None,
|
|
149
|
+
builtin_types: typing.Iterable[type[typing.Any]] | None = None,
|
|
123
150
|
str_keys: bool = False,
|
|
124
151
|
) -> T:
|
|
125
152
|
return msgspec.convert(
|
|
@@ -166,6 +193,21 @@ class Decoder:
|
|
|
166
193
|
|
|
167
194
|
|
|
168
195
|
class Encoder:
|
|
196
|
+
"""Class `Encoder` for `msgspec` module with encode hooks for objects.
|
|
197
|
+
|
|
198
|
+
```
|
|
199
|
+
from datetime import datetime as dt
|
|
200
|
+
|
|
201
|
+
encoder = Encoder()
|
|
202
|
+
encoder.enc_hooks[dt] = lambda d: int(d.timestamp())
|
|
203
|
+
|
|
204
|
+
encoder.enc_hook(dt.now()) #> 1713354732
|
|
205
|
+
encoder.enc_hook(123) #> NotImplementedError: Not implemented encode hook for object of type `int`.
|
|
206
|
+
|
|
207
|
+
encoder.encode({'digit': Digit.ONE}) #> '{"digit":1}'
|
|
208
|
+
```
|
|
209
|
+
"""
|
|
210
|
+
|
|
169
211
|
def __init__(self) -> None:
|
|
170
212
|
self.enc_hooks: dict[typing.Any, EncHook[typing.Any]] = {
|
|
171
213
|
fntypes.option.Some: lambda opt: opt.value,
|
|
@@ -174,9 +216,10 @@ class Encoder:
|
|
|
174
216
|
datetime: lambda date: int(date.timestamp()),
|
|
175
217
|
}
|
|
176
218
|
|
|
177
|
-
def add_dec_hook(self,
|
|
219
|
+
def add_dec_hook(self, t: type[T]):
|
|
178
220
|
def decorator(func: EncHook[T]) -> EncHook[T]:
|
|
179
|
-
|
|
221
|
+
encode_hook = self.enc_hooks.setdefault(get_origin(t), func)
|
|
222
|
+
return func if encode_hook is not func else encode_hook
|
|
180
223
|
|
|
181
224
|
return decorator
|
|
182
225
|
|
|
@@ -194,11 +237,11 @@ class Encoder:
|
|
|
194
237
|
...
|
|
195
238
|
|
|
196
239
|
@typing.overload
|
|
197
|
-
def encode(self, obj: typing.Any, *, as_str: typing.Literal[True]
|
|
240
|
+
def encode(self, obj: typing.Any, *, as_str: typing.Literal[True]) -> str:
|
|
198
241
|
...
|
|
199
242
|
|
|
200
243
|
@typing.overload
|
|
201
|
-
def encode(self, obj: typing.Any, *, as_str: typing.Literal[False]
|
|
244
|
+
def encode(self, obj: typing.Any, *, as_str: typing.Literal[False]) -> bytes:
|
|
202
245
|
...
|
|
203
246
|
|
|
204
247
|
def encode(self, obj: typing.Any, *, as_str: bool = True) -> str | bytes:
|
telegrinder/node/source.py
CHANGED
|
@@ -2,7 +2,6 @@ import dataclasses
|
|
|
2
2
|
import typing
|
|
3
3
|
|
|
4
4
|
from telegrinder.api import API
|
|
5
|
-
from telegrinder.msgspec_utils import Nothing, Option
|
|
6
5
|
from telegrinder.types import Chat, Message
|
|
7
6
|
|
|
8
7
|
from .base import DataNode
|
|
@@ -13,14 +12,14 @@ from .message import MessageNode
|
|
|
13
12
|
class Source(DataNode):
|
|
14
13
|
api: API
|
|
15
14
|
chat: Chat
|
|
16
|
-
thread_id:
|
|
15
|
+
thread_id: int | None = None
|
|
17
16
|
|
|
18
17
|
@classmethod
|
|
19
18
|
async def compose(cls, message: MessageNode) -> typing.Self:
|
|
20
19
|
return cls(
|
|
21
20
|
api=message.ctx_api,
|
|
22
21
|
chat=message.chat,
|
|
23
|
-
thread_id=message.message_thread_id,
|
|
22
|
+
thread_id=message.message_thread_id.unwrap_or_none(),
|
|
24
23
|
)
|
|
25
24
|
|
|
26
25
|
async def send(self, text: str) -> Message:
|
|
@@ -74,9 +74,9 @@ class Catcher(typing.Generic[EventT]):
|
|
|
74
74
|
|
|
75
75
|
def match_exception(self, exception: BaseException) -> bool:
|
|
76
76
|
for exc in self.exceptions:
|
|
77
|
-
if isinstance(exc, type) and type(exception)
|
|
77
|
+
if isinstance(exc, type) and type(exception) is exc:
|
|
78
78
|
return True
|
|
79
|
-
if isinstance(exc, object) and type(exception)
|
|
79
|
+
if isinstance(exc, object) and type(exception) is type(exc):
|
|
80
80
|
return True if not exc.args else exc.args == exception.args
|
|
81
81
|
return False
|
|
82
82
|
|
|
@@ -23,11 +23,13 @@ else:
|
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
def type_check(value: object, value_type: type[T]) -> typing.TypeGuard[T]:
|
|
26
|
-
|
|
27
|
-
True
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
26
|
+
if value_type in (typing.Any, object):
|
|
27
|
+
return True
|
|
28
|
+
match msgspec_convert(value, value_type):
|
|
29
|
+
case Ok(v):
|
|
30
|
+
return type(value) is type(v)
|
|
31
|
+
case Error(_):
|
|
32
|
+
return False
|
|
31
33
|
|
|
32
34
|
|
|
33
35
|
def is_dunder(name: str) -> bool:
|
telegrinder/tools/magic.py
CHANGED
|
@@ -9,7 +9,7 @@ if typing.TYPE_CHECKING:
|
|
|
9
9
|
T = typing.TypeVar("T", bound=ABCRule)
|
|
10
10
|
|
|
11
11
|
FuncType: typing.TypeAlias = types.FunctionType | typing.Callable[..., typing.Any]
|
|
12
|
-
TRANSLATIONS_KEY = "_translations"
|
|
12
|
+
TRANSLATIONS_KEY: typing.Final[str] = "_translations"
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
def resolve_arg_names(func: FuncType, start_idx: int = 1) -> tuple[str, ...]:
|
telegrinder/types/objects.py
CHANGED
|
@@ -2864,6 +2864,23 @@ class Birthdate(Model):
|
|
|
2864
2864
|
year: Option[int] = Nothing
|
|
2865
2865
|
"""Optional. Year of the user's birth."""
|
|
2866
2866
|
|
|
2867
|
+
@property
|
|
2868
|
+
def is_birthday(self) -> bool:
|
|
2869
|
+
"""True, if today is a user's birthday."""
|
|
2870
|
+
|
|
2871
|
+
now = datetime.now()
|
|
2872
|
+
return now.month == self.month and now.day == self.day
|
|
2873
|
+
|
|
2874
|
+
@property
|
|
2875
|
+
def age(self) -> Option[int]:
|
|
2876
|
+
"""Optional. Contains the user's age, if the user has a birth year specified."""
|
|
2877
|
+
|
|
2878
|
+
return self.year.map(
|
|
2879
|
+
lambda year: (
|
|
2880
|
+
(datetime.now() - datetime(year, self.month, self.day)) // 365
|
|
2881
|
+
).days
|
|
2882
|
+
)
|
|
2883
|
+
|
|
2867
2884
|
|
|
2868
2885
|
class BusinessIntro(Model):
|
|
2869
2886
|
"""Object `BusinessIntro`, see the [documentation](https://core.telegram.org/bots/api#businessintro).
|
|
@@ -2902,11 +2919,11 @@ class BusinessOpeningHoursInterval(Model):
|
|
|
2902
2919
|
|
|
2903
2920
|
opening_minute: int
|
|
2904
2921
|
"""The minute's sequence number in a week, starting on Monday, marking the
|
|
2905
|
-
start of the time interval during which the business is open; 0 - 7 24 60."""
|
|
2922
|
+
start of the time interval during which the business is open; 0 - 7 * 24 * 60."""
|
|
2906
2923
|
|
|
2907
2924
|
closing_minute: int
|
|
2908
2925
|
"""The minute's sequence number in a week, starting on Monday, marking the
|
|
2909
|
-
end of the time interval during which the business is open; 0 - 8 24 60."""
|
|
2926
|
+
end of the time interval during which the business is open; 0 - 8 * 24 * 60."""
|
|
2910
2927
|
|
|
2911
2928
|
|
|
2912
2929
|
class BusinessOpeningHours(Model):
|
|
@@ -5,7 +5,7 @@ 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=iOmbJ9bXL5P2NG_cO4n8lGyAr-QTv5idfwo4xtsdWjc,2195
|
|
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
|
|
@@ -17,7 +17,7 @@ telegrinder/bot/dispatch/__init__.py,sha256=o10t98PY1BuIGaJcloxfbgUYp0bf5ZqAaBQS
|
|
|
17
17
|
telegrinder/bot/dispatch/abc.py,sha256=3bOKEFJTKarwqWTDqhscVw2U5FBllJ-TyId-aUPzb7c,454
|
|
18
18
|
telegrinder/bot/dispatch/composition.py,sha256=0UbXqTxcs0X_DGB5COR6n_9RZBIhn83O2-1UNVoZQ8E,2558
|
|
19
19
|
telegrinder/bot/dispatch/context.py,sha256=Uk_GFN3wlLuS5BGgBaLfLxU8xBp_yB4fPJcuzEd1ti4,2093
|
|
20
|
-
telegrinder/bot/dispatch/dispatch.py,sha256=
|
|
20
|
+
telegrinder/bot/dispatch/dispatch.py,sha256=UyzqfsYTfr-gXo12NbJcYLi6Y8ZorRYEE3H0DU1bT8s,3818
|
|
21
21
|
telegrinder/bot/dispatch/handler/__init__.py,sha256=mzchbArrm0eoTEeVKHYrtJX4WSfW5t6T4xDU3-mtYaA,169
|
|
22
22
|
telegrinder/bot/dispatch/handler/abc.py,sha256=ffa9zmIcaIkIuQk8JKBty2pf53woH6hzIkQb0wmqA3k,573
|
|
23
23
|
telegrinder/bot/dispatch/handler/func.py,sha256=B2rUH5Adm5RI4bE-49cbf5FCYTxsw2M3cJ-2GMctC0o,2085
|
|
@@ -32,7 +32,7 @@ telegrinder/bot/dispatch/return_manager/inline_query.py,sha256=erJ54AXSG_1lACnzm
|
|
|
32
32
|
telegrinder/bot/dispatch/return_manager/message.py,sha256=eXjQEm1qBv5W9MfvdAfleytarR7UY_Ksnpv4EAaMfQY,824
|
|
33
33
|
telegrinder/bot/dispatch/view/__init__.py,sha256=iMReW_At2YzenjUGOgrVnOcHLVJAIQAfI9DdQElZdcM,379
|
|
34
34
|
telegrinder/bot/dispatch/view/abc.py,sha256=YJ_FI1SkF2bMg6yFjz2JuvwE7j_Qv6_jky-Ytfe_1Ow,4685
|
|
35
|
-
telegrinder/bot/dispatch/view/box.py,sha256=
|
|
35
|
+
telegrinder/bot/dispatch/view/box.py,sha256=Le7HbD9Obl-P_5nnmwptKkv8VBNlBAfWmlPWFnerUos,1240
|
|
36
36
|
telegrinder/bot/dispatch/view/callback_query.py,sha256=iL6DbB8ucXGvlv0w8eyMeZ94S1xz181pIn2yvYK1N_8,636
|
|
37
37
|
telegrinder/bot/dispatch/view/inline_query.py,sha256=ZcT1iCE8uRQ_PeaXGcOsXrMmIl2ow0YTTtDzuQ2kgjU,527
|
|
38
38
|
telegrinder/bot/dispatch/view/message.py,sha256=U80vO8tFtVsMfZHMA_LU9HunLB7nw0vbgEBltyZaSzk,498
|
|
@@ -43,7 +43,7 @@ telegrinder/bot/dispatch/waiter_machine/short_state.py,sha256=tmvoeJNA7c4h30khkl
|
|
|
43
43
|
telegrinder/bot/polling/__init__.py,sha256=OqfIFPS_V6UrCg-vCv9pkMFzTKdNbDP2faBfATs_TGg,94
|
|
44
44
|
telegrinder/bot/polling/abc.py,sha256=-5BpX55SJfDlEJWt15yOXWCizQRrgeY5oiA5eHkm1Nw,434
|
|
45
45
|
telegrinder/bot/polling/polling.py,sha256=GPXXlAhI81PZVUMGXsPd4j67GO19zozMRJaVNAgsBMg,4280
|
|
46
|
-
telegrinder/bot/rules/__init__.py,sha256=
|
|
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
|
|
49
49
|
telegrinder/bot/rules/adapter/abc.py,sha256=VxRGQbNtdfA6gZyTk0JjJBdB5n_7g6uwseewtovZEK8,558
|
|
@@ -57,7 +57,7 @@ telegrinder/bot/rules/func.py,sha256=rhLXf6FjS0p3Nx1ZHqmV7uelUYJOkCf1gwc-SZSyRCo
|
|
|
57
57
|
telegrinder/bot/rules/fuzzy.py,sha256=ReweSKmql4a6AHFv2tXqCQoGktYpeezBLWvW_hS1YJg,712
|
|
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
|
-
telegrinder/bot/rules/is_from.py,sha256=
|
|
60
|
+
telegrinder/bot/rules/is_from.py,sha256=WdKAuU9tY9BaRt0997nCM4RKqw4jHjpSLlQIW4dgSWw,5263
|
|
61
61
|
telegrinder/bot/rules/markup.py,sha256=bgLm4-GKxWB1jm0ZDcKFcqnU5OaKEpJHuiVhWuJqyhc,1107
|
|
62
62
|
telegrinder/bot/rules/mention.py,sha256=ozXV3awsrJhkFKrTvPEl1iyVkDs0GWMmuRSLSnSdOmo,493
|
|
63
63
|
telegrinder/bot/rules/message_entities.py,sha256=_lWHCNymbV1Sv-f2Q8Ca3SOxqIPSHVyVXgfYIBPy9dE,1096
|
|
@@ -71,11 +71,11 @@ telegrinder/bot/scenario/checkbox.py,sha256=H5XuhAwwvyJbMdVpRLDzCXg2VKDU029OnDbg
|
|
|
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
|
-
telegrinder/client/aiohttp.py,sha256=
|
|
74
|
+
telegrinder/client/aiohttp.py,sha256=RLhjWy-RGZ7848o75ASXBD9bqo06gaPfOv3d8QlyRYI,4147
|
|
75
75
|
telegrinder/model.py,sha256=VEM7meEQ8O7Gdt1cBGLjQxJODPqE4Q7lppeYWVchXYA,4380
|
|
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=ZA_qj36FabalE65J82j_Hp34umHhUFbNIOt8CBYbqvA,7987
|
|
79
79
|
telegrinder/node/__init__.py,sha256=01XTe8GPUBp5LXayDshihTxre7ejf99NYte20d08JLM,706
|
|
80
80
|
telegrinder/node/attachment.py,sha256=vMnD2tWQQQ6PFuXEIq2ZdL91xcBxiwlAkMkqJqseLlk,2587
|
|
81
81
|
telegrinder/node/base.py,sha256=iszAnP2pD3REDpUfufbVyJmg0rkXt2-ByeG6LgmS7Zc,2221
|
|
@@ -83,7 +83,7 @@ telegrinder/node/composer.py,sha256=f6l8qLjewu6lJTcxAucKyiQ4t-4d614YF6ssk9kYCZg,
|
|
|
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
|
|
86
|
-
telegrinder/node/source.py,sha256=
|
|
86
|
+
telegrinder/node/source.py,sha256=D5X5mOUM7qdffuDeN26DH3Y19WdkCRT080SFQYcAxFw,736
|
|
87
87
|
telegrinder/node/text.py,sha256=4kVMHvYRi0hxztVNT4Cv0DvUoI9QSn7NIYMG4U-uqYM,303
|
|
88
88
|
telegrinder/node/tools/__init__.py,sha256=TI_o7MbS4DUOSkNNgJGLocXfRybPFv2WOhBty058wrY,57
|
|
89
89
|
telegrinder/node/tools/generator.py,sha256=bc3kJSvS2TdIcBXkEbI4tpfhnvVe16m9ba5-WcIPy0c,1025
|
|
@@ -94,14 +94,14 @@ telegrinder/tools/buttons.py,sha256=qMvtpawzkjdqopqE7o9C0k-no1dGJVy5gjFX4SiOE6A,
|
|
|
94
94
|
telegrinder/tools/error_handler/__init__.py,sha256=WmYWZCNhhSk32j4lIOltEwzoYUx086TGTbOF5h3Ps7s,207
|
|
95
95
|
telegrinder/tools/error_handler/abc.py,sha256=1w-X7dncSyO5ouv6r_LAnywFRGYz7SgA79eNfTqMG3M,881
|
|
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=LIAQNSTb14AhKhvhddhW4EQCwBpyNjAZJZSfcy4Fsas,5993
|
|
98
98
|
telegrinder/tools/formatting/__init__.py,sha256=_oxb-4y_vyIgALlO2rfaa-azqicySpHHIcaYBrVPdSg,1609
|
|
99
99
|
telegrinder/tools/formatting/html.py,sha256=-tvN1zJK_Q7evil3-XgRdvsdYsOgaG9eX2KsIQkt0m8,8718
|
|
100
100
|
telegrinder/tools/formatting/links.py,sha256=ABglEz8EA6XitSM5xJt2FU78ffUdXVNbziJUjoUjKnI,1074
|
|
101
101
|
telegrinder/tools/formatting/spec_html_formats.py,sha256=VMPw39IQEM7XUy0r9uzpkGfYmyE2ItJiSEmXCbyKUuE,2750
|
|
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=hXlGkU2M4Cw8m_-b1uFZojlVDkhzUhNfBFbp-nr78eE,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
|
|
@@ -115,13 +115,13 @@ telegrinder/tools/keyboard.py,sha256=TZ5vVRQKbXrVqZNnok9jrbwNQYSaGpA41wsGHUNJkwo
|
|
|
115
115
|
telegrinder/tools/loop_wrapper/__init__.py,sha256=os6kfzNEpGa7EHBbwFpym-iEnQvJGokEyHtyuVIOtks,143
|
|
116
116
|
telegrinder/tools/loop_wrapper/abc.py,sha256=nUr2o24jaja4mpCcvbZRxHYq4hDsnGReC9yYHacQ4pw,443
|
|
117
117
|
telegrinder/tools/loop_wrapper/loop_wrapper.py,sha256=ZEwuqqEz-r5BehCRG-E5K1lg2i4ODyyhOh0iKFT8GDw,4306
|
|
118
|
-
telegrinder/tools/magic.py,sha256=
|
|
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
|
-
telegrinder/types/objects.py,sha256=
|
|
124
|
-
telegrinder-0.1.
|
|
125
|
-
telegrinder-0.1.
|
|
126
|
-
telegrinder-0.1.
|
|
127
|
-
telegrinder-0.1.
|
|
123
|
+
telegrinder/types/objects.py,sha256=znpGLbPrFu5GCUf4j6p_XA7iCVaxYqUZN1UqBEpr5FY,214803
|
|
124
|
+
telegrinder-0.1.dev163.dist-info/LICENSE,sha256=J9ngGsqHCNNjpm3xYPT7EnlzsnjhfqNXej5mJFjM6lw,1094
|
|
125
|
+
telegrinder-0.1.dev163.dist-info/METADATA,sha256=Njdjq7FipuHi822K2gkEmCd2HnEh5Y624RlBtzaM0_s,2892
|
|
126
|
+
telegrinder-0.1.dev163.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
|
127
|
+
telegrinder-0.1.dev163.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|