bot-framework 0.1.0__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.
Files changed (136) hide show
  1. bot_framework-0.1.0/.gitignore +53 -0
  2. bot_framework-0.1.0/.import_linter_cache/.gitignore +2 -0
  3. bot_framework-0.1.0/.import_linter_cache/5eed3c5c99ec4febcf0c27e426c754866f8ea6d6.data.json +1 -0
  4. bot_framework-0.1.0/.import_linter_cache/CACHEDIR.TAG +3 -0
  5. bot_framework-0.1.0/.import_linter_cache/bot_framework.meta.json +1 -0
  6. bot_framework-0.1.0/.python-version +1 -0
  7. bot_framework-0.1.0/PKG-INFO +71 -0
  8. bot_framework-0.1.0/README.md +52 -0
  9. bot_framework-0.1.0/bot_framework/__init__.py +57 -0
  10. bot_framework-0.1.0/bot_framework/base_protocols/__init__.py +21 -0
  11. bot_framework-0.1.0/bot_framework/base_protocols/create.py +9 -0
  12. bot_framework-0.1.0/bot_framework/base_protocols/delete.py +9 -0
  13. bot_framework-0.1.0/bot_framework/base_protocols/get_all.py +9 -0
  14. bot_framework-0.1.0/bot_framework/base_protocols/get_by_key.py +9 -0
  15. bot_framework-0.1.0/bot_framework/base_protocols/get_by_name.py +9 -0
  16. bot_framework-0.1.0/bot_framework/base_protocols/read.py +11 -0
  17. bot_framework-0.1.0/bot_framework/base_protocols/read_sequence_by_user_id.py +11 -0
  18. bot_framework-0.1.0/bot_framework/base_protocols/update.py +9 -0
  19. bot_framework-0.1.0/bot_framework/entities/__init__.py +24 -0
  20. bot_framework-0.1.0/bot_framework/entities/bot_callback.py +21 -0
  21. bot_framework-0.1.0/bot_framework/entities/bot_message.py +27 -0
  22. bot_framework-0.1.0/bot_framework/entities/bot_user.py +22 -0
  23. bot_framework-0.1.0/bot_framework/entities/button.py +8 -0
  24. bot_framework-0.1.0/bot_framework/entities/keyboard.py +9 -0
  25. bot_framework-0.1.0/bot_framework/entities/language_code.py +8 -0
  26. bot_framework-0.1.0/bot_framework/entities/parse_mode.py +6 -0
  27. bot_framework-0.1.0/bot_framework/entities/role.py +16 -0
  28. bot_framework-0.1.0/bot_framework/entities/role_name.py +7 -0
  29. bot_framework-0.1.0/bot_framework/entities/user.py +23 -0
  30. bot_framework-0.1.0/bot_framework/flow_management/__init__.py +31 -0
  31. bot_framework-0.1.0/bot_framework/flow_management/entities/__init__.py +5 -0
  32. bot_framework-0.1.0/bot_framework/flow_management/entities/flow_stack_entry.py +10 -0
  33. bot_framework-0.1.0/bot_framework/flow_management/flow_registry.py +14 -0
  34. bot_framework-0.1.0/bot_framework/flow_management/protocols/__init__.py +11 -0
  35. bot_framework-0.1.0/bot_framework/flow_management/protocols/i_flow_message_deleter.py +8 -0
  36. bot_framework-0.1.0/bot_framework/flow_management/protocols/i_flow_message_storage.py +12 -0
  37. bot_framework-0.1.0/bot_framework/flow_management/protocols/i_flow_stack_storage.py +14 -0
  38. bot_framework-0.1.0/bot_framework/flow_management/protocols/i_flow_stack_validator.py +6 -0
  39. bot_framework-0.1.0/bot_framework/flow_management/repos/__init__.py +8 -0
  40. bot_framework-0.1.0/bot_framework/flow_management/repos/redis_flow_message_storage.py +35 -0
  41. bot_framework-0.1.0/bot_framework/flow_management/repos/redis_flow_stack_storage.py +53 -0
  42. bot_framework-0.1.0/bot_framework/flow_management/services/__init__.py +15 -0
  43. bot_framework-0.1.0/bot_framework/flow_management/services/flow_message_deleter.py +33 -0
  44. bot_framework-0.1.0/bot_framework/flow_management/services/flow_stack_navigator.py +104 -0
  45. bot_framework-0.1.0/bot_framework/flow_management/services/flow_stack_validator.py +46 -0
  46. bot_framework-0.1.0/bot_framework/flows/__init__.py +11 -0
  47. bot_framework-0.1.0/bot_framework/flows/request_role_flow/__init__.py +11 -0
  48. bot_framework-0.1.0/bot_framework/flows/request_role_flow/actions/__init__.py +13 -0
  49. bot_framework-0.1.0/bot_framework/flows/request_role_flow/actions/role_assigner.py +30 -0
  50. bot_framework-0.1.0/bot_framework/flows/request_role_flow/actions/role_rejection_notifier.py +24 -0
  51. bot_framework-0.1.0/bot_framework/flows/request_role_flow/actions/role_request_sender.py +74 -0
  52. bot_framework-0.1.0/bot_framework/flows/request_role_flow/entities/__init__.py +7 -0
  53. bot_framework-0.1.0/bot_framework/flows/request_role_flow/entities/request_role_flow_state.py +6 -0
  54. bot_framework-0.1.0/bot_framework/flows/request_role_flow/exceptions.py +6 -0
  55. bot_framework-0.1.0/bot_framework/flows/request_role_flow/factory.py +146 -0
  56. bot_framework-0.1.0/bot_framework/flows/request_role_flow/handlers/__init__.py +23 -0
  57. bot_framework-0.1.0/bot_framework/flows/request_role_flow/handlers/approve_role_handler.py +49 -0
  58. bot_framework-0.1.0/bot_framework/flows/request_role_flow/handlers/reject_role_handler.py +47 -0
  59. bot_framework-0.1.0/bot_framework/flows/request_role_flow/handlers/request_role_command_handler.py +25 -0
  60. bot_framework-0.1.0/bot_framework/flows/request_role_flow/handlers/role_selection_handler.py +77 -0
  61. bot_framework-0.1.0/bot_framework/flows/request_role_flow/handlers/show_roles_handler.py +31 -0
  62. bot_framework-0.1.0/bot_framework/flows/request_role_flow/presenters/__init__.py +7 -0
  63. bot_framework-0.1.0/bot_framework/flows/request_role_flow/presenters/role_list_presenter.py +53 -0
  64. bot_framework-0.1.0/bot_framework/flows/request_role_flow/protocols/__init__.py +27 -0
  65. bot_framework-0.1.0/bot_framework/flows/request_role_flow/protocols/i_request_role_flow_router.py +7 -0
  66. bot_framework-0.1.0/bot_framework/flows/request_role_flow/protocols/i_request_role_flow_state_storage.py +11 -0
  67. bot_framework-0.1.0/bot_framework/flows/request_role_flow/protocols/i_role_assigner.py +10 -0
  68. bot_framework-0.1.0/bot_framework/flows/request_role_flow/protocols/i_role_list_presenter.py +5 -0
  69. bot_framework-0.1.0/bot_framework/flows/request_role_flow/protocols/i_role_rejection_notifier.py +9 -0
  70. bot_framework-0.1.0/bot_framework/flows/request_role_flow/protocols/i_role_request_sender.py +12 -0
  71. bot_framework-0.1.0/bot_framework/flows/request_role_flow/repos/__init__.py +7 -0
  72. bot_framework-0.1.0/bot_framework/flows/request_role_flow/repos/redis_request_role_flow_state_storage.py +33 -0
  73. bot_framework-0.1.0/bot_framework/flows/request_role_flow/request_role_flow_router.py +18 -0
  74. bot_framework-0.1.0/bot_framework/language_management/__init__.py +13 -0
  75. bot_framework-0.1.0/bot_framework/language_management/entities/__init__.py +10 -0
  76. bot_framework-0.1.0/bot_framework/language_management/entities/language.py +15 -0
  77. bot_framework-0.1.0/bot_framework/language_management/entities/phrase.py +16 -0
  78. bot_framework-0.1.0/bot_framework/language_management/repos/__init__.py +7 -0
  79. bot_framework-0.1.0/bot_framework/language_management/repos/language_repo.py +67 -0
  80. bot_framework-0.1.0/bot_framework/language_management/repos/phrase_repo.py +31 -0
  81. bot_framework-0.1.0/bot_framework/language_management/repos/protocols/__init__.py +7 -0
  82. bot_framework-0.1.0/bot_framework/language_management/repos/protocols/i_language_repo.py +10 -0
  83. bot_framework-0.1.0/bot_framework/language_management/repos/protocols/i_phrase_repo.py +9 -0
  84. bot_framework-0.1.0/bot_framework/protocols/__init__.py +37 -0
  85. bot_framework-0.1.0/bot_framework/protocols/i_callback_answerer.py +10 -0
  86. bot_framework-0.1.0/bot_framework/protocols/i_callback_handler.py +17 -0
  87. bot_framework-0.1.0/bot_framework/protocols/i_callback_handler_registry.py +9 -0
  88. bot_framework-0.1.0/bot_framework/protocols/i_card_field_formatter.py +7 -0
  89. bot_framework-0.1.0/bot_framework/protocols/i_display_width_calculator.py +5 -0
  90. bot_framework-0.1.0/bot_framework/protocols/i_ensure_user_exists.py +7 -0
  91. bot_framework-0.1.0/bot_framework/protocols/i_flow_router.py +19 -0
  92. bot_framework-0.1.0/bot_framework/protocols/i_markdown_to_html_converter.py +5 -0
  93. bot_framework-0.1.0/bot_framework/protocols/i_message_deleter.py +5 -0
  94. bot_framework-0.1.0/bot_framework/protocols/i_message_handler.py +17 -0
  95. bot_framework-0.1.0/bot_framework/protocols/i_message_handler_registry.py +14 -0
  96. bot_framework-0.1.0/bot_framework/protocols/i_message_replacer.py +17 -0
  97. bot_framework-0.1.0/bot_framework/protocols/i_message_sender.py +31 -0
  98. bot_framework-0.1.0/bot_framework/protocols/i_message_service.py +16 -0
  99. bot_framework-0.1.0/bot_framework/protocols/i_next_step_handler_registrar.py +12 -0
  100. bot_framework-0.1.0/bot_framework/protocols/i_notify_replacer.py +17 -0
  101. bot_framework-0.1.0/bot_framework/protocols/i_remaining_time_formatter.py +6 -0
  102. bot_framework-0.1.0/bot_framework/role_management/__init__.py +13 -0
  103. bot_framework-0.1.0/bot_framework/role_management/entities/__init__.py +10 -0
  104. bot_framework-0.1.0/bot_framework/role_management/entities/user_role.py +13 -0
  105. bot_framework-0.1.0/bot_framework/role_management/repos/__init__.py +5 -0
  106. bot_framework-0.1.0/bot_framework/role_management/repos/protocols/__init__.py +7 -0
  107. bot_framework-0.1.0/bot_framework/role_management/repos/protocols/i_role_repo.py +30 -0
  108. bot_framework-0.1.0/bot_framework/role_management/repos/protocols/i_user_repo.py +24 -0
  109. bot_framework-0.1.0/bot_framework/role_management/repos/role_repo.py +103 -0
  110. bot_framework-0.1.0/bot_framework/role_management/services/__init__.py +1 -0
  111. bot_framework-0.1.0/bot_framework/role_management/services/protocols/__init__.py +1 -0
  112. bot_framework-0.1.0/bot_framework/services/__init__.py +9 -0
  113. bot_framework-0.1.0/bot_framework/services/card_field_formatter.py +43 -0
  114. bot_framework-0.1.0/bot_framework/services/display_width_calculator.py +45 -0
  115. bot_framework-0.1.0/bot_framework/services/remaining_time_formatter.py +31 -0
  116. bot_framework-0.1.0/bot_framework/telegram/__init__.py +56 -0
  117. bot_framework-0.1.0/bot_framework/telegram/middleware/__init__.py +4 -0
  118. bot_framework-0.1.0/bot_framework/telegram/middleware/ensure_user_middleware.py +46 -0
  119. bot_framework-0.1.0/bot_framework/telegram/middleware/i_middleware.py +7 -0
  120. bot_framework-0.1.0/bot_framework/telegram/protocols/__init__.py +36 -0
  121. bot_framework-0.1.0/bot_framework/telegram/protocols/i_markdown_escaper.py +5 -0
  122. bot_framework-0.1.0/bot_framework/telegram/services/__init__.py +29 -0
  123. bot_framework-0.1.0/bot_framework/telegram/services/callback_answerer.py +16 -0
  124. bot_framework-0.1.0/bot_framework/telegram/services/callback_handler_registry.py +43 -0
  125. bot_framework-0.1.0/bot_framework/telegram/services/close_callback_handler.py +26 -0
  126. bot_framework-0.1.0/bot_framework/telegram/services/ensure_user_exists.py +37 -0
  127. bot_framework-0.1.0/bot_framework/telegram/services/markdown_escaper.py +8 -0
  128. bot_framework-0.1.0/bot_framework/telegram/services/markdown_to_html_converter.py +16 -0
  129. bot_framework-0.1.0/bot_framework/telegram/services/message_handler_registry.py +49 -0
  130. bot_framework-0.1.0/bot_framework/telegram/services/next_step_handler_registrar.py +43 -0
  131. bot_framework-0.1.0/bot_framework/telegram/services/telegram_message_core.py +62 -0
  132. bot_framework-0.1.0/bot_framework/telegram/services/telegram_message_deleter.py +19 -0
  133. bot_framework-0.1.0/bot_framework/telegram/services/telegram_message_replacer.py +47 -0
  134. bot_framework-0.1.0/bot_framework/telegram/services/telegram_message_sender.py +73 -0
  135. bot_framework-0.1.0/bot_framework/telegram/services/telegram_notify_replacer.py +30 -0
  136. bot_framework-0.1.0/pyproject.toml +99 -0
