telegrinder 0.1.dev160__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.

Files changed (128) hide show
  1. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/PKG-INFO +1 -1
  2. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/pyproject.toml +1 -1
  3. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/api/abc.py +3 -0
  4. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/api/api.py +3 -3
  5. telegrinder-0.1.dev161/telegrinder/bot/scenario/__init__.py +5 -0
  6. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/scenario/checkbox.py +9 -13
  7. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/scenario/choice.py +2 -2
  8. telegrinder-0.1.dev160/telegrinder/bot/scenario/__init__.py +0 -5
  9. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/LICENSE +0 -0
  10. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/readme.md +0 -0
  11. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/__init__.py +0 -0
  12. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/api/__init__.py +0 -0
  13. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/api/error.py +0 -0
  14. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/api/response.py +0 -0
  15. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/__init__.py +0 -0
  16. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/bot.py +0 -0
  17. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/cute_types/__init__.py +0 -0
  18. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/cute_types/base.py +0 -0
  19. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/cute_types/callback_query.py +0 -0
  20. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/cute_types/inline_query.py +0 -0
  21. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/cute_types/message.py +0 -0
  22. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/cute_types/update.py +0 -0
  23. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/cute_types/utils.py +0 -0
  24. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/__init__.py +0 -0
  25. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/abc.py +0 -0
  26. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/composition.py +0 -0
  27. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/context.py +0 -0
  28. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/dispatch.py +0 -0
  29. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/handler/__init__.py +0 -0
  30. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/handler/abc.py +0 -0
  31. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/handler/func.py +0 -0
  32. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/handler/message_reply.py +0 -0
  33. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/middleware/__init__.py +0 -0
  34. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/middleware/abc.py +0 -0
  35. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/process.py +0 -0
  36. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/return_manager/__init__.py +0 -0
  37. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/return_manager/abc.py +0 -0
  38. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/return_manager/callback_query.py +0 -0
  39. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/return_manager/inline_query.py +0 -0
  40. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/return_manager/message.py +0 -0
  41. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/view/__init__.py +0 -0
  42. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/view/abc.py +0 -0
  43. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/view/box.py +0 -0
  44. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/view/callback_query.py +0 -0
  45. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/view/inline_query.py +0 -0
  46. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/view/message.py +0 -0
  47. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/waiter_machine/__init__.py +0 -0
  48. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/waiter_machine/machine.py +0 -0
  49. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/waiter_machine/middleware.py +0 -0
  50. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/dispatch/waiter_machine/short_state.py +0 -0
  51. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/polling/__init__.py +0 -0
  52. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/polling/abc.py +0 -0
  53. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/polling/polling.py +0 -0
  54. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/rules/__init__.py +0 -0
  55. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/rules/abc.py +0 -0
  56. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/rules/adapter/__init__.py +0 -0
  57. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/rules/adapter/abc.py +0 -0
  58. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/rules/adapter/errors.py +0 -0
  59. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/rules/adapter/event.py +0 -0
  60. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/rules/adapter/raw_update.py +0 -0
  61. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/rules/callback_data.py +0 -0
  62. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/rules/command.py +0 -0
  63. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/rules/enum_text.py +0 -0
  64. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/rules/func.py +0 -0
  65. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/rules/fuzzy.py +0 -0
  66. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/rules/inline.py +0 -0
  67. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/rules/integer.py +0 -0
  68. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/rules/is_from.py +0 -0
  69. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/rules/markup.py +0 -0
  70. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/rules/mention.py +0 -0
  71. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/rules/message_entities.py +0 -0
  72. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/rules/regex.py +0 -0
  73. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/rules/rule_enum.py +0 -0
  74. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/rules/start.py +0 -0
  75. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/rules/text.py +0 -0
  76. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/bot/scenario/abc.py +0 -0
  77. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/client/__init__.py +0 -0
  78. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/client/abc.py +0 -0
  79. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/client/aiohttp.py +0 -0
  80. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/model.py +0 -0
  81. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/modules.py +0 -0
  82. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/msgspec_json.py +0 -0
  83. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/msgspec_utils.py +0 -0
  84. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/node/__init__.py +0 -0
  85. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/node/attachment.py +0 -0
  86. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/node/base.py +0 -0
  87. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/node/composer.py +0 -0
  88. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/node/container.py +0 -0
  89. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/node/message.py +0 -0
  90. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/node/rule.py +0 -0
  91. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/node/source.py +0 -0
  92. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/node/text.py +0 -0
  93. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/node/tools/__init__.py +0 -0
  94. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/node/tools/generator.py +0 -0
  95. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/node/update.py +0 -0
  96. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/rules.py +0 -0
  97. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/tools/__init__.py +0 -0
  98. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/tools/buttons.py +0 -0
  99. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/tools/error_handler/__init__.py +0 -0
  100. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/tools/error_handler/abc.py +0 -0
  101. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/tools/error_handler/error.py +0 -0
  102. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/tools/error_handler/error_handler.py +0 -0
  103. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/tools/formatting/__init__.py +0 -0
  104. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/tools/formatting/html.py +0 -0
  105. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/tools/formatting/links.py +0 -0
  106. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/tools/formatting/spec_html_formats.py +0 -0
  107. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/tools/global_context/__init__.py +0 -0
  108. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/tools/global_context/abc.py +0 -0
  109. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/tools/global_context/global_context.py +0 -0
  110. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/tools/global_context/telegrinder_ctx.py +0 -0
  111. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/tools/i18n/__init__.py +0 -0
  112. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/tools/i18n/base.py +0 -0
  113. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/tools/i18n/middleware/__init__.py +0 -0
  114. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/tools/i18n/middleware/base.py +0 -0
  115. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/tools/i18n/simple.py +0 -0
  116. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/tools/kb_set/__init__.py +0 -0
  117. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/tools/kb_set/base.py +0 -0
  118. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/tools/kb_set/yaml.py +0 -0
  119. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/tools/keyboard.py +0 -0
  120. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/tools/loop_wrapper/__init__.py +0 -0
  121. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/tools/loop_wrapper/abc.py +0 -0
  122. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/tools/loop_wrapper/loop_wrapper.py +0 -0
  123. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/tools/magic.py +0 -0
  124. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/tools/parse_mode.py +0 -0
  125. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/types/__init__.py +0 -0
  126. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/types/enums.py +0 -0
  127. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/types/methods.py +0 -0
  128. {telegrinder-0.1.dev160 → telegrinder-0.1.dev161}/telegrinder/types/objects.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: telegrinder
