telegrinder 0.3.4__py3-none-any.whl → 0.3.4.post1__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.

Files changed (165) hide show
  1. telegrinder/__init__.py +144 -144
  2. telegrinder/api/__init__.py +8 -8
  3. telegrinder/api/api.py +93 -93
  4. telegrinder/api/error.py +16 -16
  5. telegrinder/api/response.py +20 -20
  6. telegrinder/api/token.py +36 -36
  7. telegrinder/bot/__init__.py +66 -66
  8. telegrinder/bot/bot.py +76 -76
  9. telegrinder/bot/cute_types/__init__.py +17 -17
  10. telegrinder/bot/cute_types/base.py +258 -258
  11. telegrinder/bot/cute_types/callback_query.py +385 -385
  12. telegrinder/bot/cute_types/chat_join_request.py +61 -61
  13. telegrinder/bot/cute_types/chat_member_updated.py +160 -160
  14. telegrinder/bot/cute_types/inline_query.py +43 -43
  15. telegrinder/bot/cute_types/message.py +2637 -2637
  16. telegrinder/bot/cute_types/update.py +104 -104
  17. telegrinder/bot/cute_types/utils.py +95 -95
  18. telegrinder/bot/dispatch/__init__.py +55 -55
  19. telegrinder/bot/dispatch/abc.py +77 -77
  20. telegrinder/bot/dispatch/context.py +98 -98
  21. telegrinder/bot/dispatch/dispatch.py +202 -202
  22. telegrinder/bot/dispatch/handler/__init__.py +13 -13
  23. telegrinder/bot/dispatch/handler/abc.py +24 -24
  24. telegrinder/bot/dispatch/handler/audio_reply.py +44 -44
  25. telegrinder/bot/dispatch/handler/base.py +57 -57
  26. telegrinder/bot/dispatch/handler/document_reply.py +44 -44
  27. telegrinder/bot/dispatch/handler/func.py +135 -135
  28. telegrinder/bot/dispatch/handler/media_group_reply.py +43 -43
  29. telegrinder/bot/dispatch/handler/message_reply.py +36 -36
  30. telegrinder/bot/dispatch/handler/photo_reply.py +44 -44
  31. telegrinder/bot/dispatch/handler/sticker_reply.py +37 -37
  32. telegrinder/bot/dispatch/handler/video_reply.py +44 -44
  33. telegrinder/bot/dispatch/middleware/__init__.py +3 -3
  34. telegrinder/bot/dispatch/middleware/abc.py +22 -22
  35. telegrinder/bot/dispatch/process.py +157 -157
  36. telegrinder/bot/dispatch/return_manager/__init__.py +13 -13
  37. telegrinder/bot/dispatch/return_manager/abc.py +108 -108
  38. telegrinder/bot/dispatch/return_manager/callback_query.py +20 -20
  39. telegrinder/bot/dispatch/return_manager/inline_query.py +15 -15
  40. telegrinder/bot/dispatch/return_manager/message.py +36 -36
  41. telegrinder/bot/dispatch/view/__init__.py +13 -13
  42. telegrinder/bot/dispatch/view/abc.py +41 -41
  43. telegrinder/bot/dispatch/view/base.py +200 -200
  44. telegrinder/bot/dispatch/view/box.py +129 -129
  45. telegrinder/bot/dispatch/view/callback_query.py +17 -17
  46. telegrinder/bot/dispatch/view/chat_join_request.py +16 -16
  47. telegrinder/bot/dispatch/view/chat_member.py +39 -39
  48. telegrinder/bot/dispatch/view/inline_query.py +17 -17
  49. telegrinder/bot/dispatch/view/message.py +44 -44
  50. telegrinder/bot/dispatch/view/raw.py +114 -114
  51. telegrinder/bot/dispatch/waiter_machine/__init__.py +17 -17
  52. telegrinder/bot/dispatch/waiter_machine/actions.py +13 -13
  53. telegrinder/bot/dispatch/waiter_machine/hasher/__init__.py +8 -8
  54. telegrinder/bot/dispatch/waiter_machine/hasher/callback.py +55 -55
  55. telegrinder/bot/dispatch/waiter_machine/hasher/hasher.py +57 -57
  56. telegrinder/bot/dispatch/waiter_machine/hasher/message.py +51 -51
  57. telegrinder/bot/dispatch/waiter_machine/hasher/state.py +19 -19
  58. telegrinder/bot/dispatch/waiter_machine/machine.py +172 -172
  59. telegrinder/bot/dispatch/waiter_machine/middleware.py +89 -89
  60. telegrinder/bot/dispatch/waiter_machine/short_state.py +68 -68
  61. telegrinder/bot/polling/__init__.py +4 -4
  62. telegrinder/bot/polling/abc.py +25 -25
  63. telegrinder/bot/polling/polling.py +131 -131
  64. telegrinder/bot/rules/__init__.py +62 -62
  65. telegrinder/bot/rules/abc.py +206 -206
  66. telegrinder/bot/rules/adapter/__init__.py +17 -17
  67. telegrinder/bot/rules/adapter/abc.py +31 -31
  68. telegrinder/bot/rules/adapter/errors.py +5 -5
  69. telegrinder/bot/rules/adapter/event.py +65 -65
  70. telegrinder/bot/rules/adapter/node.py +48 -48
  71. telegrinder/bot/rules/adapter/raw_event.py +27 -27
  72. telegrinder/bot/rules/adapter/raw_update.py +30 -30
  73. telegrinder/bot/rules/callback_data.py +163 -163
  74. telegrinder/bot/rules/chat_join.py +43 -43
  75. telegrinder/bot/rules/command.py +126 -126
  76. telegrinder/bot/rules/enum_text.py +36 -36
  77. telegrinder/bot/rules/func.py +26 -26
  78. telegrinder/bot/rules/fuzzy.py +24 -24
  79. telegrinder/bot/rules/inline.py +56 -56
  80. telegrinder/bot/rules/integer.py +20 -20
  81. telegrinder/bot/rules/is_from.py +127 -127
  82. telegrinder/bot/rules/markup.py +43 -43
  83. telegrinder/bot/rules/mention.py +14 -14
  84. telegrinder/bot/rules/message.py +17 -17
  85. telegrinder/bot/rules/message_entities.py +35 -35
  86. telegrinder/bot/rules/node.py +27 -27
  87. telegrinder/bot/rules/regex.py +37 -37
  88. telegrinder/bot/rules/rule_enum.py +72 -72
  89. telegrinder/bot/rules/start.py +42 -42
  90. telegrinder/bot/rules/state.py +37 -37
  91. telegrinder/bot/rules/text.py +33 -33
  92. telegrinder/bot/rules/update.py +15 -15
  93. telegrinder/bot/scenario/__init__.py +5 -5
  94. telegrinder/bot/scenario/abc.py +19 -19
  95. telegrinder/bot/scenario/checkbox.py +176 -176
  96. telegrinder/bot/scenario/choice.py +51 -51
  97. telegrinder/client/__init__.py +4 -4
  98. telegrinder/client/abc.py +75 -75
  99. telegrinder/client/aiohttp.py +130 -130
  100. telegrinder/model.py +313 -313
  101. telegrinder/modules.py +237 -237
  102. telegrinder/msgspec_json.py +14 -14
  103. telegrinder/msgspec_utils.py +410 -410
  104. telegrinder/node/__init__.py +20 -20
  105. telegrinder/node/attachment.py +87 -87
  106. telegrinder/node/base.py +157 -157
  107. telegrinder/node/callback_query.py +53 -53
  108. telegrinder/node/command.py +33 -33
  109. telegrinder/node/composer.py +198 -198
  110. telegrinder/node/container.py +27 -27
  111. telegrinder/node/event.py +65 -65
  112. telegrinder/node/me.py +16 -16
  113. telegrinder/node/message.py +14 -14
  114. telegrinder/node/polymorphic.py +48 -48
  115. telegrinder/node/rule.py +76 -76
  116. telegrinder/node/scope.py +38 -38
  117. telegrinder/node/source.py +71 -71
  118. telegrinder/node/text.py +41 -41
  119. telegrinder/node/tools/__init__.py +3 -3
  120. telegrinder/node/tools/generator.py +40 -40
  121. telegrinder/node/update.py +15 -15
  122. telegrinder/rules.py +5 -5
  123. telegrinder/tools/__init__.py +74 -74
  124. telegrinder/tools/buttons.py +79 -79
  125. telegrinder/tools/error_handler/__init__.py +7 -7
  126. telegrinder/tools/error_handler/abc.py +33 -33
  127. telegrinder/tools/error_handler/error.py +9 -9
  128. telegrinder/tools/error_handler/error_handler.py +193 -193
  129. telegrinder/tools/formatting/__init__.py +46 -46
  130. telegrinder/tools/formatting/html.py +283 -283
  131. telegrinder/tools/formatting/links.py +33 -33
  132. telegrinder/tools/formatting/spec_html_formats.py +111 -111
  133. telegrinder/tools/functional.py +12 -12
  134. telegrinder/tools/global_context/__init__.py +7 -7
  135. telegrinder/tools/global_context/abc.py +63 -63
  136. telegrinder/tools/global_context/global_context.py +412 -412
  137. telegrinder/tools/global_context/telegrinder_ctx.py +27 -27
  138. telegrinder/tools/i18n/__init__.py +7 -7
  139. telegrinder/tools/i18n/abc.py +30 -30
  140. telegrinder/tools/i18n/middleware/__init__.py +3 -3
  141. telegrinder/tools/i18n/middleware/abc.py +25 -25
  142. telegrinder/tools/i18n/simple.py +43 -43
  143. telegrinder/tools/kb_set/__init__.py +4 -4
  144. telegrinder/tools/kb_set/base.py +15 -15
  145. telegrinder/tools/kb_set/yaml.py +63 -63
  146. telegrinder/tools/keyboard.py +128 -128
  147. telegrinder/tools/limited_dict.py +37 -37
  148. telegrinder/tools/loop_wrapper/__init__.py +4 -4
  149. telegrinder/tools/loop_wrapper/abc.py +15 -15
  150. telegrinder/tools/loop_wrapper/loop_wrapper.py +224 -224
  151. telegrinder/tools/magic.py +157 -157
  152. telegrinder/tools/parse_mode.py +6 -6
  153. telegrinder/tools/state_storage/__init__.py +4 -4
  154. telegrinder/tools/state_storage/abc.py +35 -35
  155. telegrinder/tools/state_storage/memory.py +25 -25
  156. telegrinder/types/__init__.py +260 -260
  157. telegrinder/types/enums.py +701 -701
  158. telegrinder/types/methods.py +4633 -4633
  159. telegrinder/types/objects.py +6950 -6950
  160. telegrinder/verification_utils.py +32 -32
  161. {telegrinder-0.3.4.dist-info → telegrinder-0.3.4.post1.dist-info}/LICENSE +22 -22
  162. {telegrinder-0.3.4.dist-info → telegrinder-0.3.4.post1.dist-info}/METADATA +1 -1
  163. telegrinder-0.3.4.post1.dist-info/RECORD +165 -0
  164. telegrinder-0.3.4.dist-info/RECORD +0 -165
  165. {telegrinder-0.3.4.dist-info → telegrinder-0.3.4.post1.dist-info}/WHEEL +0 -0