@@ -0,0 +1,53 @@
1
+ # Environment
2
+ .env
3
+ .env.*
4
+
5
+ # Python
6
+ __pycache__/
7
+ *.py[cod]
8
+ *$py.class
9
+ *.so
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ *.egg-info/
24
+ .installed.cfg
25
+ *.egg
26
+
27
+ # Virtual environments
28
+ .venv/
29
+ venv/
30
+ ENV/
31
+ uv.lock
32
+
33
+ # IDE
34
+ .idea/
35
+ .vscode/
36
+ *.swp
37
+ *.swo
38
+ *~
39
+
40
+ # Testing
41
+ .pytest_cache/
42
+ .coverage
43
+ htmlcov/
44
+ .tox/
45
+ .nox/
46
+
47
+ # Type checking
48
+ .mypy_cache/
49
+ .pyright/
50
+
51
+ # OS
52
+ .DS_Store
53
+ Thumbs.db
@@ -0,0 +1,2 @@
1
+ # Automatically created by Grimp.
2
+ *
@@ -0,0 +1 @@
1
+ {"bot_framework.protocols.i_message_replacer":[["bot_framework.entities.parse_mode",5,"from bot_framework.entities.parse_mode import ParseMode"],["bot_framework.entities.keyboard",4,"from bot_framework.entities.keyboard import Keyboard"],["bot_framework.entities.bot_message",3,"from bot_framework.entities.bot_message import BotMessage"]],"bot_framework.entities.bot_message":[],"bot_framework.role_management.services.protocols":[],"bot_framework.telegram.services.telegram_message_deleter":[["bot_framework.protocols.i_message_deleter",7,"from bot_framework.protocols.i_message_deleter import IMessageDeleter"]],"bot_framework.protocols.i_ensure_user_exists":[["bot_framework.entities.bot_user",3,"from bot_framework.entities.bot_user import BotUser"]],"bot_framework.flows.request_role_flow.presenters.role_list_presenter":[["bot_framework.language_management.repos.protocols.i_phrase_repo",3,"from bot_framework.language_management.repos.protocols.i_phrase_repo import IPhraseRepo"],["bot_framework.entities.button",1,"from bot_framework.entities.button import Button"],["bot_framework.entities.keyboard",2,"from bot_framework.entities.keyboard import Keyboard"],["bot_framework.role_management.repos.protocols.i_role_repo",5,"from bot_framework.role_management.repos.protocols.i_role_repo import IRoleRepo"],["bot_framework.protocols.i_message_sender",4,"from bot_framework.protocols.i_message_sender import IMessageSender"]],"bot_framework.protocols.i_callback_answerer":[],"bot_framework.role_management.repos.protocols":[["bot_framework.role_management.repos.protocols.i_role_repo",1,"from .i_role_repo import IRoleRepo"],["bot_framework.role_management.repos.protocols.i_user_repo",2,"from .i_user_repo import IUserRepo"]],"bot_framework.flows.request_role_flow.factory":[["bot_framework.protocols.i_callback_answerer",22,"from bot_framework.protocols.i_callback_answerer import ICallbackAnswerer"],["bot_framework.protocols.i_callback_handler_registry",23,"from bot_framework.protocols.i_callback_handler_registry import ("],["bot_framework.flows.request_role_flow.presenters",13,"from bot_framework.flows.request_role_flow.presenters import RoleListPresenter"],["bot_framework.flows.request_role_flow.protocols",14,"from bot_framework.flows.request_role_flow.protocols import ("],["bot_framework.role_management.repos.protocols.i_user_repo",29,"from bot_framework.role_management.repos.protocols.i_user_repo import IUserRepo"],["bot_framework.flows.request_role_flow.actions",1,"from bot_framework.flows.request_role_flow.actions import ("],["bot_framework.language_management.repos.protocols.i_phrase_repo",21,"from bot_framework.language_management.repos.protocols.i_phrase_repo import IPhraseRepo"],["bot_framework.protocols.i_message_handler_registry",26,"from bot_framework.protocols.i_message_handler_registry import IMessageHandlerRegistry"],["bot_framework.flows.request_role_flow.handlers",6,"from bot_framework.flows.request_role_flow.handlers import ("],["bot_framework.flows.request_role_flow.request_role_flow_router",18,"from bot_framework.flows.request_role_flow.request_role_flow_router import ("],["bot_framework.protocols.i_message_sender",27,"from bot_framework.protocols.i_message_sender import IMessageSender"],["bot_framework.role_management.repos.protocols.i_role_repo",28,"from bot_framework.role_management.repos.protocols.i_role_repo import IRoleRepo"]],"bot_framework.telegram.services.ensure_user_exists":[["bot_framework.role_management.repos.protocols.i_user_repo",5,"from bot_framework.role_management.repos.protocols.i_user_repo import IUserRepo"],["bot_framework.role_management.repos.protocols.i_role_repo",4,"from bot_framework.role_management.repos.protocols.i_role_repo import IRoleRepo"],["bot_framework.entities",1,"from bot_framework.entities import RoleName, User"],["bot_framework.entities.bot_user",2,"from bot_framework.entities.bot_user import BotUser"],["bot_framework.protocols",3,"from bot_framework.protocols import IEnsureUserExists"]],"bot_framework.protocols.i_message_deleter":[],"bot_framework.telegram.services.next_step_handler_registrar":[["bot_framework.entities.bot_message",4,"from bot_framework.entities.bot_message import BotMessage, BotMessageUser"],["bot_framework.protocols.i_message_handler",5,"from bot_framework.protocols.i_message_handler import IMessageHandler"]],"bot_framework.flows.request_role_flow.exceptions":[],"bot_framework.telegram.services.telegram_notify_replacer":[["bot_framework.entities.bot_message",3,"from bot_framework.entities.bot_message import BotMessage"],["bot_framework.protocols.i_message_sender",7,"from bot_framework.protocols.i_message_sender import IMessageSender"],["bot_framework.entities.keyboard",4,"from bot_framework.entities.keyboard import Keyboard"],["bot_framework.entities.parse_mode",5,"from bot_framework.entities.parse_mode import ParseMode"],["bot_framework.protocols.i_message_deleter",6,"from bot_framework.protocols.i_message_deleter import IMessageDeleter"],["bot_framework.protocols.i_notify_replacer",8,"from bot_framework.protocols.i_notify_replacer import INotifyReplacer"]],"bot_framework.protocols.i_callback_handler_registry":[["bot_framework.protocols.i_callback_handler",5,"from bot_framework.protocols.i_callback_handler import ICallbackHandler"]],"bot_framework.role_management.repos.role_repo":[["bot_framework.role_management.repos.protocols.i_role_repo",5,"from bot_framework.role_management.repos.protocols.i_role_repo import IRoleRepo"],["bot_framework.entities.role",4,"from bot_framework.entities.role import Role"]],"bot_framework.base_protocols.delete":[],"bot_framework.flows.request_role_flow.protocols.i_role_rejection_notifier":[],"bot_framework.telegram.services.close_callback_handler":[["bot_framework.telegram.protocols",3,"from bot_framework.telegram.protocols import ICallbackAnswerer, IMessageDeleter"],["bot_framework.entities.bot_callback",2,"from bot_framework.entities.bot_callback import BotCallback"],["bot_framework.entities",1,"from bot_framework.entities import RoleName"]],"bot_framework.flows.request_role_flow.protocols.i_request_role_flow_router":[["bot_framework.entities.bot_message",3,"from bot_framework.entities.bot_message import BotMessageUser"]],"bot_framework.base_protocols.read_sequence_by_user_id":[],"bot_framework.base_protocols":[["bot_framework.base_protocols.read_sequence_by_user_id",7,"from .read_sequence_by_user_id import ("],["bot_framework.base_protocols.get_by_name",5,"from .get_by_name import GetByNameProtocol"],["bot_framework.base_protocols.get_by_key",4,"from .get_by_key import GetByKeyProtocol"],["bot_framework.base_protocols.read",6,"from .read import ReadProtocol"],["bot_framework.base_protocols.create",1,"from .create import CreateProtocol"],["bot_framework.base_protocols.get_all",3,"from .get_all import GetAllProtocol"],["bot_framework.base_protocols.update",10,"from .update import UpdateProtocol"],["bot_framework.base_protocols.delete",2,"from .delete import DeleteProtocol"]],"bot_framework.services.display_width_calculator":[["bot_framework.protocols",3,"from bot_framework.protocols import IDisplayWidthCalculator"]],"bot_framework.protocols.i_message_service":[["bot_framework.protocols.i_message_sender",5,"from bot_framework.protocols.i_message_sender import IMessageSender"],["bot_framework.protocols.i_message_replacer",4,"from bot_framework.protocols.i_message_replacer import IMessageReplacer"],["bot_framework.protocols.i_notify_replacer",6,"from bot_framework.protocols.i_notify_replacer import INotifyReplacer"],["bot_framework.protocols.i_message_deleter",3,"from bot_framework.protocols.i_message_deleter import IMessageDeleter"]],"bot_framework.entities.language_code":[],"bot_framework.language_management":[["bot_framework.language_management.entities",1,"from bot_framework.language_management.entities import Language, LanguageCode, Phrase"],["bot_framework.language_management.repos",2,"from bot_framework.language_management.repos import LanguageRepo, PhraseRepo"],["bot_framework.language_management.repos.protocols",3,"from bot_framework.language_management.repos.protocols import ILanguageRepo, IPhraseRepo"]],"bot_framework.role_management.entities":[["bot_framework.role_management.entities.user_role",3,"from .user_role import UserRole"],["bot_framework.entities",1,"from bot_framework.entities import Role, RoleName, User"]],"bot_framework.flow_management.flow_registry":[["bot_framework.protocols.i_flow_router",3,"from bot_framework.protocols.i_flow_router import IFlowRouter"]],"bot_framework.entities.keyboard":[["bot_framework.entities.button",3,"from bot_framework.entities.button import Button"]],"bot_framework.flow_management":[["bot_framework.flow_management.services",13,"from bot_framework.flow_management.services import ("],["bot_framework.flow_management.protocols",3,"from bot_framework.flow_management.protocols import ("],["bot_framework.flow_management.entities",1,"from bot_framework.flow_management.entities import FlowStackEntry"],["bot_framework.flow_management.repos",9,"from bot_framework.flow_management.repos import ("],["bot_framework.flow_management.flow_registry",2,"from bot_framework.flow_management.flow_registry import FlowRegistry"]],"bot_framework.flows.request_role_flow.request_role_flow_router":[["bot_framework.flows.request_role_flow.protocols",2,"from bot_framework.flows.request_role_flow.protocols import IRoleListPresenter"],["bot_framework.entities.bot_message",1,"from bot_framework.entities.bot_message import BotMessageUser"]],"bot_framework.services.card_field_formatter":[["bot_framework.protocols",1,"from bot_framework.protocols import ICardFieldFormatter, IDisplayWidthCalculator"],["bot_framework.services.display_width_calculator",2,"from bot_framework.services.display_width_calculator import DisplayWidthCalculator"]],"bot_framework.language_management.repos.protocols.i_language_repo":[["bot_framework.base_protocols",3,"from bot_framework.base_protocols import ("]],"bot_framework.telegram.middleware.i_middleware":[],"bot_framework.language_management.entities.language":[],"bot_framework.language_management.entities.phrase":[],"bot_framework.flows.request_role_flow.entities.request_role_flow_state":[],"bot_framework.base_protocols.update":[],"bot_framework.base_protocols.get_by_name":[],"bot_framework.entities.bot_callback":[],"bot_framework.services":[["bot_framework.services.display_width_calculator",2,"from .display_width_calculator import DisplayWidthCalculator"],["bot_framework.services.remaining_time_formatter",3,"from .remaining_time_formatter import RemainingTimeFormatter"],["bot_framework.services.card_field_formatter",1,"from .card_field_formatter import CardFieldFormatter"]],"bot_framework.flows.request_role_flow.protocols.i_request_role_flow_state_storage":[["bot_framework.flows.request_role_flow.entities",3,"from bot_framework.flows.request_role_flow.entities import RequestRoleFlowState"]],"bot_framework.flow_management.entities":[["bot_framework.flow_management.entities.flow_stack_entry",3,"from bot_framework.flow_management.entities.flow_stack_entry import FlowStackEntry"]],"bot_framework.language_management.repos":[["bot_framework.language_management.repos.language_repo",1,"from .language_repo import LanguageRepo"],["bot_framework.language_management.repos.phrase_repo",2,"from .phrase_repo import PhraseRepo"]],"bot_framework.flows.request_role_flow.handlers.show_roles_handler":[["bot_framework.flows.request_role_flow.protocols",5,"from bot_framework.flows.request_role_flow.protocols import IRoleListPresenter"],["bot_framework.protocols.i_callback_answerer",6,"from bot_framework.protocols.i_callback_answerer import ICallbackAnswerer"],["bot_framework.entities.bot_callback",3,"from bot_framework.entities.bot_callback import BotCallback"],["bot_framework.entities.role_name",4,"from bot_framework.entities.role_name import RoleName"]],"bot_framework.role_management.repos.protocols.i_user_repo":[["bot_framework.entities.user",10,"from bot_framework.entities.user import User"],["bot_framework.base_protocols",3,"from bot_framework.base_protocols import ("]],"bot_framework.language_management.repos.language_repo":[["bot_framework.language_management.repos.protocols.i_language_repo",5,"from bot_framework.language_management.repos.protocols.i_language_repo import ILanguageRepo"],["bot_framework.language_management.entities.language",4,"from bot_framework.language_management.entities.language import Language"]],"bot_framework.role_management.services":[],"bot_framework.role_management.entities.user_role":[],"bot_framework.entities.user":[["bot_framework.entities.language_code",9,"from bot_framework.entities.language_code import LanguageCode"]],"bot_framework.flow_management.repos.redis_flow_stack_storage":[["bot_framework.flow_management.entities",7,"from bot_framework.flow_management.entities import FlowStackEntry"]],"bot_framework.telegram.services.callback_handler_registry":[["bot_framework.entities.bot_callback",6,"from bot_framework.entities.bot_callback import BotCallback"],["bot_framework.protocols.i_callback_handler",7,"from bot_framework.protocols.i_callback_handler import ICallbackHandler"]],"bot_framework.base_protocols.create":[],"bot_framework.role_management":[["bot_framework.role_management.entities",1,"from bot_framework.role_management.entities import Role, RoleName, User, UserRole"],["bot_framework.role_management.repos",2,"from bot_framework.role_management.repos import RoleRepo"],["bot_framework.role_management.repos.protocols",3,"from bot_framework.role_management.repos.protocols import IRoleRepo, IUserRepo"]],"bot_framework.protocols.i_next_step_handler_registrar":[["bot_framework.protocols.i_message_handler",4,"from bot_framework.protocols.i_message_handler import IMessageHandler"],["bot_framework.entities.bot_message",3,"from bot_framework.entities.bot_message import BotMessage"]],"bot_framework.telegram":[["bot_framework.telegram.protocols",2,"from .protocols import ("],["bot_framework.telegram.services",14,"from .services import ("],["bot_framework.telegram.middleware",1,"from .middleware import EnsureUserMiddleware, IMiddleware"]],"bot_framework.flows.request_role_flow.actions.role_rejection_notifier":[["bot_framework.protocols.i_message_sender",2,"from bot_framework.protocols.i_message_sender import IMessageSender"],["bot_framework.language_management.repos.protocols.i_phrase_repo",1,"from bot_framework.language_management.repos.protocols.i_phrase_repo import IPhraseRepo"]],"bot_framework.protocols.i_message_sender":[["bot_framework.entities.parse_mode",5,"from bot_framework.entities.parse_mode import ParseMode"],["bot_framework.entities.bot_message",3,"from bot_framework.entities.bot_message import BotMessage"],["bot_framework.entities.keyboard",4,"from bot_framework.entities.keyboard import Keyboard"]],"bot_framework.telegram.middleware":[["bot_framework.telegram.middleware.i_middleware",2,"from .i_middleware import IMiddleware"],["bot_framework.telegram.middleware.ensure_user_middleware",1,"from .ensure_user_middleware import EnsureUserMiddleware"]],"bot_framework.flows.request_role_flow.protocols":[["bot_framework.flows.request_role_flow.protocols.i_request_role_flow_router",1,"from bot_framework.flows.request_role_flow.protocols.i_request_role_flow_router import ("],["bot_framework.flows.request_role_flow.protocols.i_role_list_presenter",10,"from bot_framework.flows.request_role_flow.protocols.i_role_list_presenter import ("],["bot_framework.flows.request_role_flow.protocols.i_role_rejection_notifier",13,"from bot_framework.flows.request_role_flow.protocols.i_role_rejection_notifier import ("],["bot_framework.flows.request_role_flow.protocols.i_role_request_sender",16,"from bot_framework.flows.request_role_flow.protocols.i_role_request_sender import ("],["bot_framework.flows.request_role_flow.protocols.i_role_assigner",7,"from bot_framework.flows.request_role_flow.protocols.i_role_assigner import ("],["bot_framework.flows.request_role_flow.protocols.i_request_role_flow_state_storage",4,"from bot_framework.flows.request_role_flow.protocols.i_request_role_flow_state_storage import ("]],"bot_framework.protocols.i_markdown_to_html_converter":[],"bot_framework.flow_management.services":[["bot_framework.flow_management.protocols",1,"from bot_framework.flow_management.protocols import ("],["bot_framework.flow_management.services.flow_stack_navigator",6,"from bot_framework.flow_management.services.flow_stack_navigator import FlowStackNavigator"],["bot_framework.flow_management.services.flow_message_deleter",5,"from bot_framework.flow_management.services.flow_message_deleter import FlowMessageDeleter"],["bot_framework.flow_management.services.flow_stack_validator",7,"from bot_framework.flow_management.services.flow_stack_validator import FlowStackValidator"]],"bot_framework.entities.role_name":[],"bot_framework.flows.request_role_flow.handlers.reject_role_handler":[["bot_framework.entities.bot_callback",3,"from bot_framework.entities.bot_callback import BotCallback"],["bot_framework.entities.role_name",4,"from bot_framework.entities.role_name import RoleName"],["bot_framework.flows.request_role_flow.protocols",5,"from bot_framework.flows.request_role_flow.protocols import IRoleRejectionNotifier"],["bot_framework.role_management.repos.protocols.i_role_repo",7,"from bot_framework.role_management.repos.protocols.i_role_repo import IRoleRepo"],["bot_framework.protocols.i_callback_answerer",6,"from bot_framework.protocols.i_callback_answerer import ICallbackAnswerer"],["bot_framework.role_management.repos.protocols.i_user_repo",8,"from bot_framework.role_management.repos.protocols.i_user_repo import IUserRepo"]],"bot_framework.flows.request_role_flow.protocols.i_role_assigner":[],"bot_framework.flows.request_role_flow.repos.redis_request_role_flow_state_storage":[["bot_framework.flows.request_role_flow.entities",5,"from bot_framework.flows.request_role_flow.entities import RequestRoleFlowState"]],"bot_framework.services.remaining_time_formatter":[["bot_framework.language_management.repos.protocols.i_phrase_repo",3,"from bot_framework.language_management.repos.protocols.i_phrase_repo import IPhraseRepo"],["bot_framework.protocols",4,"from bot_framework.protocols import IRemainingTimeFormatter"]],"bot_framework.language_management.entities":[["bot_framework.entities",1,"from bot_framework.entities import LanguageCode"],["bot_framework.language_management.entities.language",3,"from .language import Language"],["bot_framework.language_management.entities.phrase",4,"from .phrase import Phrase"]],"bot_framework.telegram.services.message_handler_registry":[["bot_framework.protocols.i_message_handler",7,"from bot_framework.protocols.i_message_handler import IMessageHandler"],["bot_framework.entities.bot_message",6,"from bot_framework.entities.bot_message import BotMessage, BotMessageUser"]],"bot_framework.base_protocols.read":[],"bot_framework.flow_management.repos":[["bot_framework.flow_management.repos.redis_flow_stack_storage",6,"from bot_framework.flow_management.repos.redis_flow_stack_storage import RedisFlowStackStorage"],["bot_framework.flow_management.repos.redis_flow_message_storage",3,"from bot_framework.flow_management.repos.redis_flow_message_storage import ("]],"bot_framework.flows.request_role_flow.actions.role_assigner":[["bot_framework.language_management.repos.protocols.i_phrase_repo",1,"from bot_framework.language_management.repos.protocols.i_phrase_repo import IPhraseRepo"],["bot_framework.role_management.repos.protocols.i_role_repo",3,"from bot_framework.role_management.repos.protocols.i_role_repo import IRoleRepo"],["bot_framework.protocols.i_message_sender",2,"from bot_framework.protocols.i_message_sender import IMessageSender"]],"bot_framework.entities.bot_user":[],"bot_framework.telegram.services.markdown_to_html_converter":[["bot_framework.telegram.protocols",4,"from bot_framework.telegram.protocols import IMarkdownToHtmlConverter"]],"bot_framework.flow_management.services.flow_message_deleter":[["bot_framework.protocols",6,"from bot_framework.protocols import IMessageDeleter"],["bot_framework.flow_management.protocols",5,"from bot_framework.flow_management.protocols import IFlowMessageStorage"]],"bot_framework.telegram.protocols":[["bot_framework.protocols",1,"from bot_framework.protocols import ("],["bot_framework.telegram.protocols.i_markdown_escaper",18,"from .i_markdown_escaper import IMarkdownEscaper"]],"bot_framework.flow_management.protocols.i_flow_message_storage":[],"bot_framework.protocols.i_notify_replacer":[["bot_framework.entities.parse_mode",5,"from bot_framework.entities.parse_mode import ParseMode"],["bot_framework.entities.bot_message",3,"from bot_framework.entities.bot_message import BotMessage"],["bot_framework.entities.keyboard",4,"from bot_framework.entities.keyboard import Keyboard"]],"bot_framework.protocols":[["bot_framework.protocols.i_callback_answerer",1,"from .i_callback_answerer import ICallbackAnswerer"],["bot_framework.protocols.i_markdown_to_html_converter",8,"from .i_markdown_to_html_converter import IMarkdownToHtmlConverter"],["bot_framework.protocols.i_message_service",14,"from .i_message_service import IMessageService"],["bot_framework.protocols.i_ensure_user_exists",6,"from .i_ensure_user_exists import IEnsureUserExists"],["bot_framework.protocols.i_callback_handler_registry",3,"from .i_callback_handler_registry import ICallbackHandlerRegistry"],["bot_framework.protocols.i_remaining_time_formatter",17,"from .i_remaining_time_formatter import IRemainingTimeFormatter"],["bot_framework.protocols.i_notify_replacer",16,"from .i_notify_replacer import INotifyReplacer"],["bot_framework.protocols.i_message_deleter",9,"from .i_message_deleter import IMessageDeleter"],["bot_framework.protocols.i_message_handler",10,"from .i_message_handler import IMessageHandler"],["bot_framework.protocols.i_next_step_handler_registrar",15,"from .i_next_step_handler_registrar import INextStepHandlerRegistrar"],["bot_framework.protocols.i_callback_handler",2,"from .i_callback_handler import ICallbackHandler"],["bot_framework.protocols.i_card_field_formatter",4,"from .i_card_field_formatter import ICardFieldFormatter"],["bot_framework.protocols.i_flow_router",7,"from .i_flow_router import IFlowRouter"],["bot_framework.protocols.i_message_replacer",12,"from .i_message_replacer import IMessageReplacer"],["bot_framework.protocols.i_message_handler_registry",11,"from .i_message_handler_registry import IMessageHandlerRegistry"],["bot_framework.protocols.i_display_width_calculator",5,"from .i_display_width_calculator import IDisplayWidthCalculator"],["bot_framework.protocols.i_message_sender",13,"from .i_message_sender import IMessageSender"]],"bot_framework.flow_management.protocols.i_flow_stack_storage":[["bot_framework.flow_management.entities",3,"from bot_framework.flow_management.entities import FlowStackEntry"]],"bot_framework.flows.request_role_flow.protocols.i_role_list_presenter":[],"bot_framework.telegram.services.callback_answerer":[],"bot_framework.flows.request_role_flow.entities":[["bot_framework.flows.request_role_flow.entities.request_role_flow_state",1,"from bot_framework.flows.request_role_flow.entities.request_role_flow_state import ("]],"bot_framework.protocols.i_message_handler":[["bot_framework.entities.bot_message",7,"from bot_framework.entities.bot_message import BotMessage"],["bot_framework.entities",6,"from bot_framework.entities import RoleName"]],"bot_framework.flow_management.services.flow_stack_navigator":[["bot_framework.flow_management.protocols",9,"from bot_framework.flow_management.protocols import ("],["bot_framework.flow_management.flow_registry",8,"from bot_framework.flow_management.flow_registry import FlowRegistry"],["bot_framework.entities.user",6,"from bot_framework.entities.user import User"],["bot_framework.flow_management.entities",7,"from bot_framework.flow_management.entities import FlowStackEntry"]],"bot_framework.flows.request_role_flow":[["bot_framework.flows.request_role_flow.request_role_flow_router",3,"from bot_framework.flows.request_role_flow.request_role_flow_router import ("],["bot_framework.flows.request_role_flow.protocols",2,"from bot_framework.flows.request_role_flow.protocols import IRequestRoleFlowRouter"],["bot_framework.flows.request_role_flow.factory",1,"from bot_framework.flows.request_role_flow.factory import RequestRoleFlowFactory"]],"bot_framework.protocols.i_display_width_calculator":[],"bot_framework.flow_management.repos.redis_flow_message_storage":[],"bot_framework.base_protocols.get_all":[],"bot_framework.flows.request_role_flow.protocols.i_role_request_sender":[["bot_framework.entities.user",4,"from bot_framework.entities.user import User"],["bot_framework.entities.role",3,"from bot_framework.entities.role import Role"]],"bot_framework.entities.role":[],"bot_framework.flows.request_role_flow.handlers.approve_role_handler":[["bot_framework.role_management.repos.protocols.i_role_repo",7,"from bot_framework.role_management.repos.protocols.i_role_repo import IRoleRepo"],["bot_framework.entities.bot_callback",3,"from bot_framework.entities.bot_callback import BotCallback"],["bot_framework.protocols.i_callback_answerer",6,"from bot_framework.protocols.i_callback_answerer import ICallbackAnswerer"],["bot_framework.role_management.repos.protocols.i_user_repo",8,"from bot_framework.role_management.repos.protocols.i_user_repo import IUserRepo"],["bot_framework.entities.role_name",4,"from bot_framework.entities.role_name import RoleName"],["bot_framework.flows.request_role_flow.protocols",5,"from bot_framework.flows.request_role_flow.protocols import IRoleAssigner"]],"bot_framework.telegram.services":[["bot_framework.telegram.services.telegram_notify_replacer",13,"from .telegram_notify_replacer import TelegramNotifyReplacer"],["bot_framework.telegram.services.callback_handler_registry",2,"from .callback_handler_registry import CallbackHandlerRegistry"],["bot_framework.telegram.services.markdown_to_html_converter",6,"from .markdown_to_html_converter import MarkdownToHtmlConverter"],["bot_framework.telegram.services.message_handler_registry",7,"from .message_handler_registry import MessageHandlerRegistry"],["bot_framework.telegram.services.close_callback_handler",3,"from .close_callback_handler import CloseCallbackHandler"],["bot_framework.telegram.services.telegram_message_sender",12,"from .telegram_message_sender import TelegramMessageSender"],["bot_framework.telegram.services.next_step_handler_registrar",8,"from .next_step_handler_registrar import NextStepHandlerRegistrar"],["bot_framework.telegram.services.ensure_user_exists",4,"from .ensure_user_exists import EnsureUserExists"],["bot_framework.telegram.services.telegram_message_deleter",10,"from .telegram_message_deleter import TelegramMessageDeleter"],["bot_framework.telegram.services.markdown_escaper",5,"from .markdown_escaper import MarkdownEscaper"],["bot_framework.telegram.services.telegram_message_replacer",11,"from .telegram_message_replacer import TelegramMessageReplacer"],["bot_framework.telegram.services.telegram_message_core",9,"from .telegram_message_core import TelegramMessageCore"],["bot_framework.telegram.services.callback_answerer",1,"from .callback_answerer import CallbackAnswerer"]],"bot_framework.flows.request_role_flow.presenters":[["bot_framework.flows.request_role_flow.presenters.role_list_presenter",1,"from bot_framework.flows.request_role_flow.presenters.role_list_presenter import ("]],"bot_framework.flows.request_role_flow.actions":[["bot_framework.flows.request_role_flow.actions.role_rejection_notifier",2,"from bot_framework.flows.request_role_flow.actions.role_rejection_notifier import ("],["bot_framework.flows.request_role_flow.actions.role_assigner",1,"from bot_framework.flows.request_role_flow.actions.role_assigner import RoleAssigner"],["bot_framework.flows.request_role_flow.actions.role_request_sender",5,"from bot_framework.flows.request_role_flow.actions.role_request_sender import ("]],"bot_framework.telegram.services.telegram_message_sender":[["bot_framework.protocols.i_message_sender",8,"from bot_framework.protocols.i_message_sender import IMessageSender"],["bot_framework.entities.bot_message",5,"from bot_framework.entities.bot_message import BotMessage"],["bot_framework.entities.parse_mode",7,"from bot_framework.entities.parse_mode import ParseMode"],["bot_framework.telegram.services.telegram_message_core",10,"from .telegram_message_core import TelegramMessageCore"],["bot_framework.entities.keyboard",6,"from bot_framework.entities.keyboard import Keyboard"]],"bot_framework.protocols.i_remaining_time_formatter":[],"bot_framework.protocols.i_message_handler_registry":[["bot_framework.protocols.i_message_handler",4,"from bot_framework.protocols.i_message_handler import IMessageHandler"]],"bot_framework.protocols.i_card_field_formatter":[],"bot_framework.telegram.services.telegram_message_replacer":[["bot_framework.entities.bot_message",5,"from bot_framework.entities.bot_message import BotMessage"],["bot_framework.telegram.services.telegram_message_core",10,"from .telegram_message_core import TelegramMessageCore"],["bot_framework.entities.parse_mode",7,"from bot_framework.entities.parse_mode import ParseMode"],["bot_framework.protocols.i_message_replacer",8,"from bot_framework.protocols.i_message_replacer import IMessageReplacer"],["bot_framework.entities.keyboard",6,"from bot_framework.entities.keyboard import Keyboard"]],"bot_framework.flows.request_role_flow.actions.role_request_sender":[["bot_framework.entities.keyboard",2,"from bot_framework.entities.keyboard import Keyboard"],["bot_framework.protocols.i_message_sender",7,"from bot_framework.protocols.i_message_sender import IMessageSender"],["bot_framework.entities.button",1,"from bot_framework.entities.button import Button"],["bot_framework.entities.user",4,"from bot_framework.entities.user import User"],["bot_framework.language_management.repos.protocols.i_phrase_repo",6,"from bot_framework.language_management.repos.protocols.i_phrase_repo import IPhraseRepo"],["bot_framework.role_management.repos.protocols.i_user_repo",8,"from bot_framework.role_management.repos.protocols.i_user_repo import IUserRepo"],["bot_framework.flows.request_role_flow.exceptions",5,"from bot_framework.flows.request_role_flow.exceptions import NoSupervisorsFoundError"],["bot_framework.entities.role",3,"from bot_framework.entities.role import Role"]],"bot_framework.base_protocols.get_by_key":[],"bot_framework":[["bot_framework.entities.role",15,"from bot_framework.entities.role import Role"],["bot_framework.entities.user",17,"from bot_framework.entities.user import User"],["bot_framework.protocols.i_callback_handler",19,"from bot_framework.protocols.i_callback_handler import ICallbackHandler"],["bot_framework.entities.bot_callback",8,"from bot_framework.entities.bot_callback import BotCallback"],["bot_framework.protocols.i_message_replacer",27,"from bot_framework.protocols.i_message_replacer import IMessageReplacer"],["bot_framework.protocols.i_message_handler",25,"from bot_framework.protocols.i_message_handler import IMessageHandler"],["bot_framework.entities.parse_mode",14,"from bot_framework.entities.parse_mode import ParseMode"],["bot_framework.entities.language_code",13,"from bot_framework.entities.language_code import LanguageCode"],["bot_framework.entities.button",11,"from bot_framework.entities.button import Button"],["bot_framework.entities.bot_user",10,"from bot_framework.entities.bot_user import BotUser"],["bot_framework.entities.bot_message",9,"from bot_framework.entities.bot_message import BotMessage, BotMessageUser"],["bot_framework.protocols.i_callback_handler_registry",20,"from bot_framework.protocols.i_callback_handler_registry import ("],["bot_framework.protocols.i_flow_router",23,"from bot_framework.protocols.i_flow_router import IFlowRouter"],["bot_framework.protocols.i_notify_replacer",29,"from bot_framework.protocols.i_notify_replacer import INotifyReplacer"],["bot_framework.protocols.i_message_sender",28,"from bot_framework.protocols.i_message_sender import IMessageSender"],["bot_framework.protocols.i_message_deleter",24,"from bot_framework.protocols.i_message_deleter import IMessageDeleter"],["bot_framework.entities.keyboard",12,"from bot_framework.entities.keyboard import Keyboard"],["bot_framework.protocols.i_message_handler_registry",26,"from bot_framework.protocols.i_message_handler_registry import IMessageHandlerRegistry"],["bot_framework.entities.role_name",16,"from bot_framework.entities.role_name import RoleName"],["bot_framework.protocols.i_callback_answerer",18,"from bot_framework.protocols.i_callback_answerer import ICallbackAnswerer"]],"bot_framework.language_management.repos.protocols.i_phrase_repo":[],"bot_framework.flow_management.services.flow_stack_validator":[["bot_framework.flow_management.flow_registry",5,"from bot_framework.flow_management.flow_registry import FlowRegistry"],["bot_framework.flow_management.protocols",6,"from bot_framework.flow_management.protocols import IFlowStackStorage"]],"bot_framework.flows.request_role_flow.repos":[["bot_framework.flows.request_role_flow.repos.redis_request_role_flow_state_storage",1,"from bot_framework.flows.request_role_flow.repos.redis_request_role_flow_state_storage import ("]],"bot_framework.flow_management.protocols.i_flow_stack_validator":[],"bot_framework.telegram.services.telegram_message_core":[["bot_framework.telegram.services.markdown_escaper",13,"from .markdown_escaper import MarkdownEscaper"],["bot_framework.entities.keyboard",10,"from bot_framework.entities.keyboard import Keyboard"],["bot_framework.flow_management",11,"from bot_framework.flow_management import IFlowMessageStorage"],["bot_framework.telegram.services.markdown_to_html_converter",14,"from .markdown_to_html_converter import MarkdownToHtmlConverter"],["bot_framework.entities.bot_message",9,"from bot_framework.entities.bot_message import BotMessage"]],"bot_framework.flow_management.protocols":[["bot_framework.flow_management.protocols.i_flow_stack_storage",3,"from bot_framework.flow_management.protocols.i_flow_stack_storage import IFlowStackStorage"],["bot_framework.flow_management.protocols.i_flow_message_storage",2,"from bot_framework.flow_management.protocols.i_flow_message_storage import IFlowMessageStorage"],["bot_framework.flow_management.protocols.i_flow_stack_validator",4,"from bot_framework.flow_management.protocols.i_flow_stack_validator import IFlowStackValidator"],["bot_framework.flow_management.protocols.i_flow_message_deleter",1,"from bot_framework.flow_management.protocols.i_flow_message_deleter import IFlowMessageDeleter"]],"bot_framework.telegram.protocols.i_markdown_escaper":[],"bot_framework.flow_management.entities.flow_stack_entry":[],"bot_framework.flows.request_role_flow.handlers.role_selection_handler":[["bot_framework.flows.request_role_flow.protocols",6,"from bot_framework.flows.request_role_flow.protocols import ("],["bot_framework.protocols.i_callback_answerer",11,"from bot_framework.protocols.i_callback_answerer import ICallbackAnswerer"],["bot_framework.entities.bot_callback",3,"from bot_framework.entities.bot_callback import BotCallback"],["bot_framework.role_management.repos.protocols.i_role_repo",13,"from bot_framework.role_management.repos.protocols.i_role_repo import IRoleRepo"],["bot_framework.entities.role_name",4,"from bot_framework.entities.role_name import RoleName"],["bot_framework.language_management.repos.protocols.i_phrase_repo",10,"from bot_framework.language_management.repos.protocols.i_phrase_repo import IPhraseRepo"],["bot_framework.flows.request_role_flow.exceptions",5,"from bot_framework.flows.request_role_flow.exceptions import NoSupervisorsFoundError"],["bot_framework.role_management.repos.protocols.i_user_repo",14,"from bot_framework.role_management.repos.protocols.i_user_repo import IUserRepo"],["bot_framework.protocols.i_message_sender",12,"from bot_framework.protocols.i_message_sender import IMessageSender"]],"bot_framework.flows.request_role_flow.handlers.request_role_command_handler":[["bot_framework.protocols.i_message_handler",6,"from bot_framework.protocols.i_message_handler import IMessageHandler"],["bot_framework.entities.bot_message",1,"from bot_framework.entities.bot_message import BotMessage"],["bot_framework.entities.role_name",2,"from bot_framework.entities.role_name import RoleName"],["bot_framework.flows.request_role_flow.protocols",3,"from bot_framework.flows.request_role_flow.protocols import ("]],"bot_framework.entities.button":[],"bot_framework.telegram.middleware.ensure_user_middleware":[["bot_framework.entities.bot_user",3,"from bot_framework.entities.bot_user import BotUser"],["bot_framework.protocols",4,"from bot_framework.protocols import IEnsureUserExists"],["bot_framework.telegram.middleware.i_middleware",5,"from bot_framework.telegram.middleware.i_middleware import IMiddleware"]],"bot_framework.flows":[["bot_framework.flows.request_role_flow",1,"from bot_framework.flows.request_role_flow import ("]],"bot_framework.entities.parse_mode":[],"bot_framework.flows.request_role_flow.handlers":[["bot_framework.flows.request_role_flow.handlers.request_role_command_handler",7,"from bot_framework.flows.request_role_flow.handlers.request_role_command_handler import ("],["bot_framework.flows.request_role_flow.handlers.reject_role_handler",4,"from bot_framework.flows.request_role_flow.handlers.reject_role_handler import ("],["bot_framework.flows.request_role_flow.handlers.approve_role_handler",1,"from bot_framework.flows.request_role_flow.handlers.approve_role_handler import ("],["bot_framework.flows.request_role_flow.handlers.role_selection_handler",10,"from bot_framework.flows.request_role_flow.handlers.role_selection_handler import ("],["bot_framework.flows.request_role_flow.handlers.show_roles_handler",13,"from bot_framework.flows.request_role_flow.handlers.show_roles_handler import ("]],"bot_framework.language_management.repos.protocols":[["bot_framework.language_management.repos.protocols.i_language_repo",1,"from .i_language_repo import ILanguageRepo"],["bot_framework.language_management.repos.protocols.i_phrase_repo",2,"from .i_phrase_repo import IPhraseRepo"]],"bot_framework.protocols.i_callback_handler":[["bot_framework.protocols.i_callback_answerer",8,"from bot_framework.protocols.i_callback_answerer import ICallbackAnswerer"],["bot_framework.entities",6,"from bot_framework.entities import RoleName"],["bot_framework.entities.bot_callback",7,"from bot_framework.entities.bot_callback import BotCallback"]],"bot_framework.role_management.repos.protocols.i_role_repo":[["bot_framework.entities.role",7,"from bot_framework.entities.role import Role"],["bot_framework.base_protocols",3,"from bot_framework.base_protocols import ("]],"bot_framework.entities":[["bot_framework.entities.role",8,"from .role import Role"],["bot_framework.entities.bot_callback",1,"from .bot_callback import BotCallback"],["bot_framework.entities.button",4,"from .button import Button"],["bot_framework.entities.bot_message",2,"from .bot_message import BotMessage, BotMessageUser"],["bot_framework.entities.bot_user",3,"from .bot_user import BotUser"],["bot_framework.entities.keyboard",5,"from .keyboard import Keyboard"],["bot_framework.entities.parse_mode",7,"from .parse_mode import ParseMode"],["bot_framework.entities.language_code",6,"from .language_code import LanguageCode"],["bot_framework.entities.user",10,"from .user import User"],["bot_framework.entities.role_name",9,"from .role_name import RoleName"]],"bot_framework.telegram.services.markdown_escaper":[["bot_framework.telegram.protocols.i_markdown_escaper",3,"from bot_framework.telegram.protocols.i_markdown_escaper import IMarkdownEscaper"]],"bot_framework.protocols.i_flow_router":[["bot_framework.entities.user",8,"from bot_framework.entities.user import User"]],"bot_framework.role_management.repos":[["bot_framework.role_management.repos.role_repo",1,"from .role_repo import RoleRepo"]],"bot_framework.language_management.repos.phrase_repo":[["bot_framework.language_management.repos.protocols.i_phrase_repo",3,"from bot_framework.language_management.repos.protocols.i_phrase_repo import IPhraseRepo"]],"bot_framework.flow_management.protocols.i_flow_message_deleter":[]}
@@ -0,0 +1,3 @@
1
+ Signature: 8a477f597d28d172789f06886806bc55
2
+ # This file is a cache directory tag automatically created by Grimp.
3
+ # For information about cache directory tags see https://bford.info/cachedir/
@@ -0,0 +1 @@
1
+ {"bot_framework.flow_management.services.flow_stack_validator": 1769084168.3913405, "bot_framework.flow_management.flow_registry": 1769084167.8071065, "bot_framework.protocols.i_message_deleter": 1769084002.1797442, "bot_framework.telegram.middleware": 1769084469.6168976, "bot_framework.flows.request_role_flow.presenters": 1769085247.0809307, "bot_framework.services.display_width_calculator": 1769084055.6980267, "bot_framework.entities.language_code": 1769083916.3965182, "bot_framework": 1769085328.2441907, "bot_framework.flows.request_role_flow.protocols.i_request_role_flow_router": 1769085209.0118196, "bot_framework.flow_management.protocols.i_flow_message_storage": 1769084165.7472034, "bot_framework.flow_management.protocols.i_flow_stack_validator": 1769084166.3527896, "bot_framework.base_protocols": 1769083856.0216823, "bot_framework.language_management.entities.language": 1769084242.0496166, "bot_framework.base_protocols.get_by_key": 1769083855.267238, "bot_framework.telegram.protocols.i_markdown_escaper": 1769084468.1410477, "bot_framework.language_management": 1769084244.466946, "bot_framework.flows.request_role_flow.handlers.approve_role_handler": 1769085305.5721917, "bot_framework.protocols.i_message_handler_registry": 1769084004.0697446, "bot_framework.services.card_field_formatter": 1769084056.0071945, "bot_framework.flows.request_role_flow.factory": 1769085307.1022103, "bot_framework.flow_management": 1769084169.265881, "bot_framework.role_management.repos.protocols.i_user_repo": 1769084322.4937305, "bot_framework.protocols.i_next_step_handler_registrar": 1769084004.6439037, "bot_framework.protocols.i_notify_replacer": 1769084002.6966827, "bot_framework.flows.request_role_flow.repos.redis_request_role_flow_state_storage": 1769085246.826745, "bot_framework.telegram.services.callback_handler_registry": 1769084470.2490964, "bot_framework.telegram.services.callback_answerer": 1769084469.9261, "bot_framework.protocols.i_message_replacer": 1769084002.435014, "bot_framework.flows.request_role_flow.handlers.show_roles_handler": 1769085306.591576, "bot_framework.language_management.repos.phrase_repo": 1769084243.5227506, "bot_framework.telegram.services.telegram_message_deleter": 1769084473.5893543, "bot_framework.telegram.services.markdown_escaper": 1769084471.9465578, "bot_framework.protocols.i_message_service": 1769084004.900513, "bot_framework.flows.request_role_flow.protocols.i_role_rejection_notifier": 1769085208.7589476, "bot_framework.telegram.services.telegram_notify_replacer": 1769084473.9205675, "bot_framework.flow_management.services": 1769084168.9666657, "bot_framework.flows.request_role_flow.handlers.reject_role_handler": 1769085305.819845, "bot_framework.entities.role_name": 1769083916.667053, "bot_framework.language_management.repos.protocols.i_phrase_repo": 1769084242.6450753, "bot_framework.base_protocols.get_all": 1769083855.009075, "bot_framework.entities.role": 1769083916.922229, "bot_framework.flow_management.protocols": 1769084166.6405058, "bot_framework.flows.request_role_flow.actions": 1769085247.5899746, "bot_framework.protocols.i_markdown_to_html_converter": 1769084005.4519954, "bot_framework.protocols.i_callback_answerer": 1769084002.9617207, "bot_framework.flow_management.protocols.i_flow_message_deleter": 1769084166.0523162, "bot_framework.base_protocols.read_sequence_by_user_id": 1769083855.771228, "bot_framework.telegram.services.telegram_message_core": 1769084472.610504, "bot_framework.flows.request_role_flow": 1769085307.3666294, "bot_framework.flows.request_role_flow.actions.role_rejection_notifier": 1769085248.0919287, "bot_framework.role_management.repos": 1769084323.6982272, "bot_framework.telegram": 1769084474.6506, "bot_framework.flows.request_role_flow.protocols": 1769085208.0295548, "bot_framework.language_management.repos.protocols": 1769084243.2496955, "bot_framework.protocols.i_display_width_calculator": 1769084005.7322984, "bot_framework.services": 1769084056.5520177, "bot_framework.flows.request_role_flow.handlers.request_role_command_handler": 1769085306.084152, "bot_framework.role_management.entities": 1769084322.1825702, "bot_framework.entities.bot_message": 1769083917.9839096, "bot_framework.flows.request_role_flow.request_role_flow_router": 1769085306.8499892, "bot_framework.language_management.entities": 1769084242.3164392, "bot_framework.entities": 1769083919.04307, "bot_framework.flows.request_role_flow.protocols.i_role_list_presenter": 1769085209.5044606, "bot_framework.telegram.services.next_step_handler_registrar": 1769084470.9087143, "bot_framework.flow_management.protocols.i_flow_stack_storage": 1769084165.4345882, "bot_framework.telegram.services.telegram_message_sender": 1769084472.9412436, "bot_framework.telegram.middleware.ensure_user_middleware": 1769084469.2707036, "bot_framework.protocols.i_callback_handler": 1769084003.2307417, "bot_framework.telegram.services.close_callback_handler": 1769084471.2744713, "bot_framework.flow_management.repos": 1769084167.5311947, "bot_framework.telegram.protocols": 1769084468.5594232, "bot_framework.entities.bot_callback": 1769083918.244317, "bot_framework.flow_management.entities.flow_stack_entry": 1769084164.8425195, "bot_framework.base_protocols.create": 1769083853.98272, "bot_framework.telegram.middleware.i_middleware": 1769084468.9338174, "bot_framework.base_protocols.update": 1769083854.509304, "bot_framework.role_management": 1769084324.5974207, "bot_framework.flows.request_role_flow.protocols.i_role_assigner": 1769085208.5152862, "bot_framework.flows.request_role_flow.repos": 1769085246.580789, "bot_framework.flows.request_role_flow.protocols.i_role_request_sender": 1769085209.2575047, "bot_framework.flows.request_role_flow.actions.role_request_sender": 1769085248.3403716, "bot_framework.protocols.i_callback_handler_registry": 1769084003.4943173, "bot_framework.flows.request_role_flow.protocols.i_request_role_flow_state_storage": 1769085208.2803967, "bot_framework.telegram.services.ensure_user_exists": 1769084471.6043963, "bot_framework.flow_management.repos.redis_flow_stack_storage": 1769084166.9345844, "bot_framework.language_management.repos.language_repo": 1769084243.852085, "bot_framework.flows.request_role_flow.entities.request_role_flow_state": 1769085207.7967117, "bot_framework.role_management.repos.protocols": 1769084323.0900862, "bot_framework.protocols.i_ensure_user_exists": 1769084005.1737041, "bot_framework.entities.user": 1769083918.7785232, "bot_framework.telegram.services.markdown_to_html_converter": 1769084472.3220336, "bot_framework.flows.request_role_flow.actions.role_assigner": 1769085247.837689, "bot_framework.flow_management.services.flow_stack_navigator": 1769084168.686316, "bot_framework.base_protocols.delete": 1769083854.753036, "bot_framework.telegram.services": 1769084474.2942996, "bot_framework.services.remaining_time_formatter": 1769084056.2851474, "bot_framework.flows.request_role_flow.entities": 1769085207.5434995, "bot_framework.flows.request_role_flow.presenters.role_list_presenter": 1769085247.3311746, "bot_framework.protocols.i_card_field_formatter": 1769084006.2695477, "bot_framework.protocols.i_remaining_time_formatter": 1769084006.0039587, "bot_framework.protocols.i_message_handler": 1769084003.7654371, "bot_framework.flows.request_role_flow.handlers.role_selection_handler": 1769085306.3401542, "bot_framework.role_management.services.protocols": 1769084324.3071895, "bot_framework.language_management.repos.protocols.i_language_repo": 1769084242.9498317, "bot_framework.role_management.services": 1769084323.9990444, "bot_framework.base_protocols.get_by_name": 1769083855.5196767, "bot_framework.language_management.entities.phrase": 1769084241.7249546, "bot_framework.role_management.entities.user_role": 1769084321.834536, "bot_framework.telegram.services.message_handler_registry": 1769084470.571668, "bot_framework.language_management.repos": 1769084244.13264, "bot_framework.entities.bot_user": 1769083918.5131512, "bot_framework.protocols.i_message_sender": 1769084001.9209344, "bot_framework.entities.keyboard": 1769083917.7090988, "bot_framework.role_management.repos.protocols.i_role_repo": 1769084322.7735682, "bot_framework.entities.button": 1769083917.4651392, "bot_framework.flow_management.services.flow_message_deleter": 1769084168.1023543, "bot_framework.flows.request_role_flow.handlers": 1769085305.3205793, "bot_framework.protocols": 1769084006.5500958, "bot_framework.protocols.i_flow_router": 1769084004.351776, "bot_framework.flow_management.repos.redis_flow_message_storage": 1769084167.2503977, "bot_framework.flows": 1769085197.6823816, "bot_framework.flows.request_role_flow.exceptions": 1769085248.5914905, "bot_framework.flow_management.entities": 1769084165.1624818, "bot_framework.role_management.repos.role_repo": 1769084323.3947604, "bot_framework.entities.parse_mode": 1769083917.2031662, "bot_framework.base_protocols.read": 1769083854.260077, "bot_framework.telegram.services.telegram_message_replacer": 1769084473.260089}
@@ -0,0 +1 @@
1
+ 3.14
@@ -0,0 +1,71 @@
1
+ Metadata-Version: 2.4
2
+ Name: bot-framework
3
+ Version: 0.1.0
4
+ Summary: Reusable Telegram bot framework with Clean Architecture
5
+ Author-email: Vladimir Sumarokov <sumarokov.vp@gmail.com>
6
+ Requires-Python: >=3.13
7
+ Requires-Dist: pydantic>=2.11.0
8
+ Provides-Extra: all
9
+ Requires-Dist: psycopg[binary]>=3.2.0; extra == 'all'
10
+ Requires-Dist: pytelegrambotapi>=4.29.0; extra == 'all'
11
+ Requires-Dist: redis>=6.0.0; extra == 'all'
12
+ Provides-Extra: postgres
13
+ Requires-Dist: psycopg[binary]>=3.2.0; extra == 'postgres'
14
+ Provides-Extra: redis
15
+ Requires-Dist: redis>=6.0.0; extra == 'redis'
16
+ Provides-Extra: telegram
17
+ Requires-Dist: pytelegrambotapi>=4.29.0; extra == 'telegram'
18
+ Description-Content-Type: text/markdown
19
+
20
+ # Bot Framework
21
+
22
+ Reusable Python library for building Telegram bots with Clean Architecture principles.
23
+
24
+ ## Installation
25
+
26
+ ```bash
27
+ # Basic installation
28
+ pip install bot-framework
29
+
30
+ # With Telegram support
31
+ pip install bot-framework[telegram]
32
+
33
+ # With all optional dependencies
34
+ pip install bot-framework[all]
35
+ ```
36
+
37
+ ## Features
38
+
39
+ - **Clean Architecture** - Layered architecture with import-linter enforcement
40
+ - **Telegram Integration** - Ready-to-use services for pyTelegramBotAPI
41
+ - **Flow Management** - Dialog flow stack management with Redis storage
42
+ - **Role Management** - User roles and permissions
43
+ - **Language Management** - Multilingual phrase support
44
+ - **Request Role Flow** - Pre-built flow for role requests
45
+
46
+ ## Quick Start
47
+
48
+ ```python
49
+ from bot_framework import Button, Keyboard, IMessageSender
50
+ from bot_framework.telegram import TelegramMessageSender
51
+
52
+ # Create keyboard
53
+ keyboard = Keyboard(rows=[
54
+ [Button(text="Option 1", callback_data="opt1")],
55
+ [Button(text="Option 2", callback_data="opt2")],
56
+ ])
57
+
58
+ # Send message (implement IMessageSender or use TelegramMessageSender)
59
+ sender.send(chat_id=123, text="Choose an option:", keyboard=keyboard)
60
+ ```
61
+
62
+ ## Optional Dependencies
63
+
64
+ - `telegram` - pyTelegramBotAPI for Telegram bot integration
65
+ - `postgres` - psycopg for PostgreSQL database support
66
+ - `redis` - Redis for caching and flow state management
67
+ - `all` - All optional dependencies
68
+
69
+ ## License
70
+
71
+ MIT
@@ -0,0 +1,52 @@
1
+ # Bot Framework
2
+
3
+ Reusable Python library for building Telegram bots with Clean Architecture principles.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ # Basic installation
9
+ pip install bot-framework
10
+
11
+ # With Telegram support
12
+ pip install bot-framework[telegram]
13
+
14
+ # With all optional dependencies
15
+ pip install bot-framework[all]
16
+ ```
17
+
18
+ ## Features
19
+
20
+ - **Clean Architecture** - Layered architecture with import-linter enforcement
21
+ - **Telegram Integration** - Ready-to-use services for pyTelegramBotAPI
22
+ - **Flow Management** - Dialog flow stack management with Redis storage
23
+ - **Role Management** - User roles and permissions
24
+ - **Language Management** - Multilingual phrase support
25
+ - **Request Role Flow** - Pre-built flow for role requests
26
+
27
+ ## Quick Start
28
+
29
+ ```python
30
+ from bot_framework import Button, Keyboard, IMessageSender
31
+ from bot_framework.telegram import TelegramMessageSender
32
+
33
+ # Create keyboard
34
+ keyboard = Keyboard(rows=[
35
+ [Button(text="Option 1", callback_data="opt1")],
36
+ [Button(text="Option 2", callback_data="opt2")],
37
+ ])
38
+
39
+ # Send message (implement IMessageSender or use TelegramMessageSender)
40
+ sender.send(chat_id=123, text="Choose an option:", keyboard=keyboard)
41
+ ```
42
+
43
+ ## Optional Dependencies
44
+
45
+ - `telegram` - pyTelegramBotAPI for Telegram bot integration
46
+ - `postgres` - psycopg for PostgreSQL database support
47
+ - `redis` - Redis for caching and flow state management
48
+ - `all` - All optional dependencies
49
+
50
+ ## License
51
+
52
+ MIT
@@ -0,0 +1,57 @@
1
+ """
2
+ Bot Framework - A reusable Python library for building Telegram bots.
3
+
4
+ This package provides core components for building Telegram bots with
5
+ Clean Architecture principles.
6
+ """
7
+
8
+ from bot_framework.entities.bot_callback import BotCallback
9
+ from bot_framework.entities.bot_message import BotMessage, BotMessageUser
10
+ from bot_framework.entities.bot_user import BotUser
11
+ from bot_framework.entities.button import Button
12
+ from bot_framework.entities.keyboard import Keyboard
13
+ from bot_framework.entities.language_code import LanguageCode
14
+ from bot_framework.entities.parse_mode import ParseMode
15
+ from bot_framework.entities.role import Role
16
+ from bot_framework.entities.role_name import RoleName
17
+ from bot_framework.entities.user import User
18
+ from bot_framework.protocols.i_callback_answerer import ICallbackAnswerer
19
+ from bot_framework.protocols.i_callback_handler import ICallbackHandler
20
+ from bot_framework.protocols.i_callback_handler_registry import (
21
+ ICallbackHandlerRegistry,
22
+ )
23
+ from bot_framework.protocols.i_flow_router import IFlowRouter
24
+ from bot_framework.protocols.i_message_deleter import IMessageDeleter
25
+ from bot_framework.protocols.i_message_handler import IMessageHandler
26
+ from bot_framework.protocols.i_message_handler_registry import IMessageHandlerRegistry
27
+ from bot_framework.protocols.i_message_replacer import IMessageReplacer
28
+ from bot_framework.protocols.i_message_sender import IMessageSender
29
+ from bot_framework.protocols.i_notify_replacer import INotifyReplacer
30
+
31
+ __version__ = "0.1.0"
32
+
33
+ __all__ = [
34
+ # Entities
35
+ "BotCallback",
36
+ "BotMessage",
37
+ "BotMessageUser",
38
+ "BotUser",
39
+ "Button",
40
+ "Keyboard",
41
+ "LanguageCode",
42
+ "ParseMode",
43
+ "Role",
44
+ "RoleName",
45
+ "User",
46
+ # Protocols
47
+ "ICallbackAnswerer",
48
+ "ICallbackHandler",
49
+ "ICallbackHandlerRegistry",
50
+ "IFlowRouter",
51
+ "IMessageDeleter",
52
+ "IMessageHandler",
53
+ "IMessageHandlerRegistry",
54
+ "IMessageReplacer",
55
+ "IMessageSender",
56
+ "INotifyReplacer",
57
+ ]
@@ -0,0 +1,21 @@
1
+ from .create import CreateProtocol
2
+ from .delete import DeleteProtocol
3
+ from .get_all import GetAllProtocol
4
+ from .get_by_key import GetByKeyProtocol
5
+ from .get_by_name import GetByNameProtocol
6
+ from .read import ReadProtocol
7
+ from .read_sequence_by_user_id import (
8
+ ReadSequenceByUserIdProtocol,
9
+ )
10
+ from .update import UpdateProtocol
11
+
12
+ __all__ = [
13
+ "CreateProtocol",
14
+ "ReadProtocol",
15
+ "UpdateProtocol",
16
+ "DeleteProtocol",
17
+ "GetAllProtocol",
18
+ "GetByKeyProtocol",
19
+ "GetByNameProtocol",
20
+ "ReadSequenceByUserIdProtocol",
21
+ ]
@@ -0,0 +1,9 @@
1
+ from typing import (
2
+ Protocol, TypeVar,
3
+ )
4
+
5
+ T = TypeVar("T")
6
+
7
+
8
+ class CreateProtocol(Protocol[T]):
9
+ def create(self, entity: T) -> T: ...
@@ -0,0 +1,9 @@
1
+ from typing import (
2
+ Protocol, TypeVar,
3
+ )
4
+
5
+ T = TypeVar("T", contravariant=True)
6
+
7
+
8
+ class DeleteProtocol(Protocol[T]):
9
+ def delete(self, entity: T) -> None: ...
@@ -0,0 +1,9 @@
1
+ from typing import (
2
+ Protocol, TypeVar,
3
+ )
4
+
5
+ T = TypeVar("T")
6
+
7
+
8
+ class GetAllProtocol(Protocol[T]):
9
+ def get_all(self) -> list[T]: ...
@@ -0,0 +1,9 @@
1
+ from typing import (
2
+ Protocol, TypeVar,
3
+ )
4
+
5
+ T = TypeVar("T", covariant=True)
6
+
7
+
8
+ class GetByKeyProtocol(Protocol[T]):
9
+ def get_by_key(self, key: str) -> T: ...
@@ -0,0 +1,9 @@
1
+ from typing import (
2
+ Protocol, TypeVar,
3
+ )
4
+
5
+ T = TypeVar("T")
6
+
7
+
8
+ class GetByNameProtocol(Protocol[T]):
9
+ def get_by_name(self, name: str) -> list[T]: ...
@@ -0,0 +1,11 @@
1
+ from typing import (
2
+ Protocol,
3
+ TypeVar,
4
+ )
5
+
6
+ T = TypeVar("T", covariant=True)
7
+
8
+
9
+ class ReadProtocol(Protocol[T]):
10
+ def get_by_id(self, id: int) -> T: ...
11
+ def find_by_id(self, id: int) -> T | None: ...
@@ -0,0 +1,11 @@
1
+ from collections.abc import Sequence
2
+ from typing import (
3
+ Protocol,
4
+ TypeVar,
5
+ )
6
+
7
+ T = TypeVar("T", covariant=True)
8
+
9
+
10
+ class ReadSequenceByUserIdProtocol(Protocol[T]):
11
+ def get_by_user_id(self, user_id: int) -> Sequence[T]: ...
@@ -0,0 +1,9 @@
1
+ from typing import (
2
+ Protocol, TypeVar,
3
+ )
4
+
5
+ T = TypeVar("T")
6
+
7
+
8
+ class UpdateProtocol(Protocol[T]):
9
+ def update(self, entity: T) -> T: ...
@@ -0,0 +1,24 @@
1
+ from .bot_callback import BotCallback
2
+ from .bot_message import BotMessage, BotMessageUser
3
+ from .bot_user import BotUser
4
+ from .button import Button
5
+ from .keyboard import Keyboard
6
+ from .language_code import LanguageCode
7
+ from .parse_mode import ParseMode
8
+ from .role import Role
9
+ from .role_name import RoleName
10
+ from .user import User
11
+
12
+ __all__ = [
13
+ "BotCallback",
14
+ "BotMessage",
15
+ "BotMessageUser",
16
+ "BotUser",
17
+ "Button",
18
+ "Keyboard",
19
+ "LanguageCode",
20
+ "ParseMode",
21
+ "Role",
22
+ "RoleName",
23
+ "User",
24
+ ]
@@ -0,0 +1,21 @@
1
+ from typing import Any
2
+
3
+ from pydantic import BaseModel, ConfigDict, Field
4
+
5
+
6
+ class BotCallback(BaseModel):
7
+ model_config = ConfigDict(from_attributes=True)
8
+
9
+ id: str
10
+ user_id: int
11
+ data: str | None
12
+ message_id: int | None
13
+ message_chat_id: int | None
14
+ user_language_code: str | None = None
15
+ _original: Any = Field(default=None, exclude=True)
16
+
17
+ def get_original(self) -> Any:
18
+ return self._original
19
+
20
+ def set_original(self, original: Any) -> None:
21
+ self._original = original
@@ -0,0 +1,27 @@
1
+ from typing import Any
2
+
3
+ from pydantic import BaseModel, ConfigDict, Field
4
+
5
+
6
+ class BotMessageUser(BaseModel):
7
+ model_config = ConfigDict(from_attributes=True)
8
+
9
+ id: int
10
+ language_code: str | None = None
11
+
12
+
13
+ class BotMessage(BaseModel):
14
+ model_config = ConfigDict(from_attributes=True)
15
+
16
+ chat_id: int
17
+ message_id: int
18
+ user_id: int | None = None
19
+ text: str | None = None
20
+ from_user: BotMessageUser | None = None
21
+ _original: Any = Field(default=None, exclude=True)
22
+
23
+ def get_original(self) -> Any:
24
+ return self._original
25
+
26
+ def set_original(self, original: Any) -> None:
27
+ self._original = original
@@ -0,0 +1,22 @@
1
+ from typing import Any
2
+
3
+ from pydantic import BaseModel, ConfigDict, Field
4
+
5
+
6
+ class BotUser(BaseModel):
7
+ model_config = ConfigDict(from_attributes=True)
8
+
9
+ id: int
10
+ username: str | None
11
+ first_name: str | None
12
+ last_name: str | None
13
+ language_code: str
14
+ is_bot: bool
15
+ is_premium: bool
16
+ _original: Any = Field(default=None, exclude=True)
17
+
18
+ def get_original(self) -> Any:
19
+ return self._original
20
+
21
+ def set_original(self, original: Any) -> None:
22
+ self._original = original
@@ -0,0 +1,8 @@
1
+ from pydantic import BaseModel, ConfigDict
2
+
3
+
4
+ class Button(BaseModel):
5
+ model_config = ConfigDict(from_attributes=True)
6
+
7
+ text: str
8
+ callback_data: str
@@ -0,0 +1,9 @@
1
+ from pydantic import BaseModel, ConfigDict
2
+
3
+ from bot_framework.entities.button import Button
4
+
5
+
6
+ class Keyboard(BaseModel):
7
+ model_config = ConfigDict(from_attributes=True)
8
+
9
+ rows: list[list[Button]]
@@ -0,0 +1,8 @@
1
+ from enum import StrEnum
2
+
3
+
4
+ class LanguageCode(StrEnum):
5
+ EN = "en"
6
+ RU = "ru"
7
+ KZ = "kz"
8
+ KH = "kh"
@@ -0,0 +1,6 @@
1
+ from enum import StrEnum
2
+
3
+
4
+ class ParseMode(StrEnum):
5
+ HTML = "HTML"
6
+ MARKDOWN = "MarkdownV2"
@@ -0,0 +1,16 @@
1
+ from datetime import datetime
2
+
3
+ from pydantic import (
4
+ BaseModel, ConfigDict, Field,
5
+ )
6
+
7
+
8
+ class Role(BaseModel):
9
+ id: int = 0
10
+ name: str
11
+ description: str | None = None
12
+ is_active: bool = True
13
+ created_at: datetime = Field(default_factory=datetime.now)
14
+ updated_at: datetime = Field(default_factory=datetime.now)
15
+
16
+ model_config = ConfigDict(from_attributes=True)
@@ -0,0 +1,7 @@
1
+ from enum import Enum
2
+
3
+
4
+ class RoleName(str, Enum):
5
+ USER = "user"
6
+ ADMIN = "admin"
7
+ MODERATOR = "moderator"