telegrinder 0.3.1__py3-none-any.whl → 0.3.2__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 (164) 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 +11 -11
  10. telegrinder/bot/cute_types/base.py +258 -234
  11. telegrinder/bot/cute_types/callback_query.py +382 -382
  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 +53 -53
  15. telegrinder/bot/cute_types/message.py +2631 -2631
  16. telegrinder/bot/cute_types/update.py +75 -75
  17. telegrinder/bot/cute_types/utils.py +92 -92
  18. telegrinder/bot/dispatch/__init__.py +55 -55
  19. telegrinder/bot/dispatch/abc.py +77 -77
  20. telegrinder/bot/dispatch/context.py +92 -92
  21. telegrinder/bot/dispatch/dispatch.py +202 -201
  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 +128 -123
  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 +16 -16
  35. telegrinder/bot/dispatch/process.py +132 -132
  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 -211
  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 -118
  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 +57 -57
  55. telegrinder/bot/dispatch/waiter_machine/hasher/hasher.py +57 -57
  56. telegrinder/bot/dispatch/waiter_machine/hasher/message.py +53 -53
  57. telegrinder/bot/dispatch/waiter_machine/hasher/state.py +19 -19
  58. telegrinder/bot/dispatch/waiter_machine/machine.py +168 -170
  59. telegrinder/bot/dispatch/waiter_machine/middleware.py +89 -89
  60. telegrinder/bot/dispatch/waiter_machine/short_state.py +65 -65
  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 +238 -238
  66. telegrinder/bot/rules/adapter/__init__.py +9 -9
  67. telegrinder/bot/rules/adapter/abc.py +29 -29
  68. telegrinder/bot/rules/adapter/errors.py +5 -5
  69. telegrinder/bot/rules/adapter/event.py +76 -76
  70. telegrinder/bot/rules/adapter/node.py +48 -48
  71. telegrinder/bot/rules/adapter/raw_update.py +30 -30
  72. telegrinder/bot/rules/callback_data.py +171 -171
  73. telegrinder/bot/rules/chat_join.py +48 -48
  74. telegrinder/bot/rules/command.py +126 -126
  75. telegrinder/bot/rules/enum_text.py +36 -36
  76. telegrinder/bot/rules/func.py +26 -26
  77. telegrinder/bot/rules/fuzzy.py +24 -24
  78. telegrinder/bot/rules/inline.py +60 -60
  79. telegrinder/bot/rules/integer.py +20 -20
  80. telegrinder/bot/rules/is_from.py +146 -146
  81. telegrinder/bot/rules/markup.py +43 -43
  82. telegrinder/bot/rules/mention.py +14 -14
  83. telegrinder/bot/rules/message.py +17 -17
  84. telegrinder/bot/rules/message_entities.py +35 -35
  85. telegrinder/bot/rules/node.py +27 -27
  86. telegrinder/bot/rules/regex.py +37 -37
  87. telegrinder/bot/rules/rule_enum.py +72 -72
  88. telegrinder/bot/rules/start.py +42 -42
  89. telegrinder/bot/rules/state.py +37 -37
  90. telegrinder/bot/rules/text.py +33 -33
  91. telegrinder/bot/rules/update.py +15 -15
  92. telegrinder/bot/scenario/__init__.py +5 -5
  93. telegrinder/bot/scenario/abc.py +19 -19
  94. telegrinder/bot/scenario/checkbox.py +167 -147
  95. telegrinder/bot/scenario/choice.py +46 -44
  96. telegrinder/client/__init__.py +4 -4
  97. telegrinder/client/abc.py +75 -75
  98. telegrinder/client/aiohttp.py +130 -130
  99. telegrinder/model.py +244 -244
  100. telegrinder/modules.py +237 -237
  101. telegrinder/msgspec_json.py +14 -14
  102. telegrinder/msgspec_utils.py +410 -410
  103. telegrinder/node/__init__.py +20 -20
  104. telegrinder/node/attachment.py +92 -92
  105. telegrinder/node/base.py +143 -144
  106. telegrinder/node/callback_query.py +14 -14
  107. telegrinder/node/command.py +33 -33
  108. telegrinder/node/composer.py +196 -184
  109. telegrinder/node/container.py +27 -27
  110. telegrinder/node/event.py +71 -73
  111. telegrinder/node/me.py +16 -16
  112. telegrinder/node/message.py +14 -14
  113. telegrinder/node/polymorphic.py +48 -52
  114. telegrinder/node/rule.py +76 -76
  115. telegrinder/node/scope.py +38 -38
  116. telegrinder/node/source.py +71 -71
  117. telegrinder/node/text.py +21 -21
  118. telegrinder/node/tools/__init__.py +3 -3
  119. telegrinder/node/tools/generator.py +40 -40
  120. telegrinder/node/update.py +15 -15
  121. telegrinder/rules.py +0 -0
  122. telegrinder/tools/__init__.py +74 -74
  123. telegrinder/tools/buttons.py +79 -79
  124. telegrinder/tools/error_handler/__init__.py +7 -7
  125. telegrinder/tools/error_handler/abc.py +33 -33
  126. telegrinder/tools/error_handler/error.py +9 -9
  127. telegrinder/tools/error_handler/error_handler.py +193 -193
  128. telegrinder/tools/formatting/__init__.py +46 -46
  129. telegrinder/tools/formatting/html.py +308 -308
  130. telegrinder/tools/formatting/links.py +33 -33
  131. telegrinder/tools/formatting/spec_html_formats.py +111 -111
  132. telegrinder/tools/functional.py +12 -12
  133. telegrinder/tools/global_context/__init__.py +7 -7
  134. telegrinder/tools/global_context/abc.py +63 -63
  135. telegrinder/tools/global_context/global_context.py +412 -412
  136. telegrinder/tools/global_context/telegrinder_ctx.py +27 -27
  137. telegrinder/tools/i18n/__init__.py +12 -12
  138. telegrinder/tools/i18n/abc.py +32 -32
  139. telegrinder/tools/i18n/middleware/__init__.py +3 -3
  140. telegrinder/tools/i18n/middleware/abc.py +25 -25
  141. telegrinder/tools/i18n/simple.py +43 -43
  142. telegrinder/tools/kb_set/__init__.py +4 -4
  143. telegrinder/tools/kb_set/base.py +15 -15
  144. telegrinder/tools/kb_set/yaml.py +63 -63
  145. telegrinder/tools/keyboard.py +128 -128
  146. telegrinder/tools/limited_dict.py +37 -37
  147. telegrinder/tools/loop_wrapper/__init__.py +4 -4
  148. telegrinder/tools/loop_wrapper/abc.py +15 -15
  149. telegrinder/tools/loop_wrapper/loop_wrapper.py +216 -216
  150. telegrinder/tools/magic.py +168 -168
  151. telegrinder/tools/parse_mode.py +6 -6
  152. telegrinder/tools/state_storage/__init__.py +4 -4
  153. telegrinder/tools/state_storage/abc.py +35 -35
  154. telegrinder/tools/state_storage/memory.py +25 -25
  155. telegrinder/types/__init__.py +6 -6
  156. telegrinder/types/enums.py +672 -672
  157. telegrinder/types/methods.py +4633 -4633
  158. telegrinder/types/objects.py +6317 -6317
  159. telegrinder/verification_utils.py +32 -32
  160. {telegrinder-0.3.1.dist-info → telegrinder-0.3.2.dist-info}/LICENSE +22 -22
  161. {telegrinder-0.3.1.dist-info → telegrinder-0.3.2.dist-info}/METADATA +1 -1
  162. telegrinder-0.3.2.dist-info/RECORD +164 -0
  163. telegrinder-0.3.1.dist-info/RECORD +0 -164
  164. {telegrinder-0.3.1.dist-info → telegrinder-0.3.2.dist-info}/WHEEL +0 -0