3
- Version: 0.1.dev160
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
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "telegrinder"
3
- version = "0.1.dev160"
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
6
  maintainers = ["luwqz1 <howluwqz1@gmail.com>"]
@@ -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(
@@ -24,7 +24,7 @@ def compose_data(
24
24
 
25
25
 
26
26
  class API(ABCAPI, APIMethods):
27
- API_URL: typing.ClassVar[str] = "https://api.telegram.org/"
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 "<{}: id={}, http={!r}>".format(
35
+ return "<{}: token={!r}, http={!r}>".format(
36
36
  self.__class__.__name__,
37
- self.id,
37
+ self.token,
38
38
  self.http,
39
39
  )
40
40
 
@@ -0,0 +1,5 @@
1
+ from .abc import ABCScenario
2
+ from .checkbox import Checkbox, Choice
3
+ from .choice import SingleChoice
4
+
5
+ __all__ = ("ABCScenario", "Checkbox", "Choice", "SingleChoice")
@@ -1,6 +1,5 @@
1
1
  import dataclasses
2
- import random
3
- import string
2
+ import secrets
4
3
  import typing
5
4
 
6
5
  from telegrinder.bot.cute_types import CallbackQueryCute
@@ -25,29 +24,26 @@ class Choice:
25
24
  code: str
26
25
 
27
26
 
28
- def random_code(length: int) -> str:
29
- return "".join(random.choices(string.ascii_letters + string.digits, k=length))
30
-
31
-
32
27
  class Checkbox(ABCScenario[CallbackQueryCute]):
33
- INVALID_CODE: typing.ClassVar[str] = "Invalid code"
34
- CALLBACK_ANSWER: typing.ClassVar[str] = "Done"
35
- PARSE_MODE: typing.ClassVar[str] = ParseMode.MARKDOWNV2
28
+ INVALID_CODE = "Invalid code"
29
+ CALLBACK_ANSWER = "Done"
30
+ PARSE_MODE = ParseMode.HTML
36
31
 
37
32
  def __init__(
38
33
  self,
39
34
  waiter_machine: WaiterMachine,
40
35
  chat_id: int,
41
36
  msg: str,
37
+ *,
42
38
  ready_text: str = "Ready",
43
39
  max_in_row: int = 3,
44
- ):
40
+ ) -> None:
45
41
  self.chat_id = chat_id
46
42
  self.msg = msg
47
43
  self.choices: list[Choice] = []
48
44
  self.ready = ready_text
49
45
  self.max_in_row = max_in_row
50
- self.random_code = random_code(16)
46
+ self.random_code = secrets.token_hex(16)
51
47
  self.waiter_machine = waiter_machine
52
48
 
53
49
  def get_markup(self) -> InlineKeyboardMarkup:
@@ -77,7 +73,7 @@ class Checkbox(ABCScenario[CallbackQueryCute]):
77
73
  is_picked: bool = False,
78
74
  ) -> typing.Self:
79
75
  self.choices.append(
80
- Choice(name, is_picked, default_text, picked_text, random_code(16)),
76
+ Choice(name, is_picked, default_text, picked_text, secrets.token_hex(16)),
81
77
  )
82
78
  return self
83
79
 
@@ -128,4 +124,4 @@ class Checkbox(ABCScenario[CallbackQueryCute]):
128
124
  )
129
125
 
130
126
 
131
- __all__ = ("Checkbox", "Choice", "random_code")
127
+ __all__ = ("Checkbox", "Choice")
@@ -34,11 +34,11 @@ class SingleChoice(Checkbox):
34
34
  async def wait(
35
35
  self,
36
36
  api: "API",
37
- cb_view: "BaseStateView[CallbackQueryCute]",
37
+ view: "BaseStateView[CallbackQueryCute]",
38
38
  ) -> tuple[str, int]:
39
39
  if len([choice for choice in self.choices if choice.is_picked]) != 1:
40
40
  raise ValueError("Exactly one choice must be picked")
41
- choices, m_id = await super().wait(api, cb_view)
41
+ choices, m_id = await super().wait(api, view)
42
42
  return list(choices.keys())[list(choices.values()).index(True)], m_id
43
43
 
44
44
 
@@ -1,5 +0,0 @@
1
- from .abc import ABCScenario
2
- from .checkbox import Checkbox
3
- from .choice import SingleChoice
4
-
5
- __all__ = ("ABCScenario", "Checkbox", "SingleChoice")