telegrinder 0.3.4__py3-none-any.whl → 0.4.0__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 +148 -149
- telegrinder/api/__init__.py +9 -8
- telegrinder/api/api.py +101 -93
- telegrinder/api/error.py +20 -16
- telegrinder/api/response.py +20 -20
- telegrinder/api/token.py +36 -36
- telegrinder/bot/__init__.py +72 -66
- telegrinder/bot/bot.py +83 -76
- telegrinder/bot/cute_types/__init__.py +19 -17
- telegrinder/bot/cute_types/base.py +184 -258
- telegrinder/bot/cute_types/callback_query.py +400 -385
- telegrinder/bot/cute_types/chat_join_request.py +62 -61
- telegrinder/bot/cute_types/chat_member_updated.py +157 -160
- telegrinder/bot/cute_types/inline_query.py +44 -43
- telegrinder/bot/cute_types/message.py +2590 -2637
- telegrinder/bot/cute_types/pre_checkout_query.py +42 -0
- telegrinder/bot/cute_types/update.py +112 -104
- telegrinder/bot/cute_types/utils.py +62 -95
- telegrinder/bot/dispatch/__init__.py +59 -55
- telegrinder/bot/dispatch/abc.py +76 -77
- telegrinder/bot/dispatch/context.py +96 -98
- telegrinder/bot/dispatch/dispatch.py +254 -202
- telegrinder/bot/dispatch/handler/__init__.py +13 -13
- telegrinder/bot/dispatch/handler/abc.py +23 -24
- telegrinder/bot/dispatch/handler/audio_reply.py +44 -44
- telegrinder/bot/dispatch/handler/base.py +57 -57
- telegrinder/bot/dispatch/handler/document_reply.py +44 -44
- telegrinder/bot/dispatch/handler/func.py +129 -135
- telegrinder/bot/dispatch/handler/media_group_reply.py +44 -43
- telegrinder/bot/dispatch/handler/message_reply.py +36 -36
- telegrinder/bot/dispatch/handler/photo_reply.py +44 -44
- telegrinder/bot/dispatch/handler/sticker_reply.py +37 -37
- telegrinder/bot/dispatch/handler/video_reply.py +44 -44
- telegrinder/bot/dispatch/middleware/__init__.py +3 -3
- telegrinder/bot/dispatch/middleware/abc.py +97 -22
- telegrinder/bot/dispatch/middleware/global_middleware.py +70 -0
- telegrinder/bot/dispatch/process.py +151 -157
- telegrinder/bot/dispatch/return_manager/__init__.py +15 -13
- telegrinder/bot/dispatch/return_manager/abc.py +104 -108
- telegrinder/bot/dispatch/return_manager/callback_query.py +20 -20
- telegrinder/bot/dispatch/return_manager/inline_query.py +15 -15
- telegrinder/bot/dispatch/return_manager/message.py +36 -36
- telegrinder/bot/dispatch/return_manager/pre_checkout_query.py +20 -0
- telegrinder/bot/dispatch/view/__init__.py +15 -13
- telegrinder/bot/dispatch/view/abc.py +45 -41
- telegrinder/bot/dispatch/view/base.py +231 -200
- telegrinder/bot/dispatch/view/box.py +140 -129
- telegrinder/bot/dispatch/view/callback_query.py +16 -17
- telegrinder/bot/dispatch/view/chat_join_request.py +11 -16
- telegrinder/bot/dispatch/view/chat_member.py +37 -39
- telegrinder/bot/dispatch/view/inline_query.py +16 -17
- telegrinder/bot/dispatch/view/message.py +43 -44
- telegrinder/bot/dispatch/view/pre_checkout_query.py +16 -0
- telegrinder/bot/dispatch/view/raw.py +116 -114
- telegrinder/bot/dispatch/waiter_machine/__init__.py +17 -17
- telegrinder/bot/dispatch/waiter_machine/actions.py +14 -13
- telegrinder/bot/dispatch/waiter_machine/hasher/__init__.py +8 -8
- telegrinder/bot/dispatch/waiter_machine/hasher/callback.py +55 -55
- telegrinder/bot/dispatch/waiter_machine/hasher/hasher.py +59 -57
- telegrinder/bot/dispatch/waiter_machine/hasher/message.py +51 -51
- telegrinder/bot/dispatch/waiter_machine/hasher/state.py +20 -19
- telegrinder/bot/dispatch/waiter_machine/machine.py +251 -172
- telegrinder/bot/dispatch/waiter_machine/middleware.py +94 -89
- telegrinder/bot/dispatch/waiter_machine/short_state.py +57 -68
- telegrinder/bot/polling/__init__.py +4 -4
- telegrinder/bot/polling/abc.py +25 -25
- telegrinder/bot/polling/polling.py +139 -131
- telegrinder/bot/rules/__init__.py +85 -62
- telegrinder/bot/rules/abc.py +213 -206
- telegrinder/bot/rules/callback_data.py +122 -163
- telegrinder/bot/rules/chat_join.py +45 -43
- telegrinder/bot/rules/command.py +126 -126
- telegrinder/bot/rules/enum_text.py +33 -36
- telegrinder/bot/rules/func.py +28 -26
- telegrinder/bot/rules/fuzzy.py +24 -24
- telegrinder/bot/rules/id.py +24 -0
- telegrinder/bot/rules/inline.py +58 -56
- telegrinder/bot/rules/integer.py +21 -20
- telegrinder/bot/rules/is_from.py +127 -127
- telegrinder/bot/rules/logic.py +18 -0
- telegrinder/bot/rules/markup.py +42 -43
- telegrinder/bot/rules/mention.py +14 -14
- telegrinder/bot/rules/message.py +15 -17
- telegrinder/bot/rules/message_entities.py +33 -35
- telegrinder/bot/rules/node.py +33 -27
- telegrinder/bot/rules/payload.py +81 -0
- telegrinder/bot/rules/payment_invoice.py +29 -0
- telegrinder/bot/rules/regex.py +36 -37
- telegrinder/bot/rules/rule_enum.py +72 -72
- telegrinder/bot/rules/start.py +42 -42
- telegrinder/bot/rules/state.py +35 -37
- telegrinder/bot/rules/text.py +38 -33
- telegrinder/bot/rules/update.py +15 -15
- telegrinder/bot/scenario/__init__.py +5 -5
- telegrinder/bot/scenario/abc.py +17 -19
- telegrinder/bot/scenario/checkbox.py +174 -176
- telegrinder/bot/scenario/choice.py +48 -51
- telegrinder/client/__init__.py +12 -4
- telegrinder/client/abc.py +100 -75
- telegrinder/client/aiohttp.py +134 -130
- telegrinder/client/form_data.py +31 -0
- telegrinder/client/sonic.py +212 -0
- telegrinder/model.py +208 -315
- telegrinder/modules.py +239 -237
- telegrinder/msgspec_json.py +14 -14
- telegrinder/msgspec_utils.py +478 -410
- telegrinder/node/__init__.py +86 -25
- telegrinder/node/attachment.py +163 -87
- telegrinder/node/base.py +288 -160
- telegrinder/node/callback_query.py +54 -53
- telegrinder/node/command.py +34 -33
- telegrinder/node/composer.py +163 -198
- telegrinder/node/container.py +33 -27
- telegrinder/node/either.py +82 -0
- telegrinder/node/event.py +54 -65
- telegrinder/node/file.py +51 -0
- telegrinder/node/me.py +15 -16
- telegrinder/node/payload.py +78 -0
- telegrinder/node/polymorphic.py +67 -48
- telegrinder/node/rule.py +72 -76
- telegrinder/node/scope.py +36 -38
- telegrinder/node/source.py +87 -71
- telegrinder/node/text.py +53 -41
- telegrinder/node/tools/__init__.py +3 -3
- telegrinder/node/tools/generator.py +36 -40
- telegrinder/py.typed +0 -0
- telegrinder/rules.py +1 -62
- telegrinder/tools/__init__.py +152 -93
- telegrinder/tools/adapter/__init__.py +19 -0
- telegrinder/tools/adapter/abc.py +49 -0
- telegrinder/tools/adapter/dataclass.py +56 -0
- telegrinder/{bot/rules → tools}/adapter/errors.py +5 -5
- telegrinder/{bot/rules → tools}/adapter/event.py +63 -65
- telegrinder/{bot/rules → tools}/adapter/node.py +46 -48
- telegrinder/{bot/rules → tools}/adapter/raw_event.py +27 -27
- telegrinder/{bot/rules → tools}/adapter/raw_update.py +30 -30
- telegrinder/tools/buttons.py +106 -80
- telegrinder/tools/callback_data_serilization/__init__.py +5 -0
- telegrinder/tools/callback_data_serilization/abc.py +51 -0
- telegrinder/tools/callback_data_serilization/json_ser.py +60 -0
- telegrinder/tools/callback_data_serilization/msgpack_ser.py +172 -0
- telegrinder/tools/error_handler/__init__.py +7 -7
- telegrinder/tools/error_handler/abc.py +30 -33
- telegrinder/tools/error_handler/error.py +9 -9
- telegrinder/tools/error_handler/error_handler.py +179 -193
- telegrinder/tools/formatting/__init__.py +83 -63
- telegrinder/tools/formatting/deep_links.py +541 -0
- telegrinder/tools/formatting/{html.py → html_formatter.py} +266 -294
- telegrinder/tools/formatting/spec_html_formats.py +71 -117
- telegrinder/tools/functional.py +8 -12
- telegrinder/tools/global_context/__init__.py +7 -7
- telegrinder/tools/global_context/abc.py +63 -63
- telegrinder/tools/global_context/global_context.py +387 -412
- telegrinder/tools/global_context/telegrinder_ctx.py +27 -27
- telegrinder/tools/i18n/__init__.py +7 -7
- telegrinder/tools/i18n/abc.py +30 -30
- telegrinder/tools/i18n/middleware/__init__.py +3 -3
- telegrinder/tools/i18n/middleware/abc.py +22 -25
- telegrinder/tools/i18n/simple.py +43 -43
- telegrinder/tools/input_file_directory.py +30 -0
- telegrinder/tools/keyboard.py +128 -128
- telegrinder/tools/lifespan.py +105 -0
- telegrinder/tools/limited_dict.py +32 -37
- telegrinder/tools/loop_wrapper/__init__.py +4 -4
- telegrinder/tools/loop_wrapper/abc.py +20 -15
- telegrinder/tools/loop_wrapper/loop_wrapper.py +169 -224
- telegrinder/tools/magic.py +307 -157
- telegrinder/tools/parse_mode.py +6 -6
- telegrinder/tools/state_storage/__init__.py +4 -4
- telegrinder/tools/state_storage/abc.py +31 -35
- telegrinder/tools/state_storage/memory.py +25 -25
- telegrinder/tools/strings.py +13 -0
- telegrinder/types/__init__.py +268 -260
- telegrinder/types/enums.py +711 -701
- telegrinder/types/input_file.py +51 -0
- telegrinder/types/methods.py +5055 -4633
- telegrinder/types/objects.py +7058 -6950
- telegrinder/verification_utils.py +30 -32
- {telegrinder-0.3.4.dist-info → telegrinder-0.4.0.dist-info}/LICENSE +22 -22
- telegrinder-0.4.0.dist-info/METADATA +144 -0
- telegrinder-0.4.0.dist-info/RECORD +182 -0
- {telegrinder-0.3.4.dist-info → telegrinder-0.4.0.dist-info}/WHEEL +1 -1
- telegrinder/bot/rules/adapter/__init__.py +0 -17
- telegrinder/bot/rules/adapter/abc.py +0 -31
- telegrinder/node/message.py +0 -14
- telegrinder/node/update.py +0 -15
- telegrinder/tools/formatting/links.py +0 -38
- telegrinder/tools/kb_set/__init__.py +0 -4
- telegrinder/tools/kb_set/base.py +0 -15
- telegrinder/tools/kb_set/yaml.py +0 -63
- telegrinder-0.3.4.dist-info/METADATA +0 -110
- telegrinder-0.3.4.dist-info/RECORD +0 -165
telegrinder/bot/rules/start.py
CHANGED
|
@@ -1,42 +1,42 @@
|
|
|
1
|
-
import typing
|
|
2
|
-
|
|
3
|
-
from telegrinder.bot.dispatch.context import Context
|
|
4
|
-
from telegrinder.types.enums import MessageEntityType
|
|
5
|
-
|
|
6
|
-
from .is_from import IsPrivate
|
|
7
|
-
from .markup import Markup
|
|
8
|
-
from .message import MessageRule
|
|
9
|
-
from .message_entities import MessageEntities
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
class StartCommand(
|
|
13
|
-
MessageRule,
|
|
14
|
-
requires=[
|
|
15
|
-
IsPrivate(),
|
|
16
|
-
MessageEntities(MessageEntityType.BOT_COMMAND),
|
|
17
|
-
Markup(["/start <param>", "/start"]),
|
|
18
|
-
],
|
|
19
|
-
):
|
|
20
|
-
def __init__(
|
|
21
|
-
self,
|
|
22
|
-
validator: typing.Callable[[str], typing.Any | None] | None = None,
|
|
23
|
-
*,
|
|
24
|
-
param_required: bool = False,
|
|
25
|
-
alias: str | None = None,
|
|
26
|
-
) -> None:
|
|
27
|
-
self.param_required = param_required
|
|
28
|
-
self.validator = validator
|
|
29
|
-
self.alias = alias
|
|
30
|
-
|
|
31
|
-
def check(self, ctx: Context) -> bool:
|
|
32
|
-
param: str | None = ctx.pop("param", None)
|
|
33
|
-
validated_param = self.validator(param) if self.validator and param is not None else param
|
|
34
|
-
|
|
35
|
-
if self.param_required and validated_param is None:
|
|
36
|
-
return False
|
|
37
|
-
|
|
38
|
-
ctx.set(self.alias or "param", validated_param)
|
|
39
|
-
return True
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
__all__ = ("StartCommand",)
|
|
1
|
+
import typing
|
|
2
|
+
|
|
3
|
+
from telegrinder.bot.dispatch.context import Context
|
|
4
|
+
from telegrinder.types.enums import MessageEntityType
|
|
5
|
+
|
|
6
|
+
from .is_from import IsPrivate
|
|
7
|
+
from .markup import Markup
|
|
8
|
+
from .message import MessageRule
|
|
9
|
+
from .message_entities import MessageEntities
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class StartCommand(
|
|
13
|
+
MessageRule,
|
|
14
|
+
requires=[
|
|
15
|
+
IsPrivate(),
|
|
16
|
+
MessageEntities(MessageEntityType.BOT_COMMAND),
|
|
17
|
+
Markup(["/start <param>", "/start"]),
|
|
18
|
+
],
|
|
19
|
+
):
|
|
20
|
+
def __init__(
|
|
21
|
+
self,
|
|
22
|
+
validator: typing.Callable[[str], typing.Any | None] | None = None,
|
|
23
|
+
*,
|
|
24
|
+
param_required: bool = False,
|
|
25
|
+
alias: str | None = None,
|
|
26
|
+
) -> None:
|
|
27
|
+
self.param_required = param_required
|
|
28
|
+
self.validator = validator
|
|
29
|
+
self.alias = alias
|
|
30
|
+
|
|
31
|
+
def check(self, ctx: Context) -> bool:
|
|
32
|
+
param: str | None = ctx.pop("param", None)
|
|
33
|
+
validated_param = self.validator(param) if self.validator and param is not None else param
|
|
34
|
+
|
|
35
|
+
if self.param_required and validated_param is None:
|
|
36
|
+
return False
|
|
37
|
+
|
|
38
|
+
ctx.set(self.alias or "param", validated_param)
|
|
39
|
+
return True
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
__all__ = ("StartCommand",)
|
telegrinder/bot/rules/state.py
CHANGED
|
@@ -1,37 +1,35 @@
|
|
|
1
|
-
import dataclasses
|
|
2
|
-
import enum
|
|
3
|
-
import typing
|
|
4
|
-
|
|
5
|
-
from telegrinder.bot.dispatch.context import Context
|
|
6
|
-
from telegrinder.bot.rules.abc import ABCRule
|
|
7
|
-
from telegrinder.node.source import Source
|
|
8
|
-
|
|
9
|
-
if typing.TYPE_CHECKING:
|
|
10
|
-
from telegrinder.tools.state_storage.abc import ABCStateStorage
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
__all__ = ("State", "StateMeta")
|
|
1
|
+
import dataclasses
|
|
2
|
+
import enum
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
from telegrinder.bot.dispatch.context import Context
|
|
6
|
+
from telegrinder.bot.rules.abc import ABCRule
|
|
7
|
+
from telegrinder.node.source import Source
|
|
8
|
+
|
|
9
|
+
if typing.TYPE_CHECKING:
|
|
10
|
+
from telegrinder.tools.state_storage.abc import ABCStateStorage
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class StateMeta(enum.Enum):
|
|
14
|
+
NO_STATE = enum.auto()
|
|
15
|
+
ANY = enum.auto()
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@dataclasses.dataclass(frozen=True, slots=True, repr=False)
|
|
19
|
+
class State[Payload](ABCRule):
|
|
20
|
+
storage: "ABCStateStorage[Payload]"
|
|
21
|
+
key: str | StateMeta | enum.Enum
|
|
22
|
+
|
|
23
|
+
async def check(self, source: Source, ctx: Context) -> bool:
|
|
24
|
+
state = await self.storage.get(source.from_user.id)
|
|
25
|
+
if not state:
|
|
26
|
+
return self.key == StateMeta.NO_STATE
|
|
27
|
+
|
|
28
|
+
if self.key != StateMeta.ANY and self.key != state.unwrap().key:
|
|
29
|
+
return False
|
|
30
|
+
|
|
31
|
+
ctx["state"] = state.unwrap()
|
|
32
|
+
return True
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
__all__ = ("State", "StateMeta")
|
telegrinder/bot/rules/text.py
CHANGED
|
@@ -1,33 +1,38 @@
|
|
|
1
|
-
import typing
|
|
2
|
-
|
|
3
|
-
from telegrinder import node
|
|
4
|
-
from telegrinder.tools.i18n.abc import ABCTranslator
|
|
5
|
-
|
|
6
|
-
from .abc import ABCRule, with_caching_translations
|
|
7
|
-
from .node import NodeRule
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class HasText(NodeRule):
|
|
11
|
-
def __init__(self) -> None:
|
|
12
|
-
super().__init__(node.text.Text)
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
class
|
|
16
|
-
def __init__(self
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
1
|
+
import typing
|
|
2
|
+
|
|
3
|
+
from telegrinder import node
|
|
4
|
+
from telegrinder.tools.i18n.abc import ABCTranslator
|
|
5
|
+
|
|
6
|
+
from .abc import ABCRule, with_caching_translations
|
|
7
|
+
from .node import NodeRule
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class HasText(NodeRule):
|
|
11
|
+
def __init__(self) -> None:
|
|
12
|
+
super().__init__(node.as_node(node.text.Text))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class HasCaption(NodeRule):
|
|
16
|
+
def __init__(self) -> None:
|
|
17
|
+
super().__init__(node.as_node(node.text.Caption))
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class Text(ABCRule):
|
|
21
|
+
def __init__(self, texts: str | list[str], /, *, ignore_case: bool = False) -> None:
|
|
22
|
+
if not isinstance(texts, list):
|
|
23
|
+
texts = [texts]
|
|
24
|
+
self.texts = texts if not ignore_case else list(map(str.lower, texts))
|
|
25
|
+
self.ignore_case = ignore_case
|
|
26
|
+
|
|
27
|
+
def check(self, text: node.either.Either[node.text.Text, node.text.Caption]) -> bool:
|
|
28
|
+
return (text if not self.ignore_case else text.lower()) in self.texts
|
|
29
|
+
|
|
30
|
+
@with_caching_translations
|
|
31
|
+
async def translate(self, translator: ABCTranslator) -> typing.Self:
|
|
32
|
+
return self.__class__(
|
|
33
|
+
[translator.get(text) for text in self.texts],
|
|
34
|
+
ignore_case=self.ignore_case,
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
__all__ = ("HasCaption", "HasText", "Text")
|
telegrinder/bot/rules/update.py
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
from telegrinder.bot.cute_types.update import UpdateCute
|
|
2
|
-
from telegrinder.types.enums import UpdateType
|
|
3
|
-
|
|
4
|
-
from .abc import ABCRule
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
class IsUpdateType(ABCRule):
|
|
8
|
-
def __init__(self, update_type: UpdateType, /) -> None:
|
|
9
|
-
self.update_type = update_type
|
|
10
|
-
|
|
11
|
-
def check(self, event: UpdateCute) -> bool:
|
|
12
|
-
return event.update_type == self.update_type
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
__all__ = ("IsUpdateType",)
|
|
1
|
+
from telegrinder.bot.cute_types.update import UpdateCute
|
|
2
|
+
from telegrinder.types.enums import UpdateType
|
|
3
|
+
|
|
4
|
+
from .abc import ABCRule
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class IsUpdateType(ABCRule):
|
|
8
|
+
def __init__(self, update_type: UpdateType, /) -> None:
|
|
9
|
+
self.update_type = update_type
|
|
10
|
+
|
|
11
|
+
def check(self, event: UpdateCute) -> bool:
|
|
12
|
+
return event.update_type == self.update_type
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
__all__ = ("IsUpdateType",)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
from .abc import ABCScenario
|
|
2
|
-
from .checkbox import Checkbox
|
|
3
|
-
from .choice import Choice
|
|
4
|
-
|
|
5
|
-
__all__ = ("ABCScenario", "Checkbox", "Choice")
|
|
1
|
+
from .abc import ABCScenario
|
|
2
|
+
from .checkbox import Checkbox
|
|
3
|
+
from .choice import Choice
|
|
4
|
+
|
|
5
|
+
__all__ = ("ABCScenario", "Checkbox", "Choice")
|
telegrinder/bot/scenario/abc.py
CHANGED
|
@@ -1,19 +1,17 @@
|
|
|
1
|
-
import typing
|
|
2
|
-
from abc import ABC, abstractmethod
|
|
3
|
-
|
|
4
|
-
from telegrinder.bot.cute_types.base import BaseCute
|
|
5
|
-
|
|
6
|
-
if typing.TYPE_CHECKING:
|
|
7
|
-
from telegrinder.api import API
|
|
8
|
-
from telegrinder.bot.dispatch.view.abc import ABCStateView
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
__all__ = ("ABCScenario",)
|
|
1
|
+
import typing
|
|
2
|
+
from abc import ABC, abstractmethod
|
|
3
|
+
|
|
4
|
+
from telegrinder.bot.cute_types.base import BaseCute
|
|
5
|
+
|
|
6
|
+
if typing.TYPE_CHECKING:
|
|
7
|
+
from telegrinder.api import API
|
|
8
|
+
from telegrinder.bot.dispatch.view.abc import ABCStateView
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class ABCScenario[Event: BaseCute](ABC):
|
|
12
|
+
@abstractmethod
|
|
13
|
+
def wait(self, api: "API", view: "ABCStateView[Event]") -> typing.Any:
|
|
14
|
+
pass
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
__all__ = ("ABCScenario",)
|