@@ -1,72 +1,72 @@
1
- import dataclasses
2
- import typing
3
-
4
- from telegrinder.bot.dispatch.context import Context
5
-
6
- from .abc import ABCRule, Update, check_rule
7
- from .func import FuncRule
8
-
9
-
10
- @dataclasses.dataclass(slots=True)
11
- class RuleEnumState:
12
- name: str
13
- rule: ABCRule
14
- cls: type["RuleEnum"]
15
-
16
- def __eq__(self, other: typing.Self) -> bool:
17
- return self.cls == other.cls and self.name == other.name
18
-
19
-
20
- class RuleEnum(ABCRule):
21
- __enum__: list[RuleEnumState]
22
-
23
- def __init_subclass__(cls, *args: typing.Any, **kwargs: typing.Any) -> None:
24
- new_attributes = set(cls.__dict__) - set(RuleEnum.__dict__) - {"__enum__", "__init__"}
25
- enum_lst: list[RuleEnumState] = []
26
-
27
- self = cls.__new__(cls)
28
- self.__init__()
29
-
30
- for attribute_name in new_attributes:
31
- rules = getattr(cls, attribute_name)
32
- attribute = RuleEnumState(attribute_name, rules, cls)
33
-
34
- setattr(
35
- self,
36
- attribute.name,
37
- self & FuncRule(lambda _, ctx: self.must_be_state(ctx, attribute)), # type: ignore
38
- )
39
- enum_lst.append(attribute)
40
-
41
- setattr(cls, "__enum__", enum_lst)
42
-
43
- @classmethod
44
- def save_state(cls, ctx: Context, enum: RuleEnumState) -> None:
45
- ctx.update({cls.__class__.__name__ + "_state": enum})
46
-
47
- @classmethod
48
- def check_state(cls, ctx: Context) -> RuleEnumState | None:
49
- return ctx.get(cls.__class__.__name__ + "_state")
50
-
51
- @classmethod
52
- def must_be_state(cls, ctx: Context, state: RuleEnumState) -> bool:
53
- real_state = cls.check_state(ctx)
54
- if not real_state:
55
- return False
56
- return real_state == state
57
-
58
- async def check(self, event: Update, ctx: Context) -> bool:
59
- if self.check_state(ctx):
60
- return True
61
-
62
- for enum in self.__enum__:
63
- ctx_copy = ctx.copy()
64
- if await check_rule(event.ctx_api, enum.rule, event, ctx_copy):
65
- ctx.update(ctx_copy)
66
- self.save_state(ctx, enum)
67
- return True
68
-
69
- return False
70
-
71
-
72
- __all__ = ("RuleEnum", "RuleEnumState")
1
+ import dataclasses
2
+ import typing
3
+
4
+ from telegrinder.bot.dispatch.context import Context
5
+
6
+ from .abc import ABCRule, Update, check_rule
7
+ from .func import FuncRule
8
+
9
+
10
+ @dataclasses.dataclass(slots=True)
11
+ class RuleEnumState:
12
+ name: str
13
+ rule: ABCRule
14
+ cls: type["RuleEnum"]
15
+
16
+ def __eq__(self, other: typing.Self) -> bool:
17
+ return self.cls == other.cls and self.name == other.name
18
+
19
+
20
+ class RuleEnum(ABCRule):
21
+ __enum__: list[RuleEnumState]
22
+
23
+ def __init_subclass__(cls, *args: typing.Any, **kwargs: typing.Any) -> None:
24
+ new_attributes = set(cls.__dict__) - set(RuleEnum.__dict__) - {"__enum__", "__init__"}
25
+ enum_lst: list[RuleEnumState] = []
26
+
27
+ self = cls.__new__(cls)
28
+ self.__init__()
29
+
30
+ for attribute_name in new_attributes:
31
+ rules = getattr(cls, attribute_name)
32
+ attribute = RuleEnumState(attribute_name, rules, cls)
33
+
34
+ setattr(
35
+ self,
36
+ attribute.name,
37
+ self & FuncRule(lambda _, ctx: self.must_be_state(ctx, attribute)), # type: ignore
38
+ )
39
+ enum_lst.append(attribute)
40
+
41
+ setattr(cls, "__enum__", enum_lst)
42
+
43
+ @classmethod
44
+ def save_state(cls, ctx: Context, enum: RuleEnumState) -> None:
45
+ ctx.update({cls.__class__.__name__ + "_state": enum})
46
+
47
+ @classmethod
48
+ def check_state(cls, ctx: Context) -> RuleEnumState | None:
49
+ return ctx.get(cls.__class__.__name__ + "_state")
50
+
51
+ @classmethod
52
+ def must_be_state(cls, ctx: Context, state: RuleEnumState) -> bool:
53
+ real_state = cls.check_state(ctx)
54
+ if not real_state:
55
+ return False
56
+ return real_state == state
57
+
58
+ async def check(self, event: Update, ctx: Context) -> bool:
59
+ if self.check_state(ctx):
60
+ return True
61
+
62
+ for enum in self.__enum__:
63
+ ctx_copy = ctx.copy()
64
+ if await check_rule(event.ctx_api, enum.rule, event, ctx_copy):
65
+ ctx.update(ctx_copy)
66
+ self.save_state(ctx, enum)
67
+ return True
68
+
69
+ return False
70
+
71
+
72
+ __all__ = ("RuleEnum", "RuleEnumState")
@@ -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",)
@@ -1,37 +1,37 @@
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
- Payload = typing.TypeVar("Payload")
13
-
14
-
15
- class StateMeta(enum.Enum):
16
- NO_STATE = enum.auto()
17
- ANY = enum.auto()
18
-
19
-
20
- @dataclasses.dataclass(frozen=True, slots=True, repr=False)
21
- class State(ABCRule, typing.Generic[Payload]):
22
- storage: "ABCStateStorage[Payload]"
23
- key: str | StateMeta | enum.Enum
24
-
25
- async def check(self, source: Source, ctx: Context) -> bool:
26
- state = await self.storage.get(source.from_user.id)
27
- if not state:
28
- return self.key == StateMeta.NO_STATE
29
-
30
- if self.key != StateMeta.ANY and self.key != state.unwrap().key:
31
- return False
32
-
33
- ctx["state"] = state.unwrap()
34
- return True
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
+ Payload = typing.TypeVar("Payload")
13
+
14
+
15
+ class StateMeta(enum.Enum):
16
+ NO_STATE = enum.auto()
17
+ ANY = enum.auto()
18
+
19
+
20
+ @dataclasses.dataclass(frozen=True, slots=True, repr=False)
21
+ class State(ABCRule, typing.Generic[Payload]):
22
+ storage: "ABCStateStorage[Payload]"
23
+ key: str | StateMeta | enum.Enum
24
+
25
+ async def check(self, source: Source, ctx: Context) -> bool:
26
+ state = await self.storage.get(source.from_user.id)
27
+ if not state:
28
+ return self.key == StateMeta.NO_STATE
29
+
30
+ if self.key != StateMeta.ANY and self.key != state.unwrap().key:
31
+ return False
32
+
33
+ ctx["state"] = state.unwrap()
34
+ return True
35
+
36
+
37
+ __all__ = ("State", "StateMeta")
@@ -1,33 +1,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.text.Text)
13
-
14
-
15
- class Text(ABCRule):
16
- def __init__(self, texts: str | list[str], *, ignore_case: bool = False) -> None:
17
- if not isinstance(texts, list):
18
- texts = [texts]
19
- self.texts = texts if not ignore_case else list(map(str.lower, texts))
20
- self.ignore_case = ignore_case
21
-
22
- def check(self, text: node.text.Text) -> bool:
23
- return (text if not self.ignore_case else text.lower()) in self.texts
24
-
25
- @with_caching_translations
26
- async def translate(self, translator: ABCTranslator) -> typing.Self:
27
- return self.__class__(
28
- texts=[translator.get(text) for text in self.texts],
29
- ignore_case=self.ignore_case,
30
- )
31
-
32
-
33
- __all__ = ("HasText", "Text")
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 Text(ABCRule):
16
+ def __init__(self, texts: str | list[str], *, ignore_case: bool = False) -> None:
17
+ if not isinstance(texts, list):
18
+ texts = [texts]
19
+ self.texts = texts if not ignore_case else list(map(str.lower, texts))
20
+ self.ignore_case = ignore_case
21
+
22
+ def check(self, text: node.text.Text) -> bool:
23
+ return (text if not self.ignore_case else text.lower()) in self.texts
24
+
25
+ @with_caching_translations
26
+ async def translate(self, translator: ABCTranslator) -> typing.Self:
27
+ return self.__class__(
28
+ texts=[translator.get(text) for text in self.texts],
29
+ ignore_case=self.ignore_case,
30
+ )
31
+
32
+
33
+ __all__ = ("HasText", "Text")
@@ -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")
@@ -1,19 +1,19 @@
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
- EventT = typing.TypeVar("EventT", bound=BaseCute)
11
-
12
-
13
- class ABCScenario(ABC, typing.Generic[EventT]):
14
- @abstractmethod
15
- def wait(self, api: "API", view: "ABCStateView[EventT]") -> typing.Any:
16
- pass
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
+ EventT = typing.TypeVar("EventT", bound=BaseCute)
11
+
12
+
13
+ class ABCScenario(ABC, typing.Generic[EventT]):
14
+ @abstractmethod
15
+ def wait(self, api: "API", view: "ABCStateView[EventT]") -> typing.Any:
16
+ pass
17
+
18
+
19
+ __all__ = ("ABCScenario",)