telegrinder 0.1.dev159__tar.gz → 0.1.dev161__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.dev159 → telegrinder-0.1.dev161}/LICENSE +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/PKG-INFO +9 -8
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/pyproject.toml +18 -11
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/readme.md +1 -1
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/__init__.py +4 -2
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/api/__init__.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/api/abc.py +5 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/api/api.py +4 -4
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/api/error.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/api/response.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/__init__.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/bot.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/cute_types/__init__.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/cute_types/base.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/cute_types/callback_query.py +81 -85
- telegrinder-0.1.dev161/telegrinder/bot/cute_types/inline_query.py +68 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/cute_types/message.py +524 -568
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/cute_types/update.py +0 -0
- telegrinder-0.1.dev161/telegrinder/bot/cute_types/utils.py +542 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/__init__.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/abc.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/composition.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/context.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/dispatch.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/handler/__init__.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/handler/abc.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/handler/func.py +1 -1
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/handler/message_reply.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/middleware/__init__.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/middleware/abc.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/process.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/return_manager/__init__.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/return_manager/abc.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/return_manager/callback_query.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/return_manager/inline_query.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/return_manager/message.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/view/__init__.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/view/abc.py +20 -16
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/view/box.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/view/callback_query.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/view/inline_query.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/view/message.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/waiter_machine/__init__.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/waiter_machine/machine.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/waiter_machine/middleware.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/waiter_machine/short_state.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/polling/__init__.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/polling/abc.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/polling/polling.py +7 -11
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/rules/__init__.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/rules/abc.py +1 -1
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/rules/adapter/__init__.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/rules/adapter/abc.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/rules/adapter/errors.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/rules/adapter/event.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/rules/adapter/raw_update.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/rules/callback_data.py +3 -11
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/rules/command.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/rules/enum_text.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/rules/func.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/rules/fuzzy.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/rules/inline.py +2 -1
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/rules/integer.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/rules/is_from.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/rules/markup.py +3 -1
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/rules/mention.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/rules/message_entities.py +3 -1
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/rules/regex.py +1 -1
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/rules/rule_enum.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/rules/start.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/rules/text.py +0 -0
- telegrinder-0.1.dev161/telegrinder/bot/scenario/__init__.py +5 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/scenario/abc.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/scenario/checkbox.py +9 -13
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/scenario/choice.py +2 -2
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/client/__init__.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/client/abc.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/client/aiohttp.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/model.py +35 -36
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/modules.py +21 -11
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/msgspec_json.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/msgspec_utils.py +2 -2
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/node/__init__.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/node/attachment.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/node/base.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/node/composer.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/node/container.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/node/message.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/node/rule.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/node/source.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/node/text.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/node/tools/__init__.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/node/tools/generator.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/node/update.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/rules.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/tools/__init__.py +2 -3
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/tools/buttons.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/tools/error_handler/__init__.py +2 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/tools/error_handler/abc.py +5 -1
- telegrinder-0.1.dev161/telegrinder/tools/error_handler/error.py +10 -0
- telegrinder-0.1.dev161/telegrinder/tools/error_handler/error_handler.py +175 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/tools/formatting/__init__.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/tools/formatting/html.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/tools/formatting/links.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/tools/formatting/spec_html_formats.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/tools/global_context/__init__.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/tools/global_context/abc.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/tools/global_context/global_context.py +65 -67
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/tools/global_context/telegrinder_ctx.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/tools/i18n/__init__.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/tools/i18n/base.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/tools/i18n/middleware/__init__.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/tools/i18n/middleware/base.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/tools/i18n/simple.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/tools/kb_set/__init__.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/tools/kb_set/base.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/tools/kb_set/yaml.py +3 -3
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/tools/keyboard.py +17 -26
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/tools/loop_wrapper/__init__.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/tools/loop_wrapper/abc.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/tools/loop_wrapper/loop_wrapper.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/tools/magic.py +1 -1
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/tools/parse_mode.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/types/__init__.py +0 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/types/enums.py +2 -0
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/types/methods.py +477 -526
- {telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/types/objects.py +209 -97
- telegrinder-0.1.dev159/telegrinder/bot/cute_types/inline_query.py +0 -41
- telegrinder-0.1.dev159/telegrinder/bot/cute_types/utils.py +0 -794
- telegrinder-0.1.dev159/telegrinder/bot/scenario/__init__.py +0 -5
- telegrinder-0.1.dev159/telegrinder/tools/error_handler/error_handler.py +0 -156
|
File without changes
|
|
@@ -1,33 +1,34 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: telegrinder
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.dev161
|
|
4
4
|
Summary: Framework for effective and reliable async telegram bot building.
|
|
5
5
|
Home-page: https://github.com/timoniq/telegrinder
|
|
6
6
|
License: MIT
|
|
7
|
-
Keywords: telegram,telegram bot api framework,telegrinder,
|
|
7
|
+
Keywords: asyncio,api schema,async,bot building,bot api,custom rules,telegram,telegram bot api framework,telegrinder,middleware,composition
|
|
8
8
|
Author: timoniq
|
|
9
9
|
Author-email: tesseradecades@mail.ru
|
|
10
10
|
Maintainer: luwqz1
|
|
11
|
+
Maintainer-email: howluwqz1@gmail.com
|
|
11
12
|
Requires-Python: >=3.11,<4.0
|
|
12
13
|
Classifier: Environment :: Console
|
|
13
14
|
Classifier: Intended Audience :: Developers
|
|
14
15
|
Classifier: License :: OSI Approved :: MIT License
|
|
15
16
|
Classifier: Programming Language :: Python :: 3
|
|
16
17
|
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
19
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
19
20
|
Classifier: Topic :: Software Development :: Quality Assurance
|
|
20
21
|
Classifier: Typing :: Typed
|
|
21
22
|
Requires-Dist: PyYAML (>=6.0,<7.0)
|
|
22
23
|
Requires-Dist: aiohttp (>=3.8.1,<4.0.0)
|
|
23
|
-
Requires-Dist: certifi (>=
|
|
24
|
+
Requires-Dist: certifi (>=2024.2.2,<2025.0.0)
|
|
24
25
|
Requires-Dist: choicelib (>=0.1.5,<0.2.0)
|
|
25
26
|
Requires-Dist: colorama (>=0.4.0,<0.5.0)
|
|
26
27
|
Requires-Dist: envparse (>=0.2.0,<0.3.0)
|
|
27
|
-
Requires-Dist: fntypes (>=0.1.
|
|
28
|
-
Requires-Dist: msgspec (>=0.18.
|
|
28
|
+
Requires-Dist: fntypes (>=0.1.2.post1,<0.2.0)
|
|
29
|
+
Requires-Dist: msgspec (>=0.18.6,<0.19.0)
|
|
29
30
|
Requires-Dist: requests (>=2.28.1,<3.0.0)
|
|
30
|
-
Requires-Dist: typing-extensions (>=4.
|
|
31
|
+
Requires-Dist: typing-extensions (>=4.10.0,<5.0.0)
|
|
31
32
|
Requires-Dist: vbml (>=1.1.post1,<2.0)
|
|
32
33
|
Project-URL: Repository, https://github.com/timoniq/telegrinder
|
|
33
34
|
Description-Content-Type: text/markdown
|
|
@@ -75,9 +76,9 @@ from telegrinder import API, Message, Telegrinder, Token
|
|
|
75
76
|
from telegrinder.modules import logger
|
|
76
77
|
from telegrinder.rules import Text
|
|
77
78
|
|
|
78
|
-
logger.set_level("INFO")
|
|
79
79
|
api = API(token=Token("123:token"))
|
|
80
80
|
bot = Telegrinder(api)
|
|
81
|
+
logger.set_level("INFO")
|
|
81
82
|
|
|
82
83
|
|
|
83
84
|
@bot.on.message(Text("/start"))
|
|
@@ -1,22 +1,25 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "telegrinder"
|
|
3
|
-
version = "0.1.
|
|
3
|
+
version = "0.1.dev161"
|
|
4
4
|
description = "Framework for effective and reliable async telegram bot building."
|
|
5
5
|
authors = ["timoniq <tesseradecades@mail.ru>"]
|
|
6
|
-
maintainers = ["luwqz1"]
|
|
6
|
+
maintainers = ["luwqz1 <howluwqz1@gmail.com>"]
|
|
7
7
|
license = "MIT"
|
|
8
8
|
readme = "readme.md"
|
|
9
9
|
homepage = "https://github.com/timoniq/telegrinder"
|
|
10
10
|
repository = "https://github.com/timoniq/telegrinder"
|
|
11
11
|
keywords = [
|
|
12
|
+
"asyncio",
|
|
13
|
+
"api schema",
|
|
14
|
+
"async",
|
|
15
|
+
"bot building",
|
|
16
|
+
"bot api",
|
|
17
|
+
"custom rules",
|
|
12
18
|
"telegram",
|
|
13
19
|
"telegram bot api framework",
|
|
14
20
|
"telegrinder",
|
|
15
|
-
"asyncio",
|
|
16
21
|
"middleware",
|
|
17
22
|
"composition",
|
|
18
|
-
"bot api",
|
|
19
|
-
"async",
|
|
20
23
|
]
|
|
21
24
|
classifiers = [
|
|
22
25
|
"Environment :: Console",
|
|
@@ -36,11 +39,11 @@ vbml = "^1.1.post1"
|
|
|
36
39
|
choicelib = "^0.1.5"
|
|
37
40
|
envparse = "^0.2.0"
|
|
38
41
|
PyYAML = "^6.0"
|
|
39
|
-
certifi = "^
|
|
40
|
-
msgspec = "^0.18.
|
|
42
|
+
certifi = "^2024.2.2"
|
|
43
|
+
msgspec = "^0.18.6"
|
|
41
44
|
requests = "^2.28.1"
|
|
42
|
-
typing-extensions = "^4.
|
|
43
|
-
fntypes = "^0.1.
|
|
45
|
+
typing-extensions = "^4.10.0"
|
|
46
|
+
fntypes = "^0.1.2.post1"
|
|
44
47
|
|
|
45
48
|
[tool.poetry.group.dev.dependencies]
|
|
46
49
|
pytest = "^8.0.0"
|
|
@@ -59,10 +62,14 @@ line-length = 100
|
|
|
59
62
|
target-version = "py311"
|
|
60
63
|
select = ["I", "N", "ANN", "COM", "YTT", "TCH", "SIM"]
|
|
61
64
|
ignore = [
|
|
62
|
-
|
|
63
|
-
|
|
65
|
+
"ANN001", "ANN002", "ANN003", "ANN101", "ANN102", "ANN201", "ANN202",
|
|
66
|
+
"ANN204", "ANN206", "ANN401", "COM812", "N818", "TCH001", "TCH004"
|
|
64
67
|
]
|
|
65
68
|
|
|
69
|
+
[tool.black]
|
|
70
|
+
line-length = 90
|
|
71
|
+
target-version = ["py311"]
|
|
72
|
+
|
|
66
73
|
[tool.pytest.ini_options]
|
|
67
74
|
asyncio_mode = "auto"
|
|
68
75
|
|
|
@@ -41,9 +41,9 @@ from telegrinder import API, Message, Telegrinder, Token
|
|
|
41
41
|
from telegrinder.modules import logger
|
|
42
42
|
from telegrinder.rules import Text
|
|
43
43
|
|
|
44
|
-
logger.set_level("INFO")
|
|
45
44
|
api = API(token=Token("123:token"))
|
|
46
45
|
bot = Telegrinder(api)
|
|
46
|
+
logger.set_level("INFO")
|
|
47
47
|
|
|
48
48
|
|
|
49
49
|
@bot.on.message(Text("/start"))
|
|
@@ -39,6 +39,7 @@ from .client import ABCClient, AiohttpClient
|
|
|
39
39
|
from .model import Model
|
|
40
40
|
from .modules import logger
|
|
41
41
|
from .tools import (
|
|
42
|
+
ABCErrorHandler,
|
|
42
43
|
ABCGlobalContext,
|
|
43
44
|
ABCLoopWrapper,
|
|
44
45
|
ABCTranslator,
|
|
@@ -47,6 +48,7 @@ from .tools import (
|
|
|
47
48
|
Button,
|
|
48
49
|
CtxVar,
|
|
49
50
|
DelayedTask,
|
|
51
|
+
ErrorHandler,
|
|
50
52
|
FormatString,
|
|
51
53
|
GlobalContext,
|
|
52
54
|
HTMLFormatter,
|
|
@@ -62,7 +64,6 @@ from .tools import (
|
|
|
62
64
|
SimpleI18n,
|
|
63
65
|
SimpleTranslator,
|
|
64
66
|
ctx_var,
|
|
65
|
-
keyboard_remove,
|
|
66
67
|
magic_bundle,
|
|
67
68
|
)
|
|
68
69
|
|
|
@@ -76,6 +77,7 @@ __all__ = (
|
|
|
76
77
|
"ABCAPI",
|
|
77
78
|
"ABCClient",
|
|
78
79
|
"ABCDispatch",
|
|
80
|
+
"ABCErrorHandler",
|
|
79
81
|
"ABCGlobalContext",
|
|
80
82
|
"ABCHandler",
|
|
81
83
|
"ABCLoopWrapper",
|
|
@@ -107,6 +109,7 @@ __all__ = (
|
|
|
107
109
|
"CtxVar",
|
|
108
110
|
"DelayedTask",
|
|
109
111
|
"Dispatch",
|
|
112
|
+
"ErrorHandler",
|
|
110
113
|
"FormatString",
|
|
111
114
|
"FuncHandler",
|
|
112
115
|
"GlobalContext",
|
|
@@ -139,7 +142,6 @@ __all__ = (
|
|
|
139
142
|
"ViewBox",
|
|
140
143
|
"WaiterMachine",
|
|
141
144
|
"ctx_var",
|
|
142
|
-
"keyboard_remove",
|
|
143
145
|
"logger",
|
|
144
146
|
"magic_bundle",
|
|
145
147
|
"register_manager",
|
|
File without changes
|
|
@@ -17,6 +17,9 @@ 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
|
+
|
|
21
|
+
def __repr__(self) -> str:
|
|
22
|
+
return f"<Token: {self.bot_id}:{''.join(self.split(':')[-1])[:6]}...>"
|
|
20
23
|
|
|
21
24
|
@classmethod
|
|
22
25
|
def from_env(
|
|
@@ -43,6 +46,7 @@ class ABCAPI(ABC):
|
|
|
43
46
|
self,
|
|
44
47
|
method: str,
|
|
45
48
|
data: dict[str, typing.Any] | None = None,
|
|
49
|
+
files: dict[str, tuple[str, bytes]] | None = None,
|
|
46
50
|
) -> Result[list[typing.Any] | dict[str, typing.Any] | bool, APIError]:
|
|
47
51
|
pass
|
|
48
52
|
|
|
@@ -51,6 +55,7 @@ class ABCAPI(ABC):
|
|
|
51
55
|
self,
|
|
52
56
|
method: str,
|
|
53
57
|
data: dict[str, typing.Any] | None = None,
|
|
58
|
+
files: dict[str, tuple[str, bytes]] | None = None,
|
|
54
59
|
) -> Result[msgspec.Raw, APIError]:
|
|
55
60
|
pass
|
|
56
61
|
|
|
@@ -18,13 +18,13 @@ def compose_data(
|
|
|
18
18
|
) -> typing.Any:
|
|
19
19
|
converter = DataConverter(files=files)
|
|
20
20
|
return client.get_form(
|
|
21
|
-
data={k: converter
|
|
21
|
+
data={k: converter(v) for k, v in data.items()},
|
|
22
22
|
files=converter.files,
|
|
23
23
|
)
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
class API(ABCAPI, APIMethods):
|
|
27
|
-
API_URL
|
|
27
|
+
API_URL = "https://api.telegram.org/"
|
|
28
28
|
|
|
29
29
|
def __init__(self, token: Token, *, http: ABCClient | None = None) -> None:
|
|
30
30
|
self.token = token
|
|
@@ -32,9 +32,9 @@ class API(ABCAPI, APIMethods):
|
|
|
32
32
|
super().__init__(self)
|
|
33
33
|
|
|
34
34
|
def __repr__(self) -> str:
|
|
35
|
-
return "<{}:
|
|
35
|
+
return "<{}: token={!r}, http={!r}>".format(
|
|
36
36
|
self.__class__.__name__,
|
|
37
|
-
self.
|
|
37
|
+
self.token,
|
|
38
38
|
self.http,
|
|
39
39
|
)
|
|
40
40
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{telegrinder-0.1.dev159 → telegrinder-0.1.dev161}/telegrinder/bot/cute_types/callback_query.py
RENAMED
|
@@ -2,11 +2,11 @@ import typing
|
|
|
2
2
|
from contextlib import suppress
|
|
3
3
|
|
|
4
4
|
import msgspec
|
|
5
|
-
from fntypes.co import Result, Some, Variative
|
|
5
|
+
from fntypes.co import Nothing, Result, Some, Variative, unwrapping
|
|
6
6
|
|
|
7
7
|
from telegrinder.api import ABCAPI, APIError
|
|
8
8
|
from telegrinder.model import get_params
|
|
9
|
-
from telegrinder.msgspec_utils import
|
|
9
|
+
from telegrinder.msgspec_utils import Option, decoder
|
|
10
10
|
from telegrinder.types import (
|
|
11
11
|
CallbackQuery,
|
|
12
12
|
InlineKeyboardMarkup,
|
|
@@ -23,22 +23,20 @@ from .base import BaseCute, compose_method_params, shortcut
|
|
|
23
23
|
from .message import MediaType, MessageCute, ReplyMarkup, execute_method_edit
|
|
24
24
|
|
|
25
25
|
|
|
26
|
-
class CallbackQueryCute(
|
|
27
|
-
BaseCute[CallbackQuery], CallbackQuery, kw_only=True, dict=True
|
|
28
|
-
):
|
|
26
|
+
class CallbackQueryCute(BaseCute[CallbackQuery], CallbackQuery, kw_only=True, dict=True):
|
|
29
27
|
api: ABCAPI
|
|
30
28
|
|
|
31
29
|
@property
|
|
32
30
|
def from_user(self) -> User:
|
|
33
31
|
return self.from_
|
|
34
|
-
|
|
32
|
+
|
|
35
33
|
@property
|
|
36
34
|
def chat_id(self) -> Option[int]:
|
|
37
35
|
"""Optional. Message from chat ID. This will be present if the message is sent
|
|
38
36
|
by the bot with the callback button that originated the query."""
|
|
39
37
|
|
|
40
38
|
return self.message.map(lambda m: m.v.chat.id)
|
|
41
|
-
|
|
39
|
+
|
|
42
40
|
@property
|
|
43
41
|
def is_topic_message(self) -> Option[bool]:
|
|
44
42
|
"""Optional. True, if the message is a topic message with a name,
|
|
@@ -46,22 +44,24 @@ class CallbackQueryCute(
|
|
|
46
44
|
by the bot with the callback button that originated the query."""
|
|
47
45
|
|
|
48
46
|
return self.message.map(
|
|
49
|
-
lambda m: m.only()
|
|
50
|
-
|
|
51
|
-
|
|
47
|
+
lambda m: m.only()
|
|
48
|
+
.map(lambda m: m.is_topic_message.unwrap_or(False))
|
|
49
|
+
.unwrap_or(False)
|
|
52
50
|
)
|
|
53
|
-
|
|
51
|
+
|
|
54
52
|
@property
|
|
53
|
+
@unwrapping
|
|
55
54
|
def message_thread_id(self) -> Option[int]:
|
|
56
55
|
"""Optional. Unique identifier of the target message thread (for forum supergroups only).
|
|
57
56
|
This will be present if the message is sent
|
|
58
57
|
by the bot with the callback button that originated the query."""
|
|
59
58
|
|
|
60
|
-
return
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
59
|
+
return (
|
|
60
|
+
self.message.unwrap()
|
|
61
|
+
.only()
|
|
62
|
+
.map(lambda m: m.message_thread_id.unwrap())
|
|
63
|
+
.cast(Some, Nothing)
|
|
64
|
+
)
|
|
65
65
|
|
|
66
66
|
@property
|
|
67
67
|
def message_id(self) -> Option[int]:
|
|
@@ -71,23 +71,23 @@ class CallbackQueryCute(
|
|
|
71
71
|
|
|
72
72
|
return self.message.map(lambda m: m.v.message_id)
|
|
73
73
|
|
|
74
|
-
def decode_callback_data(self
|
|
74
|
+
def decode_callback_data(self) -> Option[dict[str, typing.Any]]:
|
|
75
75
|
if "cached_callback_data" in self.__dict__:
|
|
76
76
|
return self.__dict__["cached_callback_data"]
|
|
77
|
-
data = Nothing
|
|
77
|
+
data = Nothing()
|
|
78
78
|
with suppress(msgspec.ValidationError):
|
|
79
|
-
data = Some(decoder.decode(self.data.unwrap()
|
|
79
|
+
data = Some(decoder.decode(self.data.unwrap()))
|
|
80
80
|
self.__dict__["cached_callback_data"] = data
|
|
81
81
|
return data
|
|
82
82
|
|
|
83
83
|
@shortcut("answer_callback_query")
|
|
84
84
|
async def answer(
|
|
85
85
|
self,
|
|
86
|
-
text: str |
|
|
87
|
-
callback_query_id: str |
|
|
88
|
-
show_alert: bool |
|
|
89
|
-
url: str |
|
|
90
|
-
cache_time: int |
|
|
86
|
+
text: str | None = None,
|
|
87
|
+
callback_query_id: str | None = None,
|
|
88
|
+
show_alert: bool | None = None,
|
|
89
|
+
url: str | None = None,
|
|
90
|
+
cache_time: int | None = None,
|
|
91
91
|
**other: typing.Any,
|
|
92
92
|
) -> Result[bool, APIError]:
|
|
93
93
|
"""Shortcut `API.answer_callback_query()`, see the [documentation](https://core.telegram.org/bots/api#answercallbackquery)
|
|
@@ -118,26 +118,24 @@ class CallbackQueryCute(
|
|
|
118
118
|
get_params(locals()), self, default_params={("callback_query_id", "id")}
|
|
119
119
|
)
|
|
120
120
|
return await self.ctx_api.answer_callback_query(**params)
|
|
121
|
-
|
|
121
|
+
|
|
122
122
|
@shortcut(
|
|
123
123
|
"copy_message",
|
|
124
124
|
custom_params={"reply_parameters", "message_thread_id"},
|
|
125
125
|
)
|
|
126
126
|
async def copy(
|
|
127
127
|
self,
|
|
128
|
-
chat_id: int | str |
|
|
129
|
-
from_chat_id: int | str |
|
|
130
|
-
message_id: int |
|
|
131
|
-
message_thread_id:
|
|
132
|
-
caption:
|
|
133
|
-
parse_mode:
|
|
134
|
-
caption_entities:
|
|
135
|
-
disable_notification:
|
|
136
|
-
protect_content:
|
|
137
|
-
reply_parameters:
|
|
138
|
-
|
|
|
139
|
-
| dict[str, typing.Any] = Nothing,
|
|
140
|
-
reply_markup: Option[ReplyMarkup] | ReplyMarkup = Nothing,
|
|
128
|
+
chat_id: int | str | None = None,
|
|
129
|
+
from_chat_id: int | str | None = None,
|
|
130
|
+
message_id: int | None = None,
|
|
131
|
+
message_thread_id: int | None = None,
|
|
132
|
+
caption: str | None = None,
|
|
133
|
+
parse_mode: str | None = None,
|
|
134
|
+
caption_entities: list[MessageEntity] | None = None,
|
|
135
|
+
disable_notification: bool | None = None,
|
|
136
|
+
protect_content: bool | None = None,
|
|
137
|
+
reply_parameters: ReplyParameters | dict[str, typing.Any] | None = None,
|
|
138
|
+
reply_markup: ReplyMarkup | None = None,
|
|
141
139
|
**other: typing.Any,
|
|
142
140
|
) -> Result[MessageId, APIError]:
|
|
143
141
|
"""Shortcut `API.copy_message()`, see the [documentation](https://core.telegram.org/bots/api#copymessage)
|
|
@@ -185,9 +183,9 @@ class CallbackQueryCute(
|
|
|
185
183
|
@shortcut("delete_message", custom_params={"message_thread_id"})
|
|
186
184
|
async def delete(
|
|
187
185
|
self,
|
|
188
|
-
chat_id: int |
|
|
189
|
-
message_id: int |
|
|
190
|
-
message_thread_id: int |
|
|
186
|
+
chat_id: int | None = None,
|
|
187
|
+
message_id: int | None = None,
|
|
188
|
+
message_thread_id: int | None = None,
|
|
191
189
|
**other: typing.Any,
|
|
192
190
|
) -> Result[bool, APIError]:
|
|
193
191
|
"""Shortcut `API.delete_message()`, see the [documentation](https://core.telegram.org/bots/api#deletemessage)
|
|
@@ -217,21 +215,19 @@ class CallbackQueryCute(
|
|
|
217
215
|
@shortcut(
|
|
218
216
|
"edit_message_text",
|
|
219
217
|
executor=execute_method_edit,
|
|
220
|
-
custom_params={"message_thread_id", "link_preview_options"}
|
|
218
|
+
custom_params={"message_thread_id", "link_preview_options"},
|
|
221
219
|
)
|
|
222
220
|
async def edit_text(
|
|
223
221
|
self,
|
|
224
|
-
text: str |
|
|
225
|
-
inline_message_id: int |
|
|
226
|
-
chat_id:
|
|
227
|
-
message_id:
|
|
228
|
-
message_thread_id: int |
|
|
229
|
-
parse_mode: str |
|
|
230
|
-
entities: list[MessageEntity] |
|
|
231
|
-
link_preview_options:
|
|
232
|
-
|
|
|
233
|
-
| dict[str, typing.Any] = Nothing,
|
|
234
|
-
reply_markup: InlineKeyboardMarkup | Option[InlineKeyboardMarkup] = Nothing,
|
|
222
|
+
text: str | None,
|
|
223
|
+
inline_message_id: int | None = None,
|
|
224
|
+
chat_id: int | str | None = None,
|
|
225
|
+
message_id: int | None = None,
|
|
226
|
+
message_thread_id: int | None = None,
|
|
227
|
+
parse_mode: str | None = None,
|
|
228
|
+
entities: list[MessageEntity] | None = None,
|
|
229
|
+
link_preview_options: LinkPreviewOptions | dict[str, typing.Any] | None = None,
|
|
230
|
+
reply_markup: InlineKeyboardMarkup | None = None,
|
|
235
231
|
**other: typing.Any,
|
|
236
232
|
) -> Result[Variative[MessageCute, bool], APIError]:
|
|
237
233
|
"""Shortcut `API.edit_message_text()`, see the [documentation](https://core.telegram.org/bots/api#editmessagetext)
|
|
@@ -265,7 +261,7 @@ class CallbackQueryCute(
|
|
|
265
261
|
:param reply_markup: A JSON-serialized object for an inline keyboard."""
|
|
266
262
|
|
|
267
263
|
...
|
|
268
|
-
|
|
264
|
+
|
|
269
265
|
@shortcut(
|
|
270
266
|
"edit_message_live_location",
|
|
271
267
|
executor=execute_method_edit,
|
|
@@ -275,14 +271,14 @@ class CallbackQueryCute(
|
|
|
275
271
|
self,
|
|
276
272
|
latitude: float,
|
|
277
273
|
longitude: float,
|
|
278
|
-
inline_message_id:
|
|
279
|
-
message_thread_id: int |
|
|
280
|
-
chat_id:
|
|
281
|
-
message_id:
|
|
282
|
-
horizontal_accuracy:
|
|
283
|
-
heading:
|
|
284
|
-
proximity_alert_radius:
|
|
285
|
-
reply_markup:
|
|
274
|
+
inline_message_id: str | None = None,
|
|
275
|
+
message_thread_id: int | None = None,
|
|
276
|
+
chat_id: int | str | None = None,
|
|
277
|
+
message_id: int | None = None,
|
|
278
|
+
horizontal_accuracy: float | None = None,
|
|
279
|
+
heading: int | None = None,
|
|
280
|
+
proximity_alert_radius: int | None = None,
|
|
281
|
+
reply_markup: InlineKeyboardMarkup | None = None,
|
|
286
282
|
**other: typing.Any,
|
|
287
283
|
) -> Result[Variative[MessageCute, bool], APIError]:
|
|
288
284
|
"""Shortcut `API.edit_message_live_location()`, see the [documentation](https://core.telegram.org/bots/api#editmessagelivelocation)
|
|
@@ -319,7 +315,7 @@ class CallbackQueryCute(
|
|
|
319
315
|
:param reply_markup: A JSON-serialized object for a new inline keyboard."""
|
|
320
316
|
|
|
321
317
|
...
|
|
322
|
-
|
|
318
|
+
|
|
323
319
|
@shortcut(
|
|
324
320
|
"edit_message_caption",
|
|
325
321
|
executor=execute_method_edit,
|
|
@@ -327,14 +323,14 @@ class CallbackQueryCute(
|
|
|
327
323
|
)
|
|
328
324
|
async def edit_caption(
|
|
329
325
|
self,
|
|
330
|
-
caption:
|
|
331
|
-
chat_id:
|
|
332
|
-
message_id:
|
|
333
|
-
message_thread_id: int |
|
|
334
|
-
inline_message_id:
|
|
335
|
-
parse_mode:
|
|
336
|
-
caption_entities:
|
|
337
|
-
reply_markup:
|
|
326
|
+
caption: str,
|
|
327
|
+
chat_id: int | str | None = None,
|
|
328
|
+
message_id: int | None = None,
|
|
329
|
+
message_thread_id: int | None = None,
|
|
330
|
+
inline_message_id: str | None = None,
|
|
331
|
+
parse_mode: str | None = None,
|
|
332
|
+
caption_entities: list[MessageEntity] | None = None,
|
|
333
|
+
reply_markup: InlineKeyboardMarkup | None = None,
|
|
338
334
|
**other: typing.Any,
|
|
339
335
|
) -> Result[Variative[MessageCute, bool], APIError]:
|
|
340
336
|
"""Shortcut `API.edit_message_caption()`, see the [documentation](https://core.telegram.org/bots/api#editmessagecaption)
|
|
@@ -381,15 +377,15 @@ class CallbackQueryCute(
|
|
|
381
377
|
async def edit_media(
|
|
382
378
|
self,
|
|
383
379
|
media: str | InputFile | InputMedia,
|
|
384
|
-
type: MediaType |
|
|
385
|
-
caption:
|
|
386
|
-
parse_mode:
|
|
387
|
-
caption_entities:
|
|
388
|
-
inline_message_id:
|
|
389
|
-
chat_id:
|
|
390
|
-
message_id:
|
|
391
|
-
message_thread_id:
|
|
392
|
-
reply_markup:
|
|
380
|
+
type: MediaType | None = None,
|
|
381
|
+
caption: str | None = None,
|
|
382
|
+
parse_mode: str | None = None,
|
|
383
|
+
caption_entities: list[MessageEntity] | None = None,
|
|
384
|
+
inline_message_id: str | None = None,
|
|
385
|
+
chat_id: int | str | None = None,
|
|
386
|
+
message_id: int | None = None,
|
|
387
|
+
message_thread_id: int | None = None,
|
|
388
|
+
reply_markup: InlineKeyboardMarkup | None = None,
|
|
393
389
|
**other: typing.Any,
|
|
394
390
|
) -> Result[Variative[MessageCute, bool], APIError]:
|
|
395
391
|
"""Shortcut `API.edit_message_media()`, see the [documentation](https://core.telegram.org/bots/api#editmessagemedia)
|
|
@@ -438,11 +434,11 @@ class CallbackQueryCute(
|
|
|
438
434
|
)
|
|
439
435
|
async def edit_reply_markup(
|
|
440
436
|
self,
|
|
441
|
-
inline_message_id:
|
|
442
|
-
message_id:
|
|
443
|
-
message_thread_id:
|
|
444
|
-
chat_id:
|
|
445
|
-
reply_markup:
|
|
437
|
+
inline_message_id: str | None = None,
|
|
438
|
+
message_id: int | None = None,
|
|
439
|
+
message_thread_id: int | None = None,
|
|
440
|
+
chat_id: int | str | None = None,
|
|
441
|
+
reply_markup: InlineKeyboardMarkup | None = None,
|
|
446
442
|
**other: typing.Any,
|
|
447
443
|
) -> Result[Variative[MessageCute, bool], APIError]:
|
|
448
444
|
"""Shortcut `API.edit_message_reply_markup()`, see the [documentation](https://core.telegram.org/bots/api#editmessagereplymarkup)
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import typing
|
|
2
|
+
|
|
3
|
+
from fntypes.result import Result
|
|
4
|
+
|
|
5
|
+
from telegrinder.api import ABCAPI, APIError
|
|
6
|
+
from telegrinder.model import get_params
|
|
7
|
+
from telegrinder.types import (
|
|
8
|
+
InlineQuery,
|
|
9
|
+
InlineQueryResult,
|
|
10
|
+
InlineQueryResultsButton,
|
|
11
|
+
User,
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
from .base import BaseCute, compose_method_params, shortcut
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class InlineQueryCute(BaseCute[InlineQuery], InlineQuery, kw_only=True):
|
|
18
|
+
api: ABCAPI
|
|
19
|
+
|
|
20
|
+
@property
|
|
21
|
+
def from_user(self) -> User:
|
|
22
|
+
return self.from_
|
|
23
|
+
|
|
24
|
+
@shortcut("answer_inline_query", custom_params={"results"})
|
|
25
|
+
async def answer(
|
|
26
|
+
self,
|
|
27
|
+
results: InlineQueryResult | list[InlineQueryResult],
|
|
28
|
+
inline_query_id: str | None = None,
|
|
29
|
+
cache_time: int | None = None,
|
|
30
|
+
is_personal: bool | None = None,
|
|
31
|
+
next_offset: str | None = None,
|
|
32
|
+
button: InlineQueryResultsButton | None = None,
|
|
33
|
+
**other: typing.Any,
|
|
34
|
+
) -> Result[bool, APIError]:
|
|
35
|
+
"""Shortcut `API.answer_inline_query()`, see the [documentation](https://core.telegram.org/bots/api#answerinlinequery)
|
|
36
|
+
|
|
37
|
+
Use this method to send answers to an inline query. On success, True is returned.
|
|
38
|
+
No more than 50 results per query are allowed.
|
|
39
|
+
|
|
40
|
+
:param inline_query_id: Unique identifier for the answered query.
|
|
41
|
+
|
|
42
|
+
:param results: A JSON-serialized array of results for the inline query.
|
|
43
|
+
|
|
44
|
+
:param cache_time: The maximum amount of time in seconds that the result of the inline query \
|
|
45
|
+
may be cached on the server. Defaults to 300.
|
|
46
|
+
|
|
47
|
+
:param is_personal: Pass True if results may be cached on the server side only for the user that \
|
|
48
|
+
sent the query. By default, results may be returned to any user who sends \
|
|
49
|
+
the same query.
|
|
50
|
+
|
|
51
|
+
:param next_offset: Pass the offset that a client should send in the next query with the same text \
|
|
52
|
+
to receive more results. Pass an empty string if there are no more results \
|
|
53
|
+
or if you don't support pagination. Offset length can't exceed 64 bytes. \
|
|
54
|
+
|
|
55
|
+
:param button: A JSON-serialized object describing a button to be shown above inline query \
|
|
56
|
+
results.
|
|
57
|
+
"""
|
|
58
|
+
|
|
59
|
+
params = compose_method_params(
|
|
60
|
+
get_params(locals()),
|
|
61
|
+
self,
|
|
62
|
+
default_params={("inline_query_id", "id")},
|
|
63
|
+
)
|
|
64
|
+
params["results"] = [results] if not isinstance(results, list) else results
|
|
65
|
+
return await self.ctx_api.answer_inline_query(**params)
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
__all__ = ("InlineQueryCute",)
|