@@ -1,61 +1,61 @@
1
- import typing
2
-
3
- from fntypes.result import Result
4
-
5
- from telegrinder.api import API, APIError
6
- from telegrinder.bot.cute_types.base import BaseCute, shortcut
7
- from telegrinder.bot.cute_types.chat_member_updated import ChatMemberShortcuts, chat_member_interaction
8
- from telegrinder.types.objects import *
9
-
10
-
11
- class ChatJoinRequestCute(BaseCute[ChatJoinRequest], ChatJoinRequest, ChatMemberShortcuts, kw_only=True):
12
- api: API
13
-
14
- @property
15
- def from_user(self) -> User:
16
- return self.from_
17
-
18
- @property
19
- def user_id(self) -> int:
20
- return self.from_user.id
21
-
22
- @shortcut(
23
- "approve_chat_join_request",
24
- executor=chat_member_interaction,
25
- custom_params={"chat_id", "user_id"},
26
- )
27
- async def approve(
28
- self,
29
- chat_id: int | str | None = None,
30
- user_id: int | None = None,
31
- **other: typing.Any,
32
- ) -> Result[bool, APIError]:
33
- """Shortcut `API.approve_chat_join_request()`, see the [documentation](https://core.telegram.org/bots/api#approvechatjoinrequest)
34
-
35
- Use this method to approve a chat join request. The bot must be an administrator
36
- in the chat for this to work and must have the can_invite_users administrator
37
- right. Returns True on success."""
38
-
39
- ...
40
-
41
- @shortcut(
42
- "decline_chat_join_request",
43
- executor=chat_member_interaction,
44
- custom_params={"chat_id", "user_id"},
45
- )
46
- async def decline(
47
- self,
48
- chat_id: int | str | None = None,
49
- user_id: int | None = None,
50
- **other: typing.Any,
51
- ) -> Result[bool, APIError]:
52
- """Shortcut `API.decline_chat_join_request()`, see the [documentation](https://core.telegram.org/bots/api#declinechatjoinrequest)
53
-
54
- Use this method to decline a chat join request. The bot must be an administrator
55
- in the chat for this to work and must have the can_invite_users administrator
56
- right. Returns True on success."""
57
-
58
- ...
59
-
60
-
61
- __all__ = ("ChatJoinRequestCute",)
1
+ import typing
2
+
3
+ from fntypes.result import Result
4
+
5
+ from telegrinder.api.api import API, APIError
6
+ from telegrinder.bot.cute_types.base import BaseCute, shortcut
7
+ from telegrinder.bot.cute_types.chat_member_updated import ChatMemberShortcuts, chat_member_interaction
8
+ from telegrinder.types.objects import *
9
+
10
+
11
+ class ChatJoinRequestCute(BaseCute[ChatJoinRequest], ChatJoinRequest, ChatMemberShortcuts, kw_only=True):
12
+ api: API
13
+
14
+ @property
15
+ def from_user(self) -> User:
16
+ return self.from_
17
+
18
+ @property
19
+ def user_id(self) -> int:
20
+ return self.from_user.id
21
+
22
+ @shortcut(
23
+ "approve_chat_join_request",
24
+ executor=chat_member_interaction,
25
+ custom_params={"chat_id", "user_id"},
26
+ )
27
+ async def approve(
28
+ self,
29
+ chat_id: int | str | None = None,
30
+ user_id: int | None = None,
31
+ **other: typing.Any,
32
+ ) -> Result[bool, APIError]:
33
+ """Shortcut `API.approve_chat_join_request()`, see the [documentation](https://core.telegram.org/bots/api#approvechatjoinrequest)
34
+
35
+ Use this method to approve a chat join request. The bot must be an administrator
36
+ in the chat for this to work and must have the can_invite_users administrator
37
+ right. Returns True on success."""
38
+
39
+ ...
40
+
41
+ @shortcut(
42
+ "decline_chat_join_request",
43
+ executor=chat_member_interaction,
44
+ custom_params={"chat_id", "user_id"},
45
+ )
46
+ async def decline(
47
+ self,
48
+ chat_id: int | str | None = None,
49
+ user_id: int | None = None,
50
+ **other: typing.Any,
51
+ ) -> Result[bool, APIError]:
52
+ """Shortcut `API.decline_chat_join_request()`, see the [documentation](https://core.telegram.org/bots/api#declinechatjoinrequest)
53
+
54
+ Use this method to decline a chat join request. The bot must be an administrator
55
+ in the chat for this to work and must have the can_invite_users administrator
56
+ right. Returns True on success."""
57
+
58
+ ...
59
+
60
+
61
+ __all__ = ("ChatJoinRequestCute",)
@@ -1,160 +1,160 @@
1
- import typing
2
- from datetime import datetime
3
-
4
- from fntypes.result import Result
5
-
6
- from telegrinder.api import API, APIError
7
- from telegrinder.bot.cute_types.base import BaseCute, compose_method_params, shortcut
8
- from telegrinder.model import get_params
9
- from telegrinder.types.objects import *
10
-
11
-
12
- async def chat_member_interaction(
13
- update: BaseCute[typing.Any],
14
- method_name: str,
15
- params: dict[str, typing.Any],
16
- ) -> Result[typing.Any, APIError]:
17
- if isinstance(params.get("permissions"), dict):
18
- params["permissions"] = ChatPermissions(**params["permissions"])
19
- params = compose_method_params(
20
- get_params(locals()),
21
- update,
22
- default_params={"chat_id", "user_id"},
23
- )
24
- return await getattr(update.ctx_api, method_name)(**params)
25
-
26
-
27
- class ChatMemberShortcuts:
28
- """Shortcut methods for `ChatMemberUpdatedCute`, `ChatJoinRequestCute` objects."""
29
-
30
- @shortcut("ban_chat_member", executor=chat_member_interaction, custom_params={"chat_id", "user_id"})
31
- async def ban_chat_member(
32
- self,
33
- chat_id: int | str | None = None,
34
- user_id: int | None = None,
35
- until_date: datetime | int | None = None,
36
- revoke_messages: bool | None = None,
37
- **other: typing.Any,
38
- ) -> Result[bool, APIError]:
39
- """Shortcut `API.ban_chat_member()`, see the [documentation](https://core.telegram.org/bots/api#banchatmember)
40
-
41
- Use this method to ban a user in a group, a supergroup or a channel. In the case
42
- of supergroups and channels, the user will not be able to return to the chat
43
- on their own using invite links, etc., unless unbanned first. The bot must
44
- be an administrator in the chat for this to work and must have the appropriate
45
- administrator rights. Returns True on success."""
46
-
47
- ...
48
-
49
- @shortcut("unban_chat_member", executor=chat_member_interaction, custom_params={"chat_id", "user_id"})
50
- async def unban_chat_member(
51
- self,
52
- chat_id: int | str | None = None,
53
- user_id: int | None = None,
54
- only_if_banned: bool | None = None,
55
- **other: typing.Any,
56
- ) -> Result[bool, APIError]:
57
- """Shortcut `API.unban_chat_member()`, see the [documentation](https://core.telegram.org/bots/api#unbanchatmember)
58
-
59
- Use this method to unban a previously banned user in a supergroup or channel.
60
- The user will not return to the group or channel automatically, but will
61
- be able to join via link, etc. The bot must be an administrator for this to
62
- work. By default, this method guarantees that after the call the user is
63
- not a member of the chat, but will be able to join it. So if the user is a member
64
- of the chat they will also be removed from the chat. If you don't want this,
65
- use the parameter only_if_banned. Returns True on success."""
66
-
67
- ...
68
-
69
- @shortcut(
70
- "restrict_chat_member",
71
- executor=chat_member_interaction,
72
- custom_params={"permissions", "chat_id", "user_id"},
73
- )
74
- async def restrict_chat_member(
75
- self,
76
- permissions: ChatPermissions | dict[str, typing.Any],
77
- chat_id: int | str | None = None,
78
- user_id: int | None = None,
79
- use_independent_chat_permissions: bool | None = None,
80
- until_date: datetime | int | None = None,
81
- **other: typing.Any,
82
- ) -> Result[bool, APIError]:
83
- """Shortcut `API.restrict_chat_member()`, see the [documentation](https://core.telegram.org/bots/api#restrictchatmember)
84
-
85
- Use this method to restrict a user in a supergroup. The bot must be an administrator
86
- in the supergroup for this to work and must have the appropriate administrator
87
- rights. Pass True for all permissions to lift restrictions from a user.
88
- Returns True on success."""
89
-
90
- ...
91
-
92
- @shortcut("promote_chat_member", executor=chat_member_interaction, custom_params={"chat_id", "user_id"})
93
- async def promote_chat_member(
94
- self,
95
- chat_id: int | str | None = None,
96
- user_id: int | None = None,
97
- is_anonymous: bool | None = None,
98
- can_manage_chat: bool | None = None,
99
- can_delete_messages: bool | None = None,
100
- can_manage_video_chats: bool | None = None,
101
- can_restrict_members: bool | None = None,
102
- can_promote_members: bool | None = None,
103
- can_change_info: bool | None = None,
104
- can_invite_users: bool | None = None,
105
- can_post_stories: bool | None = None,
106
- can_edit_stories: bool | None = None,
107
- can_delete_stories: bool | None = None,
108
- can_post_messages: bool | None = None,
109
- can_edit_messages: bool | None = None,
110
- can_pin_messages: bool | None = None,
111
- can_manage_topics: bool | None = None,
112
- **other: typing.Any,
113
- ) -> Result[bool, APIError]:
114
- """Shortcut `API.promote_chat_member()`, see the [documentation](https://core.telegram.org/bots/api#promotechatmember)
115
-
116
- Use this method to promote or demote a user in a supergroup or a channel. The
117
- bot must be an administrator in the chat for this to work and must have the
118
- appropriate administrator rights. Pass False for all boolean parameters
119
- to demote a user. Returns True on success."""
120
-
121
- ...
122
-
123
- @shortcut(
124
- "set_chat_administrator_custom_title",
125
- executor=chat_member_interaction,
126
- custom_params={"chat_id", "user_id"},
127
- )
128
- async def set_chat_administrator_custom_title(
129
- self,
130
- custom_title: str,
131
- chat_id: int | str | None = None,
132
- user_id: int | None = None,
133
- **other: typing.Any,
134
- ) -> Result[bool, APIError]:
135
- """Shortcut `API.set_chat_administrator_custom_title()`, see the [documentation](https://core.telegram.org/bots/api#setchatadministratorcustomtitle)
136
-
137
- Use this method to set a custom title for an administrator in a supergroup
138
- promoted by the bot. Returns True on success."""
139
-
140
- ...
141
-
142
-
143
- class ChatMemberUpdatedCute(
144
- BaseCute[ChatMemberUpdated], ChatMemberUpdated, ChatMemberShortcuts, kw_only=True
145
- ):
146
- api: API
147
-
148
- @property
149
- def from_user(self) -> User:
150
- return self.from_
151
-
152
- @property
153
- def user_id(self) -> int:
154
- return self.from_user.id
155
-
156
-
157
- __all__ = (
158
- "ChatMemberShortcuts",
159
- "ChatMemberUpdatedCute",
160
- )
1
+ import typing
2
+ from datetime import datetime
3
+
4
+ from fntypes.result import Result
5
+
6
+ from telegrinder.api.api import API, APIError
7
+ from telegrinder.bot.cute_types.base import BaseCute, compose_method_params, shortcut
8
+ from telegrinder.model import get_params
9
+ from telegrinder.types.objects import *
10
+
11
+
12
+ async def chat_member_interaction(
13
+ update: BaseCute[typing.Any],
14
+ method_name: str,
15
+ params: dict[str, typing.Any],
16
+ ) -> Result[typing.Any, APIError]:
17
+ if isinstance(params.get("permissions"), dict):
18
+ params["permissions"] = ChatPermissions(**params["permissions"])
19
+ params = compose_method_params(
20
+ get_params(locals()),
21
+ update,
22
+ default_params={"chat_id", "user_id"},
23
+ )
24
+ return await getattr(update.ctx_api, method_name)(**params)
25
+
26
+
27
+ class ChatMemberShortcuts:
28
+ """Shortcut methods for `ChatMemberUpdatedCute`, `ChatJoinRequestCute` objects."""
29
+
30
+ @shortcut("ban_chat_member", executor=chat_member_interaction, custom_params={"chat_id", "user_id"})
31
+ async def ban_chat_member(
32
+ self,
33
+ chat_id: int | str | None = None,
34
+ user_id: int | None = None,
35
+ until_date: datetime | int | None = None,
36
+ revoke_messages: bool | None = None,
37
+ **other: typing.Any,
38
+ ) -> Result[bool, APIError]:
39
+ """Shortcut `API.ban_chat_member()`, see the [documentation](https://core.telegram.org/bots/api#banchatmember)
40
+
41
+ Use this method to ban a user in a group, a supergroup or a channel. In the case
42
+ of supergroups and channels, the user will not be able to return to the chat
43
+ on their own using invite links, etc., unless unbanned first. The bot must
44
+ be an administrator in the chat for this to work and must have the appropriate
45
+ administrator rights. Returns True on success."""
46
+
47
+ ...
48
+
49
+ @shortcut("unban_chat_member", executor=chat_member_interaction, custom_params={"chat_id", "user_id"})
50
+ async def unban_chat_member(
51
+ self,
52
+ chat_id: int | str | None = None,
53
+ user_id: int | None = None,
54
+ only_if_banned: bool | None = None,
55
+ **other: typing.Any,
56
+ ) -> Result[bool, APIError]:
57
+ """Shortcut `API.unban_chat_member()`, see the [documentation](https://core.telegram.org/bots/api#unbanchatmember)
58
+
59
+ Use this method to unban a previously banned user in a supergroup or channel.
60
+ The user will not return to the group or channel automatically, but will
61
+ be able to join via link, etc. The bot must be an administrator for this to
62
+ work. By default, this method guarantees that after the call the user is
63
+ not a member of the chat, but will be able to join it. So if the user is a member
64
+ of the chat they will also be removed from the chat. If you don't want this,
65
+ use the parameter only_if_banned. Returns True on success."""
66
+
67
+ ...
68
+
69
+ @shortcut(
70
+ "restrict_chat_member",
71
+ executor=chat_member_interaction,
72
+ custom_params={"permissions", "chat_id", "user_id"},
73
+ )
74
+ async def restrict_chat_member(
75
+ self,
76
+ permissions: ChatPermissions | dict[str, typing.Any],
77
+ chat_id: int | str | None = None,
78
+ user_id: int | None = None,
79
+ use_independent_chat_permissions: bool | None = None,
80
+ until_date: datetime | int | None = None,
81
+ **other: typing.Any,
82
+ ) -> Result[bool, APIError]:
83
+ """Shortcut `API.restrict_chat_member()`, see the [documentation](https://core.telegram.org/bots/api#restrictchatmember)
84
+
85
+ Use this method to restrict a user in a supergroup. The bot must be an administrator
86
+ in the supergroup for this to work and must have the appropriate administrator
87
+ rights. Pass True for all permissions to lift restrictions from a user.
88
+ Returns True on success."""
89
+
90
+ ...
91
+
92
+ @shortcut("promote_chat_member", executor=chat_member_interaction, custom_params={"chat_id", "user_id"})
93
+ async def promote_chat_member(
94
+ self,
95
+ chat_id: int | str | None = None,
96
+ user_id: int | None = None,
97
+ is_anonymous: bool | None = None,
98
+ can_manage_chat: bool | None = None,
99
+ can_delete_messages: bool | None = None,
100
+ can_manage_video_chats: bool | None = None,
101
+ can_restrict_members: bool | None = None,
102
+ can_promote_members: bool | None = None,
103
+ can_change_info: bool | None = None,
104
+ can_invite_users: bool | None = None,
105
+ can_post_stories: bool | None = None,
106
+ can_edit_stories: bool | None = None,
107
+ can_delete_stories: bool | None = None,
108
+ can_post_messages: bool | None = None,
109
+ can_edit_messages: bool | None = None,
110
+ can_pin_messages: bool | None = None,
111
+ can_manage_topics: bool | None = None,
112
+ **other: typing.Any,
113
+ ) -> Result[bool, APIError]:
114
+ """Shortcut `API.promote_chat_member()`, see the [documentation](https://core.telegram.org/bots/api#promotechatmember)
115
+
116
+ Use this method to promote or demote a user in a supergroup or a channel. The
117
+ bot must be an administrator in the chat for this to work and must have the
118
+ appropriate administrator rights. Pass False for all boolean parameters
119
+ to demote a user. Returns True on success."""
120
+
121
+ ...
122
+
123
+ @shortcut(
124
+ "set_chat_administrator_custom_title",
125
+ executor=chat_member_interaction,
126
+ custom_params={"chat_id", "user_id"},
127
+ )
128
+ async def set_chat_administrator_custom_title(
129
+ self,
130
+ custom_title: str,
131
+ chat_id: int | str | None = None,
132
+ user_id: int | None = None,
133
+ **other: typing.Any,
134
+ ) -> Result[bool, APIError]:
135
+ """Shortcut `API.set_chat_administrator_custom_title()`, see the [documentation](https://core.telegram.org/bots/api#setchatadministratorcustomtitle)
136
+
137
+ Use this method to set a custom title for an administrator in a supergroup
138
+ promoted by the bot. Returns True on success."""
139
+
140
+ ...
141
+
142
+
143
+ class ChatMemberUpdatedCute(
144
+ BaseCute[ChatMemberUpdated], ChatMemberUpdated, ChatMemberShortcuts, kw_only=True
145
+ ):
146
+ api: API
147
+
148
+ @property
149
+ def from_user(self) -> User:
150
+ return self.from_
151
+
152
+ @property
153
+ def user_id(self) -> int:
154
+ return self.from_user.id
155
+
156
+
157
+ __all__ = (
158
+ "ChatMemberShortcuts",
159
+ "ChatMemberUpdatedCute",
160
+ )
@@ -1,53 +1,53 @@
1
- import typing
2
-
3
- from fntypes.result import Result
4
-
5
- from telegrinder.api import API, APIError
6
- from telegrinder.bot.cute_types.base import BaseCute, compose_method_params, shortcut
7
- from telegrinder.model import get_params
8
- from telegrinder.types.objects import *
9
-
10
-
11
- class InlineQueryCute(BaseCute[InlineQuery], InlineQuery, kw_only=True):
12
- api: API
13
-
14
- @property
15
- def from_user(self) -> User:
16
- return self.from_
17
-
18
- @shortcut("answer_inline_query", custom_params={"results"})
19
- async def answer(
20
- self,
21
- results: InlineQueryResult | list[InlineQueryResult],
22
- inline_query_id: str,
23
- cache_time: int | None = None,
24
- is_personal: bool | None = None,
25
- next_offset: str | None = None,
26
- button: InlineQueryResultsButton | None = None,
27
- **other: typing.Any,
28
- ) -> Result[bool, APIError]:
29
- """Shortcut `API.answer_inline_query()`, see the [documentation](https://core.telegram.org/bots/api#answerinlinequery)
30
-
31
- Use this method to send answers to an inline query. On success, True is returned.
32
- No more than 50 results per query are allowed.
33
- :param inline_query_id: Unique identifier for the answered query.
34
-
35
- :param results: A JSON-serialized array of results for the inline query.
36
-
37
- :param cache_time: The maximum amount of time in seconds that the result of the inline querymay be cached on the server. Defaults to 300.
38
-
39
- :param is_personal: Pass True if results may be cached on the server side only for the user thatsent the query. By default, results may be returned to any user who sendsthe same query.
40
-
41
- :param next_offset: Pass the offset that a client should send in the next query with the same textto receive more results. Pass an empty string if there are no more resultsor if you don't support pagination. Offset length can't exceed 64 bytes.
42
- :param button: A JSON-serialized object describing a button to be shown above inline queryresults."""
43
-
44
- params = compose_method_params(
45
- get_params(locals()),
46
- self,
47
- default_params={("inline_query_id", "id")},
48
- )
49
- params["results"] = [results] if not isinstance(results, list) else results
50
- return await self.ctx_api.answer_inline_query(**params)
51
-
52
-
53
- __all__ = ("InlineQueryCute",)
1
+ import typing
2
+
3
+ from fntypes.result import Result
4
+
5
+ from telegrinder.api.api import API, APIError
6
+ from telegrinder.bot.cute_types.base import BaseCute, compose_method_params, shortcut
7
+ from telegrinder.model import get_params
8
+ from telegrinder.types.objects import *
9
+
10
+
11
+ class InlineQueryCute(BaseCute[InlineQuery], InlineQuery, kw_only=True):
12
+ api: API
13
+
14
+ @property
15
+ def from_user(self) -> User:
16
+ return self.from_
17
+
18
+ @shortcut("answer_inline_query", custom_params={"results"})
19
+ async def answer(
20
+ self,
21
+ results: InlineQueryResult | list[InlineQueryResult],
22
+ inline_query_id: str,
23
+ cache_time: int | None = None,
24
+ is_personal: bool | None = None,
25
+ next_offset: str | None = None,
26
+ button: InlineQueryResultsButton | None = None,
27
+ **other: typing.Any,
28
+ ) -> Result[bool, APIError]:
29
+ """Shortcut `API.answer_inline_query()`, see the [documentation](https://core.telegram.org/bots/api#answerinlinequery)
30
+
31
+ Use this method to send answers to an inline query. On success, True is returned.
32
+ No more than 50 results per query are allowed.
33
+ :param inline_query_id: Unique identifier for the answered query.
34
+
35
+ :param results: A JSON-serialized array of results for the inline query.
36
+
37
+ :param cache_time: The maximum amount of time in seconds that the result of the inline querymay be cached on the server. Defaults to 300.
38
+
39
+ :param is_personal: Pass True if results may be cached on the server side only for the user thatsent the query. By default, results may be returned to any user who sendsthe same query.
40
+
41
+ :param next_offset: Pass the offset that a client should send in the next query with the same textto receive more results. Pass an empty string if there are no more resultsor if you don't support pagination. Offset length can't exceed 64 bytes.
42
+ :param button: A JSON-serialized object describing a button to be shown above inline queryresults."""
43
+
44
+ params = compose_method_params(
45
+ get_params(locals()),
46
+ self,
47
+ default_params={("inline_query_id", "id")},
48
+ )
49
+ params["results"] = [results] if not isinstance(results, list) else results
50
+ return await self.ctx_api.answer_inline_query(**params)
51
+
52
+
53
+ __all__ = ("InlineQueryCute",)