telegrinder 0.1.dev165__tar.gz → 0.1.dev167__tar.gz
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-0.1.dev165 → telegrinder-0.1.dev167}/PKG-INFO +1 -1
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/pyproject.toml +5 -5
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/__init__.py +20 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/api/abc.py +1 -1
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/api/api.py +8 -6
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/api/error.py +2 -3
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/__init__.py +12 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/bot.py +2 -2
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/cute_types/__init__.py +4 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/cute_types/base.py +10 -10
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/cute_types/callback_query.py +1 -3
- telegrinder-0.1.dev167/telegrinder/bot/cute_types/chat_join_request.py +65 -0
- telegrinder-0.1.dev167/telegrinder/bot/cute_types/chat_member_updated.py +246 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/cute_types/message.py +44 -38
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/cute_types/update.py +5 -4
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/cute_types/utils.py +40 -20
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/dispatch/__init__.py +8 -1
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/dispatch/composition.py +7 -7
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/dispatch/context.py +9 -10
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/dispatch/dispatch.py +30 -22
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/dispatch/handler/abc.py +1 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/dispatch/handler/func.py +21 -5
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/dispatch/handler/message_reply.py +2 -3
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/dispatch/middleware/abc.py +2 -4
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/dispatch/process.py +4 -3
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/dispatch/return_manager/__init__.py +1 -1
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/dispatch/return_manager/abc.py +28 -20
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/dispatch/return_manager/callback_query.py +4 -2
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/dispatch/return_manager/inline_query.py +4 -2
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/dispatch/return_manager/message.py +8 -4
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/dispatch/view/__init__.py +8 -2
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/dispatch/view/abc.py +27 -23
- telegrinder-0.1.dev167/telegrinder/bot/dispatch/view/box.py +102 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/dispatch/view/callback_query.py +1 -3
- telegrinder-0.1.dev167/telegrinder/bot/dispatch/view/chat_join_request.py +17 -0
- telegrinder-0.1.dev167/telegrinder/bot/dispatch/view/chat_member.py +26 -0
- telegrinder-0.1.dev167/telegrinder/bot/dispatch/view/message.py +40 -0
- telegrinder-0.1.dev167/telegrinder/bot/dispatch/view/raw.py +112 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/dispatch/waiter_machine/machine.py +41 -26
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/dispatch/waiter_machine/middleware.py +14 -7
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/dispatch/waiter_machine/short_state.py +10 -7
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/polling/polling.py +2 -4
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/rules/__init__.py +20 -12
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/rules/abc.py +0 -9
- telegrinder-0.1.dev167/telegrinder/bot/rules/adapter/event.py +56 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/rules/callback_data.py +15 -18
- telegrinder-0.1.dev167/telegrinder/bot/rules/chat_join.py +47 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/rules/enum_text.py +7 -2
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/rules/fuzzy.py +1 -2
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/rules/inline.py +3 -3
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/rules/is_from.py +39 -51
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/rules/markup.py +1 -2
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/rules/mention.py +1 -4
- telegrinder-0.1.dev167/telegrinder/bot/rules/message.py +17 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/rules/message_entities.py +1 -1
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/rules/regex.py +1 -2
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/rules/rule_enum.py +1 -3
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/rules/start.py +7 -7
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/rules/text.py +2 -1
- telegrinder-0.1.dev167/telegrinder/bot/rules/update.py +16 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/scenario/checkbox.py +5 -7
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/client/aiohttp.py +5 -7
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/model.py +37 -22
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/modules.py +15 -33
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/msgspec_utils.py +34 -35
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/node/attachment.py +21 -7
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/node/base.py +14 -13
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/node/composer.py +5 -5
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/node/container.py +1 -1
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/node/message.py +3 -1
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/node/rule.py +4 -4
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/node/source.py +6 -2
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/node/text.py +3 -1
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/node/tools/generator.py +1 -1
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/tools/__init__.py +3 -1
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/tools/buttons.py +4 -6
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/tools/error_handler/abc.py +1 -2
- telegrinder-0.1.dev167/telegrinder/tools/error_handler/error.py +7 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/tools/error_handler/error_handler.py +34 -24
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/tools/formatting/html.py +9 -5
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/tools/formatting/links.py +1 -3
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/tools/formatting/spec_html_formats.py +1 -1
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/tools/global_context/abc.py +3 -1
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/tools/global_context/global_context.py +13 -31
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/tools/global_context/telegrinder_ctx.py +1 -1
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/tools/i18n/base.py +4 -3
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/tools/i18n/middleware/base.py +1 -3
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/tools/i18n/simple.py +1 -3
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/tools/keyboard.py +1 -1
- telegrinder-0.1.dev167/telegrinder/tools/limited_dict.py +27 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/tools/loop_wrapper/loop_wrapper.py +18 -14
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/tools/magic.py +1 -1
- telegrinder-0.1.dev167/telegrinder/types/__init__.py +238 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/types/enums.py +34 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/types/methods.py +52 -47
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/types/objects.py +533 -90
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/verification_utils.py +4 -1
- telegrinder-0.1.dev165/telegrinder/bot/dispatch/view/box.py +0 -39
- telegrinder-0.1.dev165/telegrinder/bot/dispatch/view/message.py +0 -18
- telegrinder-0.1.dev165/telegrinder/bot/rules/adapter/event.py +0 -49
- telegrinder-0.1.dev165/telegrinder/tools/error_handler/error.py +0 -10
- telegrinder-0.1.dev165/telegrinder/types/__init__.py +0 -2
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/LICENSE +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/readme.md +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/api/__init__.py +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/api/response.py +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/cute_types/inline_query.py +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/dispatch/abc.py +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/dispatch/handler/__init__.py +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/dispatch/middleware/__init__.py +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/dispatch/view/inline_query.py +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/dispatch/waiter_machine/__init__.py +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/polling/__init__.py +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/polling/abc.py +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/rules/adapter/__init__.py +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/rules/adapter/abc.py +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/rules/adapter/errors.py +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/rules/adapter/raw_update.py +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/rules/command.py +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/rules/func.py +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/rules/integer.py +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/scenario/__init__.py +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/scenario/abc.py +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/scenario/choice.py +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/client/__init__.py +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/client/abc.py +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/msgspec_json.py +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/node/__init__.py +12 -12
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/node/tools/__init__.py +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/node/update.py +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/rules.py +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/tools/error_handler/__init__.py +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/tools/formatting/__init__.py +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/tools/global_context/__init__.py +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/tools/i18n/__init__.py +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/tools/i18n/middleware/__init__.py +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/tools/kb_set/__init__.py +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/tools/kb_set/base.py +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/tools/kb_set/yaml.py +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/tools/loop_wrapper/__init__.py +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/tools/loop_wrapper/abc.py +0 -0
- {telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/tools/parse_mode.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "telegrinder"
|
|
3
|
-
version = "0.1.
|
|
3
|
+
version = "0.1.dev167"
|
|
4
4
|
description = "Framework for effective and reliable async telegram bot building."
|
|
5
5
|
authors = ["timoniq <tesseradecades@mail.ru>"]
|
|
6
6
|
maintainers = ["luwqz1 <howluwqz1@gmail.com>"]
|
|
@@ -60,8 +60,8 @@ build-backend = "poetry.core.masonry.api"
|
|
|
60
60
|
[tool.ruff]
|
|
61
61
|
line-length = 100
|
|
62
62
|
target-version = "py311"
|
|
63
|
-
select = ["I", "N", "ANN", "COM", "YTT", "TCH", "SIM"]
|
|
64
|
-
ignore = [
|
|
63
|
+
lint.select = ["I", "N", "ANN", "COM", "YTT", "TCH", "SIM"]
|
|
64
|
+
lint.ignore = [
|
|
65
65
|
"ANN001", "ANN002", "ANN003", "ANN101", "ANN102", "ANN201", "ANN202",
|
|
66
66
|
"ANN204", "ANN206", "ANN401", "COM812", "N818", "TCH001", "TCH004"
|
|
67
67
|
]
|
|
@@ -73,8 +73,8 @@ target-version = ["py311"]
|
|
|
73
73
|
[tool.pytest.ini_options]
|
|
74
74
|
asyncio_mode = "auto"
|
|
75
75
|
|
|
76
|
-
[tool.ruff.per-file-ignores]
|
|
76
|
+
[tool.ruff.lint.per-file-ignores]
|
|
77
77
|
"__init__.py" = ["F401", "F403"]
|
|
78
78
|
|
|
79
|
-
[tool.ruff.flake8-quotes]
|
|
79
|
+
[tool.ruff.lint.flake8-quotes]
|
|
80
80
|
docstring-quotes = "double"
|
|
@@ -52,6 +52,10 @@ from .bot import (
|
|
|
52
52
|
CallbackQueryCute,
|
|
53
53
|
CallbackQueryReturnManager,
|
|
54
54
|
CallbackQueryView,
|
|
55
|
+
ChatJoinRequestCute,
|
|
56
|
+
ChatJoinRequestView,
|
|
57
|
+
ChatMemberUpdatedCute,
|
|
58
|
+
ChatMemberView,
|
|
55
59
|
Checkbox,
|
|
56
60
|
Dispatch,
|
|
57
61
|
FuncHandler,
|
|
@@ -63,8 +67,11 @@ from .bot import (
|
|
|
63
67
|
MessageRule,
|
|
64
68
|
MessageView,
|
|
65
69
|
Polling,
|
|
70
|
+
RawEventView,
|
|
71
|
+
ShortState,
|
|
66
72
|
SingleChoice,
|
|
67
73
|
Telegrinder,
|
|
74
|
+
UpdateCute,
|
|
68
75
|
ViewBox,
|
|
69
76
|
WaiterMachine,
|
|
70
77
|
register_manager,
|
|
@@ -102,7 +109,10 @@ from .tools import (
|
|
|
102
109
|
magic_bundle,
|
|
103
110
|
)
|
|
104
111
|
|
|
112
|
+
Update: typing.TypeAlias = UpdateCute
|
|
105
113
|
Message: typing.TypeAlias = MessageCute
|
|
114
|
+
ChatJoinRequest: typing.TypeAlias = ChatJoinRequestCute
|
|
115
|
+
ChatMemberUpdated: typing.TypeAlias = ChatMemberUpdatedCute
|
|
106
116
|
CallbackQuery: typing.TypeAlias = CallbackQueryCute
|
|
107
117
|
InlineQuery: typing.TypeAlias = InlineQueryCute
|
|
108
118
|
Bot: typing.TypeAlias = Telegrinder
|
|
@@ -140,6 +150,12 @@ __all__ = (
|
|
|
140
150
|
"CallbackQueryCute",
|
|
141
151
|
"CallbackQueryReturnManager",
|
|
142
152
|
"CallbackQueryView",
|
|
153
|
+
"ChatJoinRequest",
|
|
154
|
+
"ChatJoinRequestCute",
|
|
155
|
+
"ChatJoinRequestView",
|
|
156
|
+
"ChatMemberUpdated",
|
|
157
|
+
"ChatMemberUpdatedCute",
|
|
158
|
+
"ChatMemberView",
|
|
143
159
|
"Checkbox",
|
|
144
160
|
"CtxVar",
|
|
145
161
|
"DelayedTask",
|
|
@@ -169,12 +185,16 @@ __all__ = (
|
|
|
169
185
|
"Model",
|
|
170
186
|
"ParseMode",
|
|
171
187
|
"Polling",
|
|
188
|
+
"RawEventView",
|
|
172
189
|
"RowButtons",
|
|
190
|
+
"ShortState",
|
|
173
191
|
"SimpleI18n",
|
|
174
192
|
"SimpleTranslator",
|
|
175
193
|
"SingleChoice",
|
|
176
194
|
"Telegrinder",
|
|
177
195
|
"Token",
|
|
196
|
+
"Update",
|
|
197
|
+
"UpdateCute",
|
|
178
198
|
"ViewBox",
|
|
179
199
|
"WaiterMachine",
|
|
180
200
|
"ctx_var",
|
|
@@ -17,7 +17,7 @@ class Token(str):
|
|
|
17
17
|
if token.count(":") != 1 or not token.split(":")[0].isdigit():
|
|
18
18
|
raise InvalidTokenError("Invalid token, it should look like this '123:ABC'.")
|
|
19
19
|
return super().__new__(cls, token)
|
|
20
|
-
|
|
20
|
+
|
|
21
21
|
def __repr__(self) -> str:
|
|
22
22
|
return f"<Token: {self.bot_id}:{''.join(self.split(':')[-1])[:6]}...>"
|
|
23
23
|
|
|
@@ -32,7 +32,7 @@ class API(ABCAPI, APIMethods):
|
|
|
32
32
|
self.token = token
|
|
33
33
|
self.http = http or AiohttpClient()
|
|
34
34
|
super().__init__(self)
|
|
35
|
-
|
|
35
|
+
|
|
36
36
|
def __repr__(self) -> str:
|
|
37
37
|
return "<{}: token={!r}, http={!r}>".format(
|
|
38
38
|
self.__class__.__name__,
|
|
@@ -56,15 +56,17 @@ class API(ABCAPI, APIMethods):
|
|
|
56
56
|
) -> Result[dict[str, typing.Any] | list[typing.Any] | bool, APIError]:
|
|
57
57
|
response = await self.http.request_json(
|
|
58
58
|
url=self.request_url + method,
|
|
59
|
-
data=compose_data(self.http, data or {}, files or {})
|
|
59
|
+
data=compose_data(self.http, data or {}, files or {}),
|
|
60
60
|
)
|
|
61
61
|
if response.get("ok"):
|
|
62
62
|
assert "result" in response
|
|
63
63
|
return Ok(response["result"])
|
|
64
|
-
return Error(
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
64
|
+
return Error(
|
|
65
|
+
APIError(
|
|
66
|
+
code=response.get("error_code", 400),
|
|
67
|
+
error=response.get("description"),
|
|
68
|
+
)
|
|
69
|
+
)
|
|
68
70
|
|
|
69
71
|
async def request_raw(
|
|
70
72
|
self,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
class APIError(BaseException):
|
|
2
2
|
def __init__(self, code: int, error: str | None = None) -> None:
|
|
3
3
|
self.code, self.error = code, error
|
|
4
|
-
|
|
4
|
+
|
|
5
5
|
def __str__(self) -> str:
|
|
6
6
|
return f"[{self.code}] {self.error or 'Something went wrong'}"
|
|
7
7
|
|
|
@@ -9,8 +9,7 @@ class APIError(BaseException):
|
|
|
9
9
|
return f"<APIError: {self.__str__()}>"
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
class InvalidTokenError(BaseException):
|
|
13
|
-
...
|
|
12
|
+
class InvalidTokenError(BaseException): ...
|
|
14
13
|
|
|
15
14
|
|
|
16
15
|
__all__ = ("APIError", "InvalidTokenError")
|
|
@@ -2,6 +2,8 @@ from .bot import Telegrinder
|
|
|
2
2
|
from .cute_types import (
|
|
3
3
|
BaseCute,
|
|
4
4
|
CallbackQueryCute,
|
|
5
|
+
ChatJoinRequestCute,
|
|
6
|
+
ChatMemberUpdatedCute,
|
|
5
7
|
InlineQueryCute,
|
|
6
8
|
MessageCute,
|
|
7
9
|
UpdateCute,
|
|
@@ -18,6 +20,8 @@ from .dispatch import (
|
|
|
18
20
|
BaseView,
|
|
19
21
|
CallbackQueryReturnManager,
|
|
20
22
|
CallbackQueryView,
|
|
23
|
+
ChatJoinRequestView,
|
|
24
|
+
ChatMemberView,
|
|
21
25
|
CompositionDispatch,
|
|
22
26
|
Context,
|
|
23
27
|
Dispatch,
|
|
@@ -27,6 +31,8 @@ from .dispatch import (
|
|
|
27
31
|
MessageReplyHandler,
|
|
28
32
|
MessageReturnManager,
|
|
29
33
|
MessageView,
|
|
34
|
+
RawEventView,
|
|
35
|
+
ShortState,
|
|
30
36
|
ViewBox,
|
|
31
37
|
WaiterMachine,
|
|
32
38
|
register_manager,
|
|
@@ -53,6 +59,10 @@ __all__ = (
|
|
|
53
59
|
"CallbackQueryReturnManager",
|
|
54
60
|
"CallbackQueryRule",
|
|
55
61
|
"CallbackQueryView",
|
|
62
|
+
"ChatJoinRequestCute",
|
|
63
|
+
"ChatJoinRequestView",
|
|
64
|
+
"ChatMemberUpdatedCute",
|
|
65
|
+
"ChatMemberView",
|
|
56
66
|
"Checkbox",
|
|
57
67
|
"CompositionDispatch",
|
|
58
68
|
"Context",
|
|
@@ -67,6 +77,8 @@ __all__ = (
|
|
|
67
77
|
"MessageRule",
|
|
68
78
|
"MessageView",
|
|
69
79
|
"Polling",
|
|
80
|
+
"RawEventView",
|
|
81
|
+
"ShortState",
|
|
70
82
|
"SingleChoice",
|
|
71
83
|
"Telegrinder",
|
|
72
84
|
"UpdateCute",
|
|
@@ -11,7 +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]):
|
|
14
|
+
class Telegrinder(typing.Generic[DispatchT, PollingT, LoopWrapperT]):
|
|
15
15
|
def __init__(
|
|
16
16
|
self,
|
|
17
17
|
api: API,
|
|
@@ -24,7 +24,7 @@ class Telegrinder(typing.Generic[DispatchT, PollingT, LoopWrapperT]):
|
|
|
24
24
|
self.dispatch = typing.cast(DispatchT, dispatch or Dispatch())
|
|
25
25
|
self.polling = typing.cast(PollingT, polling or Polling(api))
|
|
26
26
|
self.loop_wrapper = typing.cast(LoopWrapperT, loop_wrapper or LoopWrapper())
|
|
27
|
-
|
|
27
|
+
|
|
28
28
|
def __repr__(self) -> str:
|
|
29
29
|
return "<{}: api={!r}, dispatch={!r}, polling={!r}, loop_wrapper={!r}>".format(
|
|
30
30
|
self.__class__.__name__,
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
from .base import BaseCute
|
|
2
2
|
from .callback_query import CallbackQueryCute
|
|
3
|
+
from .chat_join_request import ChatJoinRequestCute
|
|
4
|
+
from .chat_member_updated import ChatMemberUpdatedCute
|
|
3
5
|
from .inline_query import InlineQueryCute
|
|
4
6
|
from .message import MessageCute
|
|
5
7
|
from .update import UpdateCute
|
|
@@ -7,6 +9,8 @@ from .update import UpdateCute
|
|
|
7
9
|
__all__ = (
|
|
8
10
|
"BaseCute",
|
|
9
11
|
"CallbackQueryCute",
|
|
12
|
+
"ChatJoinRequestCute",
|
|
13
|
+
"ChatMemberUpdatedCute",
|
|
10
14
|
"InlineQueryCute",
|
|
11
15
|
"MessageCute",
|
|
12
16
|
"UpdateCute",
|
|
@@ -23,12 +23,10 @@ if typing.TYPE_CHECKING:
|
|
|
23
23
|
api: ABCAPI
|
|
24
24
|
|
|
25
25
|
@classmethod
|
|
26
|
-
def from_update(cls, update: UpdateT, bound_api: ABCAPI) -> typing.Self:
|
|
27
|
-
...
|
|
26
|
+
def from_update(cls, update: UpdateT, bound_api: ABCAPI) -> typing.Self: ...
|
|
28
27
|
|
|
29
28
|
@property
|
|
30
|
-
def ctx_api(self) -> API:
|
|
31
|
-
...
|
|
29
|
+
def ctx_api(self) -> API: ...
|
|
32
30
|
|
|
33
31
|
else:
|
|
34
32
|
|
|
@@ -91,13 +89,15 @@ def shortcut(
|
|
|
91
89
|
):
|
|
92
90
|
def wrapper(func: F) -> F:
|
|
93
91
|
@wraps(func)
|
|
94
|
-
async def inner(
|
|
92
|
+
async def inner(
|
|
93
|
+
self: CuteT,
|
|
94
|
+
*args: typing.Any,
|
|
95
|
+
**kwargs: typing.Any,
|
|
96
|
+
) -> typing.Any:
|
|
95
97
|
if executor is None:
|
|
96
98
|
return await func(self, *args, **kwargs)
|
|
97
99
|
signature_params = {
|
|
98
|
-
k: p
|
|
99
|
-
for k, p in inspect.signature(func).parameters.items()
|
|
100
|
-
if k != "self"
|
|
100
|
+
k: p for k, p in inspect.signature(func).parameters.items() if k != "self"
|
|
101
101
|
}
|
|
102
102
|
params: dict[str, typing.Any] = {}
|
|
103
103
|
index = 0
|
|
@@ -113,14 +113,14 @@ def shortcut(
|
|
|
113
113
|
params[k] = kwargs.pop(k, p.default) if p.default is not p.empty else kwargs.pop(k)
|
|
114
114
|
|
|
115
115
|
return await executor(self, method_name, get_params(params))
|
|
116
|
-
|
|
116
|
+
|
|
117
117
|
inner.__shortcut__ = Shortcut( # type: ignore
|
|
118
118
|
method_name=method_name,
|
|
119
119
|
executor=executor,
|
|
120
120
|
custom_params=custom_params or set(),
|
|
121
121
|
)
|
|
122
122
|
return inner # type: ignore
|
|
123
|
-
|
|
123
|
+
|
|
124
124
|
return wrapper
|
|
125
125
|
|
|
126
126
|
|
{telegrinder-0.1.dev165 → telegrinder-0.1.dev167}/telegrinder/bot/cute_types/callback_query.py
RENAMED
|
@@ -44,9 +44,7 @@ class CallbackQueryCute(BaseCute[CallbackQuery], CallbackQuery, kw_only=True, di
|
|
|
44
44
|
by the bot with the callback button that originated the query."""
|
|
45
45
|
|
|
46
46
|
return self.message.map(
|
|
47
|
-
lambda m: m.only()
|
|
48
|
-
.map(lambda m: m.is_topic_message.unwrap_or(False))
|
|
49
|
-
.unwrap_or(False)
|
|
47
|
+
lambda m: m.only().map(lambda m: m.is_topic_message.unwrap_or(False)).unwrap_or(False)
|
|
50
48
|
)
|
|
51
49
|
|
|
52
50
|
@property
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import typing
|
|
2
|
+
|
|
3
|
+
from fntypes.result import Result
|
|
4
|
+
|
|
5
|
+
from telegrinder.api.abc import ABCAPI, APIError
|
|
6
|
+
from telegrinder.types.objects import ChatJoinRequest, User
|
|
7
|
+
|
|
8
|
+
from .base import BaseCute, shortcut
|
|
9
|
+
from .chat_member_updated import ChatMemberShortcuts, chat_member_interaction
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class ChatJoinRequestCute(
|
|
13
|
+
BaseCute[ChatJoinRequest], ChatJoinRequest, ChatMemberShortcuts, kw_only=True
|
|
14
|
+
):
|
|
15
|
+
api: ABCAPI
|
|
16
|
+
|
|
17
|
+
@property
|
|
18
|
+
def from_user(self) -> User:
|
|
19
|
+
return self.from_
|
|
20
|
+
|
|
21
|
+
@property
|
|
22
|
+
def user_id(self) -> int:
|
|
23
|
+
return self.from_user.id
|
|
24
|
+
|
|
25
|
+
@shortcut("approve_chat_join_request", executor=chat_member_interaction)
|
|
26
|
+
async def approve(
|
|
27
|
+
self,
|
|
28
|
+
chat_id: int | str | None = None,
|
|
29
|
+
user_id: int | None = None,
|
|
30
|
+
**other: typing.Any,
|
|
31
|
+
) -> Result[bool, APIError]:
|
|
32
|
+
"""Shortcut `API.approve_chat_join_request()`, see the [documentation](https://core.telegram.org/bots/api#approvechatjoinrequest)
|
|
33
|
+
|
|
34
|
+
Use this method to approve a chat join request. The bot must be an administrator
|
|
35
|
+
in the chat for this to work and must have the can_invite_users administrator
|
|
36
|
+
right. Returns True on success.
|
|
37
|
+
|
|
38
|
+
:param chat_id: Unique identifier for the target chat or username of the target channel \
|
|
39
|
+
(in the format @channelusername).
|
|
40
|
+
|
|
41
|
+
:param user_id: Unique identifier of the target user.
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
...
|
|
45
|
+
|
|
46
|
+
@shortcut("decline_chat_join_request", executor=chat_member_interaction)
|
|
47
|
+
async def decline(
|
|
48
|
+
self,
|
|
49
|
+
chat_id: int | str | None = None,
|
|
50
|
+
user_id: int | None = None,
|
|
51
|
+
**other: typing.Any,
|
|
52
|
+
) -> Result[bool, APIError]:
|
|
53
|
+
"""Shortcut `API.decline_chat_join_request()`, see the [documentation](https://core.telegram.org/bots/api#declinechatjoinrequest)
|
|
54
|
+
|
|
55
|
+
Use this method to decline a chat join request. The bot must be an administrator
|
|
56
|
+
in the chat for this to work and must have the can_invite_users administrator
|
|
57
|
+
right. Returns True on success.
|
|
58
|
+
|
|
59
|
+
:param chat_id: Unique identifier for the target chat or username of the target channel \
|
|
60
|
+
(in the format @channelusername).
|
|
61
|
+
|
|
62
|
+
:param user_id: Unique identifier of the target user.
|
|
63
|
+
"""
|
|
64
|
+
|
|
65
|
+
...
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import typing
|
|
2
|
+
from datetime import datetime
|
|
3
|
+
|
|
4
|
+
from fntypes.result import Result
|
|
5
|
+
|
|
6
|
+
from telegrinder.api import ABCAPI, APIError
|
|
7
|
+
from telegrinder.model import get_params
|
|
8
|
+
from telegrinder.types.objects import ChatMemberUpdated, ChatPermissions, User
|
|
9
|
+
|
|
10
|
+
from .base import BaseCute, compose_method_params, shortcut
|
|
11
|
+
from .utils import compose_chat_permissions
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
async def chat_member_interaction(
|
|
15
|
+
update: BaseCute[typing.Any],
|
|
16
|
+
method_name: str,
|
|
17
|
+
params: dict[str, typing.Any],
|
|
18
|
+
) -> Result[typing.Any, APIError]:
|
|
19
|
+
if isinstance(params.get("permissions"), dict):
|
|
20
|
+
params["permissions"] = compose_chat_permissions(**params["permissions"])
|
|
21
|
+
params = compose_method_params(
|
|
22
|
+
get_params(locals()),
|
|
23
|
+
update,
|
|
24
|
+
default_params={"chat_id", "user_id"},
|
|
25
|
+
)
|
|
26
|
+
return await getattr(update.ctx_api, method_name)(**params)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class ChatMemberShortcuts:
|
|
30
|
+
"""Shortcut methods for `ChatMemberUpdatedCute`, `ChatJoinRequestCute` objects."""
|
|
31
|
+
|
|
32
|
+
@shortcut("ban_chat_member", executor=chat_member_interaction)
|
|
33
|
+
async def ban_chat_member(
|
|
34
|
+
self,
|
|
35
|
+
chat_id: int | str | None = None,
|
|
36
|
+
user_id: int | None = None,
|
|
37
|
+
until_date: datetime | int | None = None,
|
|
38
|
+
revoke_messages: bool | None = None,
|
|
39
|
+
**other: typing.Any,
|
|
40
|
+
) -> Result[bool, APIError]:
|
|
41
|
+
"""Shortcut `API.ban_chat_member()`, see the [documentation](https://core.telegram.org/bots/api#banchatmember)
|
|
42
|
+
|
|
43
|
+
Use this method to ban a user in a group, a supergroup or a channel. In the case
|
|
44
|
+
of supergroups and channels, the user will not be able to return to the chat
|
|
45
|
+
on their own using invite links, etc., unless unbanned first. The bot must
|
|
46
|
+
be an administrator in the chat for this to work and must have the appropriate
|
|
47
|
+
administrator rights. Returns True on success.
|
|
48
|
+
|
|
49
|
+
:param chat_id: Unique identifier for the target group or username of the target supergroup \
|
|
50
|
+
or channel (in the format @channelusername).
|
|
51
|
+
|
|
52
|
+
:param user_id: Unique identifier of the target user.
|
|
53
|
+
|
|
54
|
+
:param until_date: Date when the user will be unbanned; Unix time. If user is banned for more \
|
|
55
|
+
than 366 days or less than 30 seconds from the current time they are considered \
|
|
56
|
+
to be banned forever. Applied for supergroups and channels only.
|
|
57
|
+
|
|
58
|
+
:param revoke_messages: Pass True to delete all messages from the chat for the user that is being removed. \
|
|
59
|
+
If False, the user will be able to see messages in the group that were sent \
|
|
60
|
+
before the user was removed. Always True for supergroups and channels. \
|
|
61
|
+
"""
|
|
62
|
+
|
|
63
|
+
...
|
|
64
|
+
|
|
65
|
+
@shortcut("unban_chat_member", executor=chat_member_interaction)
|
|
66
|
+
async def unban_chat_member(
|
|
67
|
+
self,
|
|
68
|
+
chat_id: int | str | None = None,
|
|
69
|
+
user_id: int | None = None,
|
|
70
|
+
only_if_banned: bool | None = None,
|
|
71
|
+
**other: typing.Any,
|
|
72
|
+
) -> Result[bool, APIError]:
|
|
73
|
+
"""Shortcut `API.unban_chat_member()`, see the [documentation](https://core.telegram.org/bots/api#unbanchatmember)
|
|
74
|
+
|
|
75
|
+
Use this method to unban a previously banned user in a supergroup or channel.
|
|
76
|
+
The user will not return to the group or channel automatically, but will
|
|
77
|
+
be able to join via link, etc. The bot must be an administrator for this to
|
|
78
|
+
work. By default, this method guarantees that after the call the user is
|
|
79
|
+
not a member of the chat, but will be able to join it. So if the user is a member
|
|
80
|
+
of the chat they will also be removed from the chat. If you don't want this,
|
|
81
|
+
use the parameter only_if_banned. Returns True on success.
|
|
82
|
+
|
|
83
|
+
:param chat_id: Unique identifier for the target group or username of the target supergroup \
|
|
84
|
+
or channel (in the format @channelusername).
|
|
85
|
+
|
|
86
|
+
:param user_id: Unique identifier of the target user.
|
|
87
|
+
|
|
88
|
+
:param only_if_banned: Do nothing if the user is not banned.
|
|
89
|
+
"""
|
|
90
|
+
|
|
91
|
+
...
|
|
92
|
+
|
|
93
|
+
@shortcut(
|
|
94
|
+
"restrict_chat_member",
|
|
95
|
+
executor=chat_member_interaction,
|
|
96
|
+
custom_params={"permissions"},
|
|
97
|
+
)
|
|
98
|
+
async def restrict_chat_member(
|
|
99
|
+
self,
|
|
100
|
+
permissions: ChatPermissions | dict[str, typing.Any],
|
|
101
|
+
chat_id: int | str | None = None,
|
|
102
|
+
user_id: int | None = None,
|
|
103
|
+
use_independent_chat_permissions: bool | None = None,
|
|
104
|
+
until_date: datetime | int | None = None,
|
|
105
|
+
**other: typing.Any,
|
|
106
|
+
) -> Result[bool, APIError]:
|
|
107
|
+
"""Shortcut `API.restrict_chat_member()`, see the [documentation](https://core.telegram.org/bots/api#restrictchatmember)
|
|
108
|
+
|
|
109
|
+
Use this method to restrict a user in a supergroup. The bot must be an administrator
|
|
110
|
+
in the supergroup for this to work and must have the appropriate administrator
|
|
111
|
+
rights. Pass True for all permissions to lift restrictions from a user.
|
|
112
|
+
Returns True on success.
|
|
113
|
+
|
|
114
|
+
:param chat_id: Unique identifier for the target chat or username of the target supergroup \
|
|
115
|
+
(in the format @supergroupusername).
|
|
116
|
+
|
|
117
|
+
:param user_id: Unique identifier of the target user.
|
|
118
|
+
|
|
119
|
+
:param permissions: A JSON-serialized object for new user permissions.
|
|
120
|
+
|
|
121
|
+
:param use_independent_chat_permissions: Pass True if chat permissions are set independently. Otherwise, the can_send_other_messages \
|
|
122
|
+
and can_add_web_page_previews permissions will imply the can_send_messages, \
|
|
123
|
+
can_send_audios, can_send_documents, can_send_photos, can_send_videos, \
|
|
124
|
+
can_send_video_notes, and can_send_voice_notes permissions; the can_send_polls \
|
|
125
|
+
permission will imply the can_send_messages permission.
|
|
126
|
+
|
|
127
|
+
:param until_date: Date when restrictions will be lifted for the user; Unix time. If user is \
|
|
128
|
+
restricted for more than 366 days or less than 30 seconds from the current \
|
|
129
|
+
time, they are considered to be restricted forever.
|
|
130
|
+
"""
|
|
131
|
+
|
|
132
|
+
...
|
|
133
|
+
|
|
134
|
+
@shortcut("promote_chat_member", executor=chat_member_interaction)
|
|
135
|
+
async def promote_chat_member(
|
|
136
|
+
self,
|
|
137
|
+
chat_id: int | str | None = None,
|
|
138
|
+
user_id: int | None = None,
|
|
139
|
+
is_anonymous: bool | None = None,
|
|
140
|
+
can_manage_chat: bool | None = None,
|
|
141
|
+
can_delete_messages: bool | None = None,
|
|
142
|
+
can_manage_video_chats: bool | None = None,
|
|
143
|
+
can_restrict_members: bool | None = None,
|
|
144
|
+
can_promote_members: bool | None = None,
|
|
145
|
+
can_change_info: bool | None = None,
|
|
146
|
+
can_invite_users: bool | None = None,
|
|
147
|
+
can_post_stories: bool | None = None,
|
|
148
|
+
can_edit_stories: bool | None = None,
|
|
149
|
+
can_delete_stories: bool | None = None,
|
|
150
|
+
can_post_messages: bool | None = None,
|
|
151
|
+
can_edit_messages: bool | None = None,
|
|
152
|
+
can_pin_messages: bool | None = None,
|
|
153
|
+
can_manage_topics: bool | None = None,
|
|
154
|
+
**other: typing.Any,
|
|
155
|
+
) -> Result[bool, APIError]:
|
|
156
|
+
"""Shortcut `API.promote_chat_member()`, see the [documentation](https://core.telegram.org/bots/api#promotechatmember)
|
|
157
|
+
|
|
158
|
+
Use this method to promote or demote a user in a supergroup or a channel. The
|
|
159
|
+
bot must be an administrator in the chat for this to work and must have the
|
|
160
|
+
appropriate administrator rights. Pass False for all boolean parameters
|
|
161
|
+
to demote a user. Returns True on success.
|
|
162
|
+
|
|
163
|
+
:param chat_id: Unique identifier for the target chat or username of the target channel \
|
|
164
|
+
(in the format @channelusername).
|
|
165
|
+
|
|
166
|
+
:param user_id: Unique identifier of the target user.
|
|
167
|
+
|
|
168
|
+
:param is_anonymous: Pass True if the administrator's presence in the chat is hidden.
|
|
169
|
+
|
|
170
|
+
:param can_manage_chat: Pass True if the administrator can access the chat event log, get boost list, \
|
|
171
|
+
see hidden supergroup and channel members, report spam messages and ignore \
|
|
172
|
+
slow mode. Implied by any other administrator privilege.
|
|
173
|
+
|
|
174
|
+
:param can_delete_messages: Pass True if the administrator can delete messages of other users.
|
|
175
|
+
|
|
176
|
+
:param can_manage_video_chats: Pass True if the administrator can manage video chats.
|
|
177
|
+
|
|
178
|
+
:param can_restrict_members: Pass True if the administrator can restrict, ban or unban chat members, \
|
|
179
|
+
or access supergroup statistics.
|
|
180
|
+
|
|
181
|
+
:param can_promote_members: Pass True if the administrator can add new administrators with a subset \
|
|
182
|
+
of their own privileges or demote administrators that they have promoted, \
|
|
183
|
+
directly or indirectly (promoted by administrators that were appointed \
|
|
184
|
+
by him).
|
|
185
|
+
|
|
186
|
+
:param can_change_info: Pass True if the administrator can change chat title, photo and other settings. \
|
|
187
|
+
|
|
188
|
+
:param can_invite_users: Pass True if the administrator can invite new users to the chat.
|
|
189
|
+
|
|
190
|
+
:param can_post_stories: Pass True if the administrator can post stories to the chat.
|
|
191
|
+
|
|
192
|
+
:param can_edit_stories: Pass True if the administrator can edit stories posted by other users.
|
|
193
|
+
|
|
194
|
+
:param can_delete_stories: Pass True if the administrator can delete stories posted by other users. \
|
|
195
|
+
|
|
196
|
+
:param can_post_messages: Pass True if the administrator can post messages in the channel, or access \
|
|
197
|
+
channel statistics; for channels only.
|
|
198
|
+
|
|
199
|
+
:param can_edit_messages: Pass True if the administrator can edit messages of other users and can pin \
|
|
200
|
+
messages; for channels only.
|
|
201
|
+
|
|
202
|
+
:param can_pin_messages: Pass True if the administrator can pin messages; for supergroups only. \
|
|
203
|
+
|
|
204
|
+
:param can_manage_topics: Pass True if the user is allowed to create, rename, close, and reopen forum \
|
|
205
|
+
topics; for supergroups only.
|
|
206
|
+
"""
|
|
207
|
+
|
|
208
|
+
...
|
|
209
|
+
|
|
210
|
+
@shortcut("set_chat_administrator_custom_title", executor=chat_member_interaction)
|
|
211
|
+
async def set_chat_administrator_custom_title(
|
|
212
|
+
self,
|
|
213
|
+
custom_title: str,
|
|
214
|
+
chat_id: int | str | None = None,
|
|
215
|
+
user_id: int | None = None,
|
|
216
|
+
**other: typing.Any,
|
|
217
|
+
) -> Result[bool, APIError]:
|
|
218
|
+
"""Shortcut `API.set_chat_administrator_custom_title()`, see the [documentation](https://core.telegram.org/bots/api#setchatadministratorcustomtitle)
|
|
219
|
+
|
|
220
|
+
Use this method to set a custom title for an administrator in a supergroup
|
|
221
|
+
promoted by the bot. Returns True on success.
|
|
222
|
+
|
|
223
|
+
:param chat_id: Unique identifier for the target chat or username of the target supergroup \
|
|
224
|
+
(in the format @supergroupusername).
|
|
225
|
+
|
|
226
|
+
:param user_id: Unique identifier of the target user.
|
|
227
|
+
|
|
228
|
+
:param custom_title: New custom title for the administrator; 0-16 characters, emoji are not \
|
|
229
|
+
allowed.
|
|
230
|
+
"""
|
|
231
|
+
|
|
232
|
+
...
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
class ChatMemberUpdatedCute(
|
|
236
|
+
BaseCute[ChatMemberUpdated], ChatMemberUpdated, ChatMemberShortcuts, kw_only=True
|
|
237
|
+
):
|
|
238
|
+
api: ABCAPI
|
|
239
|
+
|
|
240
|
+
@property
|
|
241
|
+
def from_user(self) -> User:
|
|
242
|
+
return self.from_
|
|
243
|
+
|
|
244
|
+
@property
|
|
245
|
+
def user_id(self) -> int:
|
|
246
|
+
return self.from_user.id
|