arpakitlib 1.8.18__py3-none-any.whl → 1.8.20__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (315) hide show
  1. arpakitlib/_arpakit_project_template_v_5/arpakitlib_project_template_info.json +3 -0
  2. arpakitlib/_arpakit_project_template_v_5/command/alembic_revision_autogenerate.sh +2 -0
  3. arpakitlib/_arpakit_project_template_v_5/command/reinit_all_sqlalchemy_db.py +13 -0
  4. arpakitlib/{_arpakit_project_template_v_4/project/api/auth2.py → _arpakit_project_template_v_5/project/api/auth.py} +133 -26
  5. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/exception_handler.py +11 -12
  6. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/admin/get_arpakitlib_project_template_info.py +9 -3
  7. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/admin/get_auth_data.py +7 -9
  8. arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/main_router.py +20 -0
  9. arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/raise_fake_error.py +27 -0
  10. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/client/get_errors_info.py +8 -2
  11. arpakitlib/_arpakit_project_template_v_5/project/api/router/client/main_router.py +10 -0
  12. arpakitlib/_arpakit_project_template_v_5/project/api/router/general/main_router.py +14 -0
  13. arpakitlib/{_arpakit_project_template_v_4/project/api/router/client → _arpakit_project_template_v_5/project/api/router/general}/now_utc_datetime.py +3 -3
  14. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/out/admin/common.py +1 -1
  15. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/out/admin/operation.py +2 -2
  16. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/out/admin/story_log.py +2 -2
  17. arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/admin/user.py +22 -0
  18. arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/admin/user_token.py +14 -0
  19. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/out/client/common.py +1 -1
  20. arpakitlib/{_arpakit_project_template_v_4/project/api/schema/out/general → _arpakit_project_template_v_5/project/api/schema/out/common}/error.py +1 -1
  21. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/core/settings.py +3 -17
  22. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/operation_execution/operation_executor_worker.py +2 -2
  23. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sandbox/sandbox_1.py +3 -1
  24. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/sqlalchemy_model/api_key.py +1 -1
  25. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/sqlalchemy_model/user.py +2 -2
  26. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/sqlalchemy_model/user_token.py +1 -1
  27. arpakitlib/_arpakit_project_template_v_5/project/test_data/make_test_api_keys.py +35 -0
  28. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/test_data/make_test_data_1.py +4 -2
  29. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/test_data/make_test_data_2.py +4 -2
  30. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/test_data/make_test_data_3.py +4 -2
  31. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/test_data/make_test_data_4.py +4 -2
  32. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/test_data/make_test_data_5.py +4 -2
  33. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/blank/admin.py +2 -8
  34. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/blank/client.py +69 -0
  35. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/callback/client.py +4 -0
  36. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/const.py +7 -6
  37. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/filter_/user_roles_has_admin.py +18 -0
  38. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/filter_/user_roles_has_client.py +18 -0
  39. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/middleware/init_user.py +9 -8
  40. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/router/admin/arpakitlib_project_template_info.py +6 -4
  41. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/clear_log_file.py +33 -0
  42. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/drop_sqlalchemy_db.py +31 -0
  43. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/init_sqlalchemy_db.py +28 -0
  44. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/kb_with_not_modified.py +59 -0
  45. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/kb_with_old_cd.py +40 -0
  46. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/kb_with_raise_error.py +48 -0
  47. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/kb_with_remove_message.py +35 -0
  48. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/log_file.py +37 -0
  49. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/router/admin/me.py +4 -0
  50. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/router/admin/raise_fake_error.py +5 -1
  51. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/router/admin/reinit_sqlalchemy_db.py +7 -3
  52. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/set_tg_bot_commands.py +28 -0
  53. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/about.py +30 -0
  54. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/error_handler.py +91 -0
  55. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/router/client/healthcheck.py +3 -1
  56. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/router/client/hello_world.py +5 -2
  57. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/raw_callback_query.py +30 -0
  58. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/raw_inline_query.py +14 -0
  59. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/raw_message.py +15 -0
  60. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/remove_message.py +28 -0
  61. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/router/client/start.py +3 -2
  62. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/support.py +30 -0
  63. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/main_router.py +36 -0
  64. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/util/notify_admins.py +58 -0
  65. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/util/set_tg_bot_commands.py +26 -4
  66. arpakitlib/_arpakit_project_template_v_5/project/util/__init__.py +0 -0
  67. arpakitlib/ar_base_worker_util.py +7 -7
  68. arpakitlib/ar_blank_util.py +2 -2
  69. arpakitlib/ar_func_util.py +21 -14
  70. arpakitlib/ar_sqlalchemy_util.py +9 -3
  71. {arpakitlib-1.8.18.dist-info → arpakitlib-1.8.20.dist-info}/METADATA +1 -1
  72. arpakitlib-1.8.20.dist-info/RECORD +348 -0
  73. arpakitlib/_arpakit_project_template_v_4/arpakitlib_project_template_info.json +0 -3
  74. arpakitlib/_arpakit_project_template_v_4/command/alembic_revision_autogenerate.sh +0 -2
  75. arpakitlib/_arpakit_project_template_v_4/project/api/auth.py +0 -353
  76. arpakitlib/_arpakit_project_template_v_4/project/api/router/admin/main_router.py +0 -3
  77. arpakitlib/_arpakit_project_template_v_4/project/api/router/client/main_router.py +0 -3
  78. arpakitlib/_arpakit_project_template_v_4/project/api/router/general/main_router.py +0 -10
  79. arpakitlib/_arpakit_project_template_v_4/project/api/schema/out/common.py +0 -5
  80. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/blank/client.py +0 -44
  81. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/error_handler.py +0 -37
  82. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/filter_/user_roles_has_admin.py +0 -27
  83. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/filter_/user_roles_has_client.py +0 -27
  84. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/admin/main_router.py +0 -15
  85. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/client/main_router.py +0 -14
  86. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/main_router.py +0 -13
  87. arpakitlib-1.8.18.dist-info/RECORD +0 -330
  88. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/.gitignore +0 -0
  89. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/.python-version +0 -0
  90. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/LICENSE +0 -0
  91. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/README.md +0 -0
  92. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/alembic/README +0 -0
  93. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/alembic/env.py +0 -0
  94. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/alembic/script.py.mako +0 -0
  95. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/alembic/versions/__init__.py +0 -0
  96. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/alembic.ini +0 -0
  97. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/__init__.py +0 -0
  98. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/alembic_history.sh +0 -0
  99. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/alembic_upgrade_head.sh +0 -0
  100. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/beautify_json.py +0 -0
  101. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/check_logging.py +0 -0
  102. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/check_sqlalchemy_db.py +0 -0
  103. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/demojize.py +0 -0
  104. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/docker_ps_a.sh +0 -0
  105. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/docker_rm_postgres.sh +0 -0
  106. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/docker_run_postgres.sh +0 -0
  107. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/docker_start_postgres.sh +0 -0
  108. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/docker_stop_postgres.sh +0 -0
  109. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/drop_json_db.py +0 -0
  110. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/drop_sqlalchemy_db.py +0 -0
  111. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/generate_settings_env_example.py +0 -0
  112. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_commit.sh +0 -0
  113. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_push_arpakit_company_github_1.sh +0 -0
  114. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_push_arpakit_company_gitlab_1.sh +0 -0
  115. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_push_arpakit_github_1.sh +0 -0
  116. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_push_arpakit_gitlab_1.sh +0 -0
  117. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_remote_v.sh +0 -0
  118. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_set_arpakit_company_origin.sh +0 -0
  119. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_set_arpakit_origin.sh +0 -0
  120. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_set_divarteam_origin.sh +0 -0
  121. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_status.sh +0 -0
  122. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/hello_world.py +0 -0
  123. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/init_json_db.py +0 -0
  124. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/init_sqlalchemy_db.py +0 -0
  125. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_check.sh +0 -0
  126. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_clear_cache.sh +0 -0
  127. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_config.sh +0 -0
  128. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_install.sh +0 -0
  129. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_lock.sh +0 -0
  130. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_remove_and_add_arpakitlib.sh +0 -0
  131. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_show.sh +0 -0
  132. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_show_arpakitlib.sh +0 -0
  133. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_update.sh +0 -0
  134. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_update_arpakitlib.sh +0 -0
  135. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/reinit_json_db.py +0 -0
  136. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/reinit_sqlalchemy_db.py +0 -0
  137. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/remove_operations.py +0 -0
  138. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/remove_story_logs.py +0 -0
  139. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/rm_all_records_in_json_db.py +0 -0
  140. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/set_tg_bot_commands.py +0 -0
  141. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/show_settings.py +0 -0
  142. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_api.py +0 -0
  143. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_api_for_prod.py +0 -0
  144. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_api_with_reload.py +0 -0
  145. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_operation_executor_worker.py +0 -0
  146. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_operation_executor_workers.py +0 -0
  147. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_scheduled_operation_creator_worker.py +0 -0
  148. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_sqladmin.py +0 -0
  149. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_sqladmin_for_prod.py +0 -0
  150. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_sqladmin_with_reload.py +0 -0
  151. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_tg_bot.py +0 -0
  152. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_tg_bot_for_prod.py +0 -0
  153. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/example.env +0 -0
  154. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/note/note_1.txt +0 -0
  155. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/note/note_2.txt +0 -0
  156. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/note/note_3.txt +0 -0
  157. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/note/note_4.txt +0 -0
  158. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/note/note_5.txt +0 -0
  159. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/__init__.py +0 -0
  160. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/additional_model/__init__.py +0 -0
  161. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/additional_model/common.py +0 -0
  162. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/__init__.py +0 -0
  163. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/asgi.py +0 -0
  164. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/const.py +0 -0
  165. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/create_api_app.py +0 -0
  166. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/event.py +0 -0
  167. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/exception.py +1 -1
  168. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/openapi_ui.py +0 -0
  169. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/response.py +0 -0
  170. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/__init__.py +0 -0
  171. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/admin/__init__.py +0 -0
  172. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/client/__init__.py +0 -0
  173. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/general/__init__.py +0 -0
  174. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/general/healthcheck.py +1 -1
  175. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/main_router.py +0 -0
  176. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/__init__.py +0 -0
  177. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/common.py +0 -0
  178. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/in_/__init__.py +0 -0
  179. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/in_/admin/__init__.py +0 -0
  180. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/in_/admin/common.py +0 -0
  181. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/in_/client/__init__.py +0 -0
  182. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/in_/client/common.py +0 -0
  183. /arpakitlib/{_arpakit_project_template_v_4/project/api/schema/in_/general → _arpakit_project_template_v_5/project/api/schema/in_/common}/__init__.py +0 -0
  184. /arpakitlib/{_arpakit_project_template_v_4/project/api/schema/out → _arpakit_project_template_v_5/project/api/schema/in_/general}/__init__.py +0 -0
  185. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/in_/general/common.py +0 -0
  186. /arpakitlib/{_arpakit_project_template_v_4/project/api/schema/out/admin → _arpakit_project_template_v_5/project/api/schema/out}/__init__.py +0 -0
  187. /arpakitlib/{_arpakit_project_template_v_4/project/api/schema/out/client → _arpakit_project_template_v_5/project/api/schema/out/admin}/__init__.py +0 -0
  188. /arpakitlib/{_arpakit_project_template_v_4/project/api/schema/out/common → _arpakit_project_template_v_5/project/api/schema/out/client}/__init__.py +0 -0
  189. /arpakitlib/{_arpakit_project_template_v_4/project/api/schema/out/general → _arpakit_project_template_v_5/project/api/schema/out/common}/__init__.py +0 -0
  190. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/out/common/datetime_.py +0 -0
  191. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/out/common/raw_data.py +0 -0
  192. /arpakitlib/{_arpakit_project_template_v_4/project/business_service → _arpakit_project_template_v_5/project/api/schema/out/general}/__init__.py +0 -0
  193. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/out/general/common.py +0 -0
  194. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/out/general/errors_info_general.py +0 -0
  195. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/out/general/healthcheck.py +0 -0
  196. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/util.py +0 -0
  197. /arpakitlib/{_arpakit_project_template_v_4/project/celery_ → _arpakit_project_template_v_5/project/business_service}/__init__.py +0 -0
  198. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/business_service/hello_world.py +0 -0
  199. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/business_service/remove_operations.py +0 -0
  200. /arpakitlib/{_arpakit_project_template_v_4/project/core → _arpakit_project_template_v_5/project/celery_}/__init__.py +0 -0
  201. /arpakitlib/{_arpakit_project_template_v_4/project/json_db → _arpakit_project_template_v_5/project/core}/__init__.py +0 -0
  202. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/core/cache_file_storage_in_dir.py +0 -0
  203. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/core/const.py +0 -0
  204. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/core/dump_file_storage_in_dir.py +0 -0
  205. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/core/jinja2_templates.py +0 -0
  206. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/core/media_file_storage_in_dir.py +0 -0
  207. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/core/util.py +0 -0
  208. /arpakitlib/{_arpakit_project_template_v_4/project/operation_execution → _arpakit_project_template_v_5/project/json_db}/__init__.py +0 -0
  209. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/json_db/json_db.py +0 -0
  210. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/more/helloworld +0 -0
  211. /arpakitlib/{_arpakit_project_template_v_4/project/resource → _arpakit_project_template_v_5/project/operation_execution}/__init__.py +0 -0
  212. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/operation_execution/const.py +0 -0
  213. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/operation_execution/scheduled_operation_creator_worker.py +0 -0
  214. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/operation_execution/scheduled_operations.py +0 -0
  215. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/operation_execution/util.py +0 -0
  216. /arpakitlib/{_arpakit_project_template_v_4/project/sandbox → _arpakit_project_template_v_5/project/resource}/__init__.py +0 -0
  217. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/1 +0 -0
  218. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/healthcheck +0 -0
  219. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/helloworld +0 -0
  220. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/openapi-favicon.png +0 -0
  221. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/redoc/redoc.standalone.js +0 -0
  222. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/favicon-16x16.png +0 -0
  223. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/favicon-32x32.png +0 -0
  224. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/index.css +0 -0
  225. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/index.html +0 -0
  226. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/oauth2-redirect.html +0 -0
  227. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-initializer.js +0 -0
  228. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui-bundle.js +0 -0
  229. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui-bundle.js.map +0 -0
  230. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui-es-bundle-core.js +0 -0
  231. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui-es-bundle-core.js.map +0 -0
  232. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui-es-bundle.js +0 -0
  233. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui-es-bundle.js.map +0 -0
  234. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui-standalone-preset.js +0 -0
  235. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui-standalone-preset.js.map +0 -0
  236. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui.css +0 -0
  237. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui.css.map +0 -0
  238. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui.js +0 -0
  239. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui.js.map +0 -0
  240. /arpakitlib/{_arpakit_project_template_v_4/project/site → _arpakit_project_template_v_5/project/sandbox}/__init__.py +0 -0
  241. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sandbox/sandbox_2.py +0 -0
  242. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sandbox/sandbox_3.py +0 -0
  243. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sandbox/sandbox_4.py +0 -0
  244. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sandbox/sandbox_5.py +0 -0
  245. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sandbox/sandbox_6.py +0 -0
  246. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sandbox/sandbox_7.py +0 -0
  247. /arpakitlib/{_arpakit_project_template_v_4/project/site/router → _arpakit_project_template_v_5/project/site}/__init__.py +0 -0
  248. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/site/asgi.py +0 -0
  249. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/site/consts.py +0 -0
  250. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/site/create_site_app.py +0 -0
  251. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/site/event.py +0 -0
  252. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/site/exception_handler.py +0 -0
  253. /arpakitlib/{_arpakit_project_template_v_4/project/sqladmin_ → _arpakit_project_template_v_5/project/site/router}/__init__.py +0 -0
  254. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/site/router/main_router.py +0 -0
  255. /arpakitlib/{_arpakit_project_template_v_4/project/sqlalchemy_db_ → _arpakit_project_template_v_5/project/sqladmin_}/__init__.py +0 -0
  256. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqladmin_/add_admin_in_app.py +0 -0
  257. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqladmin_/admin_auth.py +0 -0
  258. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqladmin_/asgi.py +0 -0
  259. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqladmin_/create_sqladmin_app.py +0 -0
  260. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqladmin_/event.py +0 -0
  261. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqladmin_/model_view/__init__.py +0 -0
  262. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqladmin_/model_view/common.py +0 -0
  263. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqladmin_/model_view/operation.py +0 -0
  264. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqladmin_/model_view/story_log.py +0 -0
  265. /arpakitlib/{_arpakit_project_template_v_4/project/test_data → _arpakit_project_template_v_5/project/sqlalchemy_db_}/__init__.py +0 -0
  266. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/const.py +0 -0
  267. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/sqlalchemy_db.py +0 -0
  268. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/sqlalchemy_model/__init__.py +0 -0
  269. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/sqlalchemy_model/common.py +0 -0
  270. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/sqlalchemy_model/operation.py +0 -0
  271. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/sqlalchemy_model/story_log.py +0 -0
  272. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/util.py +0 -0
  273. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot → _arpakit_project_template_v_5/project/test_data}/__init__.py +0 -0
  274. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/blank → _arpakit_project_template_v_5/project/tg_bot}/__init__.py +0 -0
  275. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/callback → _arpakit_project_template_v_5/project/tg_bot/blank}/__init__.py +0 -0
  276. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/blank/common.py +0 -0
  277. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/filter_ → _arpakit_project_template_v_5/project/tg_bot/callback}/__init__.py +0 -0
  278. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/callback/admin.py +0 -0
  279. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/callback/common.py +0 -0
  280. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/event.py +0 -0
  281. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/kb → _arpakit_project_template_v_5/project/tg_bot/filter_}/__init__.py +0 -0
  282. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/filter_/is_private_chat.py +0 -0
  283. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/filter_/message_text.py +0 -0
  284. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/filter_/not_prod_mode_filter.py +0 -0
  285. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/filter_/prod_mode_filter.py +0 -0
  286. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/kb/inline_ → _arpakit_project_template_v_5/project/tg_bot/kb}/__init__.py +0 -0
  287. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/kb/inline_/admin → _arpakit_project_template_v_5/project/tg_bot/kb/inline_}/__init__.py +0 -0
  288. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/kb/inline_/client → _arpakit_project_template_v_5/project/tg_bot/kb/inline_/admin}/__init__.py +0 -0
  289. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/kb/inline_/admin/common.py +0 -0
  290. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/kb/static_ → _arpakit_project_template_v_5/project/tg_bot/kb/inline_/client}/__init__.py +0 -0
  291. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/kb/inline_/client/common.py +0 -0
  292. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/kb/inline_/client/hello_world.py +0 -0
  293. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/kb/inline_/common.py +0 -0
  294. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/kb/static_/admin → _arpakit_project_template_v_5/project/tg_bot/kb/static_}/__init__.py +0 -0
  295. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/kb/static_/client → _arpakit_project_template_v_5/project/tg_bot/kb/static_/admin}/__init__.py +0 -0
  296. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/kb/static_/admin/common.py +0 -0
  297. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/middleware → _arpakit_project_template_v_5/project/tg_bot/kb/static_/client}/__init__.py +0 -0
  298. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/kb/static_/client/common.py +0 -0
  299. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/kb/static_/client/hello_world.py +0 -0
  300. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/kb/static_/common.py +0 -0
  301. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/router → _arpakit_project_template_v_5/project/tg_bot/middleware}/__init__.py +0 -0
  302. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/middleware/common.py +0 -0
  303. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/middleware/middleware.py +0 -0
  304. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/router/admin → _arpakit_project_template_v_5/project/tg_bot/router}/__init__.py +0 -0
  305. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/router/client → _arpakit_project_template_v_5/project/tg_bot/router/admin}/__init__.py +0 -0
  306. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/util → _arpakit_project_template_v_5/project/tg_bot/router/client}/__init__.py +0 -0
  307. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/start_tg_bot.py +0 -0
  308. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/tg_bot.py +0 -0
  309. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/tg_bot_dispatcher.py +0 -0
  310. /arpakitlib/{_arpakit_project_template_v_4/project → _arpakit_project_template_v_5/project/tg_bot}/util/__init__.py +0 -0
  311. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/util/etc.py +0 -0
  312. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/util/arpakitlib_project_template.py +0 -0
  313. {arpakitlib-1.8.18.dist-info → arpakitlib-1.8.20.dist-info}/LICENSE +0 -0
  314. {arpakitlib-1.8.18.dist-info → arpakitlib-1.8.20.dist-info}/WHEEL +0 -0
  315. {arpakitlib-1.8.18.dist-info → arpakitlib-1.8.20.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,48 @@
1
+ import aiogram.filters
2
+ from aiogram.types import InlineKeyboardButton
3
+ from aiogram.utils.keyboard import InlineKeyboardBuilder
4
+
5
+ from arpakitlib.ar_aiogram_util import as_tg_command
6
+ from project.tg_bot.blank.admin import get_cached_admin_tg_bot_blank
7
+ from project.tg_bot.callback.common import BaseCD
8
+ from project.tg_bot.const import AdminTgBotCommands
9
+ from project.tg_bot.filter_.is_private_chat import IsPrivateChatTgBotFilter
10
+ from project.tg_bot.filter_.user_roles_has_admin import UserRolesHasAdminTgBotFilter
11
+ from project.tg_bot.middleware.common import MiddlewareDataTgBot
12
+
13
+ tg_bot_router = aiogram.Router()
14
+
15
+
16
+ class _CD(BaseCD, prefix=AdminTgBotCommands.kb_with_raise_error):
17
+ pass
18
+
19
+
20
+ @tg_bot_router.message(
21
+ IsPrivateChatTgBotFilter(),
22
+ UserRolesHasAdminTgBotFilter(),
23
+ aiogram.filters.Command(AdminTgBotCommands.kb_with_raise_error)
24
+ )
25
+ @as_tg_command()
26
+ async def _(
27
+ m: aiogram.types.Message,
28
+ middleware_data_tg_bot: MiddlewareDataTgBot,
29
+ **kwargs
30
+ ):
31
+ kb_builder = InlineKeyboardBuilder()
32
+ kb_builder.row(InlineKeyboardButton(
33
+ text="Raise fake error",
34
+ callback_data=_CD().pack()
35
+ ))
36
+ await m.answer(
37
+ text=get_cached_admin_tg_bot_blank().good(),
38
+ reply_markup=kb_builder.as_markup()
39
+ )
40
+
41
+
42
+ @tg_bot_router.callback_query(_CD.filter())
43
+ async def _(
44
+ m: aiogram.types.Message,
45
+ middleware_data_tg_bot: MiddlewareDataTgBot,
46
+ **kwargs
47
+ ):
48
+ raise Exception("fake error")
@@ -0,0 +1,35 @@
1
+ import aiogram.filters
2
+ from aiogram.types import InlineKeyboardButton
3
+ from aiogram.utils.keyboard import InlineKeyboardBuilder
4
+
5
+ from arpakitlib.ar_aiogram_util import as_tg_command
6
+ from project.tg_bot.blank.admin import get_cached_admin_tg_bot_blank
7
+ from project.tg_bot.callback.client import RemoveMessageCD
8
+ from project.tg_bot.const import AdminTgBotCommands
9
+ from project.tg_bot.filter_.is_private_chat import IsPrivateChatTgBotFilter
10
+ from project.tg_bot.filter_.user_roles_has_admin import UserRolesHasAdminTgBotFilter
11
+ from project.tg_bot.middleware.common import MiddlewareDataTgBot
12
+
13
+ tg_bot_router = aiogram.Router()
14
+
15
+
16
+ @tg_bot_router.message(
17
+ IsPrivateChatTgBotFilter(),
18
+ UserRolesHasAdminTgBotFilter(),
19
+ aiogram.filters.Command(AdminTgBotCommands.kb_with_remove_message)
20
+ )
21
+ @as_tg_command()
22
+ async def _(
23
+ m: aiogram.types.Message,
24
+ middleware_data_tg_bot: MiddlewareDataTgBot,
25
+ **kwargs
26
+ ):
27
+ kb_builder = InlineKeyboardBuilder()
28
+ kb_builder.row(InlineKeyboardButton(
29
+ text="Remove",
30
+ callback_data=RemoveMessageCD().pack()
31
+ ))
32
+ await m.answer(
33
+ text=get_cached_admin_tg_bot_blank().good(),
34
+ reply_markup=kb_builder.as_markup()
35
+ )
@@ -0,0 +1,37 @@
1
+ import os
2
+
3
+ import aiogram
4
+ from aiogram import Router, types
5
+ from aiogram.filters import Command
6
+ from aiogram.types import FSInputFile
7
+
8
+ from arpakitlib.ar_aiogram_util import as_tg_command
9
+ from project.core.settings import get_cached_settings
10
+ from project.tg_bot.const import AdminTgBotCommands
11
+ from project.tg_bot.filter_.is_private_chat import IsPrivateChatTgBotFilter
12
+ from project.tg_bot.filter_.user_roles_has_admin import UserRolesHasAdminTgBotFilter
13
+
14
+ tg_bot_router = Router()
15
+
16
+
17
+ @tg_bot_router.message(
18
+ IsPrivateChatTgBotFilter(),
19
+ UserRolesHasAdminTgBotFilter(),
20
+ aiogram.filters.Command(AdminTgBotCommands.log_file),
21
+ )
22
+ @as_tg_command(passwd_validator=get_cached_settings().tg_bot_command_passwd)
23
+ async def _(
24
+ m: types.Message,
25
+ **kwargs
26
+ ):
27
+ with open(get_cached_settings().log_filepath, mode="r") as f:
28
+ if not f.read():
29
+ await m.answer("log файл пустой")
30
+ return
31
+
32
+ await m.answer_document(
33
+ document=FSInputFile(
34
+ path=get_cached_settings().log_filepath,
35
+ filename=os.path.basename(get_cached_settings().log_filepath)
36
+ )
37
+ )
@@ -3,12 +3,16 @@ import aiogram.filters
3
3
  from arpakitlib.ar_aiogram_util import as_tg_command
4
4
  from project.tg_bot.blank.admin import get_cached_admin_tg_bot_blank
5
5
  from project.tg_bot.const import AdminTgBotCommands
6
+ from project.tg_bot.filter_.is_private_chat import IsPrivateChatTgBotFilter
7
+ from project.tg_bot.filter_.user_roles_has_admin import UserRolesHasAdminTgBotFilter
6
8
  from project.tg_bot.middleware.common import MiddlewareDataTgBot
7
9
 
8
10
  tg_bot_router = aiogram.Router()
9
11
 
10
12
 
11
13
  @tg_bot_router.message(
14
+ IsPrivateChatTgBotFilter(),
15
+ UserRolesHasAdminTgBotFilter(),
12
16
  aiogram.filters.Command(AdminTgBotCommands.me)
13
17
  )
14
18
  @as_tg_command()
@@ -3,13 +3,17 @@ import aiogram.filters
3
3
  from arpakitlib.ar_aiogram_util import as_tg_command
4
4
  from project.core.settings import get_cached_settings
5
5
  from project.tg_bot.const import AdminTgBotCommands
6
+ from project.tg_bot.filter_.is_private_chat import IsPrivateChatTgBotFilter
7
+ from project.tg_bot.filter_.user_roles_has_admin import UserRolesHasAdminTgBotFilter
6
8
  from project.tg_bot.middleware.common import MiddlewareDataTgBot
7
9
 
8
10
  tg_bot_router = aiogram.Router()
9
11
 
10
12
 
11
13
  @tg_bot_router.message(
12
- aiogram.filters.Command(AdminTgBotCommands.raise_fake_err)
14
+ IsPrivateChatTgBotFilter(),
15
+ UserRolesHasAdminTgBotFilter(),
16
+ aiogram.filters.Command(AdminTgBotCommands.raise_fake_error)
13
17
  )
14
18
  @as_tg_command(passwd_validator=get_cached_settings().tg_bot_command_passwd)
15
19
  async def _(
@@ -7,21 +7,25 @@ from project.core.settings import get_cached_settings
7
7
  from project.sqlalchemy_db_.sqlalchemy_db import get_cached_sqlalchemy_db
8
8
  from project.tg_bot.blank.admin import get_cached_admin_tg_bot_blank
9
9
  from project.tg_bot.const import AdminTgBotCommands
10
+ from project.tg_bot.filter_.is_private_chat import IsPrivateChatTgBotFilter
10
11
  from project.tg_bot.filter_.not_prod_mode_filter import NotProdModeTgBotFilter
12
+ from project.tg_bot.filter_.user_roles_has_admin import UserRolesHasAdminTgBotFilter
11
13
  from project.tg_bot.middleware.common import MiddlewareDataTgBot
12
14
 
13
15
  tg_bot_router = Router()
14
16
 
15
17
 
16
18
  @tg_bot_router.message(
19
+ IsPrivateChatTgBotFilter(),
20
+ UserRolesHasAdminTgBotFilter(),
21
+ NotProdModeTgBotFilter(),
17
22
  Command(AdminTgBotCommands.reinit_sqlalchemy_db),
18
- NotProdModeTgBotFilter()
19
23
  )
20
24
  @as_tg_command(passwd_validator=get_cached_settings().tg_bot_command_passwd)
21
- async def handler(
25
+ async def _(
22
26
  m: aiogram.types.Message,
23
27
  middleware_data_tg_bot: MiddlewareDataTgBot,
24
28
  **kwargs
25
29
  ):
26
30
  get_cached_sqlalchemy_db().reinit()
27
- await m.answer(text=get_cached_admin_tg_bot_blank().done())
31
+ await m.answer(text=get_cached_admin_tg_bot_blank().good())
@@ -0,0 +1,28 @@
1
+ import aiogram
2
+ from aiogram import Router
3
+ from aiogram.filters import Command
4
+
5
+ from arpakitlib.ar_aiogram_util import as_tg_command
6
+ from project.tg_bot.blank.admin import get_cached_admin_tg_bot_blank
7
+ from project.tg_bot.const import AdminTgBotCommands
8
+ from project.tg_bot.filter_.is_private_chat import IsPrivateChatTgBotFilter
9
+ from project.tg_bot.filter_.user_roles_has_admin import UserRolesHasAdminTgBotFilter
10
+ from project.tg_bot.middleware.common import MiddlewareDataTgBot
11
+ from project.tg_bot.util.set_tg_bot_commands import set_all_tg_bot_commands
12
+
13
+ tg_bot_router = Router()
14
+
15
+
16
+ @tg_bot_router.message(
17
+ IsPrivateChatTgBotFilter(),
18
+ UserRolesHasAdminTgBotFilter(),
19
+ aiogram.filters.Command(AdminTgBotCommands.set_all_tg_bot_commands)
20
+ )
21
+ @as_tg_command()
22
+ async def _(
23
+ m: aiogram.types.Message,
24
+ middleware_data_tg_bot: MiddlewareDataTgBot,
25
+ **kwargs
26
+ ):
27
+ await set_all_tg_bot_commands()
28
+ await m.answer(get_cached_admin_tg_bot_blank().good())
@@ -0,0 +1,30 @@
1
+ import logging
2
+
3
+ import aiogram
4
+ from aiogram import Router
5
+ from aiogram.filters import Command, or_f
6
+
7
+ from project.tg_bot.blank.client import get_cached_client_tg_bot_blank
8
+ from project.tg_bot.const import ClientTgBotCommands
9
+ from project.tg_bot.filter_.message_text import MessageTextTgBotFilter
10
+ from project.tg_bot.middleware.common import MiddlewareDataTgBot
11
+
12
+ tg_bot_router = Router()
13
+ _logger = logging.getLogger(__name__)
14
+
15
+
16
+ @tg_bot_router.message(
17
+ or_f(
18
+ Command(ClientTgBotCommands.about),
19
+ MessageTextTgBotFilter([
20
+ ClientTgBotCommands.about,
21
+ "о проекте"
22
+ ], ignore_case=True)
23
+ ),
24
+ )
25
+ async def _(
26
+ m: aiogram.types.Message,
27
+ middleware_data_tg_bot: MiddlewareDataTgBot,
28
+ **kwargs
29
+ ):
30
+ await m.answer(text=get_cached_client_tg_bot_blank().about_project())
@@ -0,0 +1,91 @@
1
+ import logging
2
+
3
+ import aiogram
4
+ from aiogram import Router
5
+ from aiogram.exceptions import TelegramBadRequest
6
+
7
+ from arpakitlib.ar_exception_util import exception_to_traceback_str
8
+ from project.sqlalchemy_db_.sqlalchemy_db import get_cached_sqlalchemy_db
9
+ from project.sqlalchemy_db_.sqlalchemy_model import StoryLogDBM
10
+ from project.tg_bot.blank.client import get_cached_client_tg_bot_blank
11
+ from project.tg_bot.middleware.common import MiddlewareDataTgBot
12
+
13
+ _logger = logging.getLogger(__name__)
14
+
15
+ tg_bot_router = Router()
16
+
17
+
18
+ @tg_bot_router.error()
19
+ async def _(
20
+ error_event: aiogram.types.ErrorEvent,
21
+ middleware_data_tg_bot: MiddlewareDataTgBot,
22
+ **kwargs
23
+ ):
24
+ need_logging = True
25
+ need_create_story_log = True
26
+
27
+ if (
28
+ error_event.update.event_type == "message"
29
+ and isinstance(error_event.update.event, aiogram.types.Message)
30
+ ):
31
+ try:
32
+ await error_event.update.event.answer(
33
+ text=get_cached_client_tg_bot_blank().error()
34
+ )
35
+ except Exception as exception:
36
+ _logger.error(exception)
37
+
38
+ if (
39
+ error_event.update.event_type == "callback_query"
40
+ and isinstance(error_event.update.event, aiogram.types.CallbackQuery)
41
+ ):
42
+
43
+ if isinstance(error_event.exception, TelegramBadRequest) and (
44
+ error_event.exception.message
45
+ and "message is not modified".lower().strip() in error_event.exception.message.lower().strip()
46
+ ):
47
+ error_linked_with_message_not_modified = True
48
+ else:
49
+ error_linked_with_message_not_modified = False
50
+
51
+ if error_linked_with_message_not_modified:
52
+ need_logging = False
53
+ need_create_story_log = False
54
+
55
+ try:
56
+ await error_event.update.event.answer()
57
+ except Exception as exception:
58
+ _logger.error(exception)
59
+
60
+ if not error_linked_with_message_not_modified:
61
+
62
+ try:
63
+ await error_event.update.event.message.edit_reply_markup(reply_markup=None)
64
+ except Exception as exception:
65
+ _logger.error(exception)
66
+
67
+ try:
68
+ await error_event.update.event.message.answer(
69
+ text=get_cached_client_tg_bot_blank().error()
70
+ )
71
+ except Exception as exception:
72
+ _logger.error(exception)
73
+
74
+ if need_logging:
75
+ _logger.exception(error_event.exception)
76
+
77
+ if need_create_story_log:
78
+ if get_cached_sqlalchemy_db() is not None:
79
+ async with get_cached_sqlalchemy_db().new_async_session() as session:
80
+ story_log_dbm = StoryLogDBM(
81
+ level=StoryLogDBM.Levels.error,
82
+ type=StoryLogDBM.Types.error_in_tg_bot,
83
+ title=f"{type(error_event.exception)}",
84
+ data={
85
+ "exception": str(error_event.exception),
86
+ "exception_traceback": exception_to_traceback_str(exception=error_event.exception)
87
+ }
88
+ )
89
+ session.add(story_log_dbm)
90
+ await session.commit()
91
+ await session.refresh(story_log_dbm)
@@ -7,7 +7,9 @@ from project.tg_bot.middleware.common import MiddlewareDataTgBot
7
7
  tg_bot_router = aiogram.Router()
8
8
 
9
9
 
10
- @tg_bot_router.message(aiogram.filters.Command(ClientTgBotCommands.healthcheck))
10
+ @tg_bot_router.message(
11
+ aiogram.filters.Command(ClientTgBotCommands.healthcheck),
12
+ )
11
13
  async def _(
12
14
  m: aiogram.types.Message,
13
15
  middleware_data_tg_bot: MiddlewareDataTgBot,
@@ -17,7 +17,8 @@ tg_bot_router = aiogram.Router()
17
17
  or_f(
18
18
  aiogram.filters.Command(ClientTgBotCommands.hello_world),
19
19
  MessageTextTgBotFilter(get_cached_client_tg_bot_blank().but_hello_world())
20
- )
20
+ ),
21
+
21
22
  )
22
23
  async def _(
23
24
  m: aiogram.types.Message,
@@ -34,7 +35,9 @@ async def _(
34
35
  )
35
36
 
36
37
 
37
- @tg_bot_router.callback_query(HelloWorldClientCD.filter())
38
+ @tg_bot_router.callback_query(
39
+ HelloWorldClientCD.filter()
40
+ )
38
41
  async def _(
39
42
  cq: aiogram.types.CallbackQuery,
40
43
  middleware_data_tg_bot: MiddlewareDataTgBot,
@@ -0,0 +1,30 @@
1
+ import logging
2
+
3
+ import aiogram.filters
4
+ from aiogram.exceptions import AiogramError
5
+
6
+ from project.tg_bot.blank.client import get_cached_client_tg_bot_blank
7
+ from project.tg_bot.middleware.common import MiddlewareDataTgBot
8
+
9
+ _logger = logging.getLogger(__name__)
10
+ tg_bot_router = aiogram.Router()
11
+
12
+
13
+ @tg_bot_router.callback_query()
14
+ async def _(
15
+ cq: aiogram.types.CallbackQuery,
16
+ middleware_data_tg_bot: MiddlewareDataTgBot,
17
+ **kwargs
18
+ ):
19
+ try:
20
+ await cq.answer(
21
+ text=get_cached_client_tg_bot_blank().keyboard_is_old(),
22
+ show_alert=True
23
+ )
24
+ except AiogramError as exception:
25
+ _logger.error(exception)
26
+
27
+ try:
28
+ await cq.message.edit_reply_markup(reply_markup=None)
29
+ except AiogramError as e:
30
+ _logger.error(e)
@@ -0,0 +1,14 @@
1
+ import aiogram.filters
2
+
3
+ from project.tg_bot.middleware.common import MiddlewareDataTgBot
4
+
5
+ tg_bot_router = aiogram.Router()
6
+
7
+
8
+ @tg_bot_router.inline_query()
9
+ async def _(
10
+ iq: aiogram.types.InlineQuery,
11
+ middleware_data_tg_bot: MiddlewareDataTgBot,
12
+ **kwargs
13
+ ):
14
+ pass
@@ -0,0 +1,15 @@
1
+ import aiogram.filters
2
+
3
+ from project.tg_bot.blank.client import get_cached_client_tg_bot_blank
4
+ from project.tg_bot.middleware.common import MiddlewareDataTgBot
5
+
6
+ tg_bot_router = aiogram.Router()
7
+
8
+
9
+ @tg_bot_router.message()
10
+ async def _(
11
+ m: aiogram.types.Message,
12
+ middleware_data_tg_bot: MiddlewareDataTgBot,
13
+ **kwargs
14
+ ):
15
+ await m.answer(text=get_cached_client_tg_bot_blank().raw_message())
@@ -0,0 +1,28 @@
1
+ import logging
2
+
3
+ from aiogram import Router, types
4
+ from aiogram.exceptions import AiogramError
5
+
6
+ from project.tg_bot.callback.client import RemoveMessageCD
7
+ from project.tg_bot.middleware.common import MiddlewareDataTgBot
8
+
9
+ _logger = logging.getLogger(__name__)
10
+ tg_bot_router = Router()
11
+
12
+
13
+ @tg_bot_router.callback_query(
14
+ RemoveMessageCD.filter(),
15
+ )
16
+ async def _(
17
+ cq: types.CallbackQuery,
18
+ middleware_data_tg_bot: MiddlewareDataTgBot,
19
+ **kwargs
20
+ ):
21
+ try:
22
+ await cq.message.delete()
23
+ except AiogramError as exception:
24
+ _logger.error(exception)
25
+ try:
26
+ await cq.answer()
27
+ except AiogramError as exception:
28
+ _logger.error(exception)
@@ -17,13 +17,14 @@ _logger = logging.getLogger(__name__)
17
17
  or_f(
18
18
  Command(ClientTgBotCommands.start),
19
19
  MessageTextTgBotFilter([
20
+ ClientTgBotCommands.start,
20
21
  "начать",
21
22
  "старт",
22
23
  "привет",
23
24
  "запуск",
24
- "start",
25
25
  ], ignore_case=True)
26
- )
26
+ ),
27
+
27
28
  )
28
29
  async def _(
29
30
  m: aiogram.types.Message,
@@ -0,0 +1,30 @@
1
+ import logging
2
+
3
+ import aiogram
4
+ from aiogram import Router
5
+ from aiogram.filters import Command, or_f
6
+
7
+ from project.tg_bot.blank.client import get_cached_client_tg_bot_blank
8
+ from project.tg_bot.const import ClientTgBotCommands
9
+ from project.tg_bot.filter_.message_text import MessageTextTgBotFilter
10
+ from project.tg_bot.middleware.common import MiddlewareDataTgBot
11
+
12
+ tg_bot_router = Router()
13
+ _logger = logging.getLogger(__name__)
14
+
15
+
16
+ @tg_bot_router.message(
17
+ or_f(
18
+ Command(ClientTgBotCommands.support),
19
+ MessageTextTgBotFilter([
20
+ ClientTgBotCommands.support,
21
+ "поддержка"
22
+ ], ignore_case=True)
23
+ )
24
+ )
25
+ async def _(
26
+ m: aiogram.types.Message,
27
+ middleware_data_tg_bot: MiddlewareDataTgBot,
28
+ **kwargs
29
+ ):
30
+ await m.answer(text=get_cached_client_tg_bot_blank().support_info())
@@ -0,0 +1,36 @@
1
+ from aiogram import Router
2
+
3
+ from project.tg_bot.router.admin import reinit_sqlalchemy_db, arpakitlib_project_template_info, raise_fake_error, me, \
4
+ log_file, clear_log_file, set_tg_bot_commands, init_sqlalchemy_db, drop_sqlalchemy_db, kb_with_remove_message, \
5
+ kb_with_old_cd, kb_with_raise_error, kb_with_not_modified
6
+ from project.tg_bot.router.client import remove_message, start, about, healthcheck, hello_world, \
7
+ support, error_handler, raw_callback_query, raw_message, raw_inline_query
8
+
9
+ main_tg_bot_router = Router()
10
+
11
+ # admin
12
+ main_tg_bot_router.include_router(router=reinit_sqlalchemy_db.tg_bot_router)
13
+ main_tg_bot_router.include_router(router=arpakitlib_project_template_info.tg_bot_router)
14
+ main_tg_bot_router.include_router(router=raise_fake_error.tg_bot_router)
15
+ main_tg_bot_router.include_router(router=me.tg_bot_router)
16
+ main_tg_bot_router.include_router(router=log_file.tg_bot_router)
17
+ main_tg_bot_router.include_router(router=clear_log_file.tg_bot_router)
18
+ main_tg_bot_router.include_router(router=set_tg_bot_commands.tg_bot_router)
19
+ main_tg_bot_router.include_router(router=init_sqlalchemy_db.tg_bot_router)
20
+ main_tg_bot_router.include_router(router=drop_sqlalchemy_db.tg_bot_router)
21
+ main_tg_bot_router.include_router(router=kb_with_remove_message.tg_bot_router)
22
+ main_tg_bot_router.include_router(router=kb_with_old_cd.tg_bot_router)
23
+ main_tg_bot_router.include_router(router=kb_with_raise_error.tg_bot_router)
24
+ main_tg_bot_router.include_router(router=kb_with_not_modified.tg_bot_router)
25
+
26
+ # client
27
+ main_tg_bot_router.include_router(router=error_handler.tg_bot_router)
28
+ main_tg_bot_router.include_router(router=remove_message.tg_bot_router)
29
+ main_tg_bot_router.include_router(router=start.tg_bot_router)
30
+ main_tg_bot_router.include_router(router=about.tg_bot_router)
31
+ main_tg_bot_router.include_router(router=healthcheck.tg_bot_router)
32
+ main_tg_bot_router.include_router(router=hello_world.tg_bot_router)
33
+ main_tg_bot_router.include_router(router=support.tg_bot_router)
34
+ main_tg_bot_router.include_router(router=raw_message.tg_bot_router)
35
+ main_tg_bot_router.include_router(router=raw_inline_query.tg_bot_router)
36
+ main_tg_bot_router.include_router(router=raw_callback_query.tg_bot_router)
@@ -0,0 +1,58 @@
1
+ import asyncio
2
+ import logging
3
+
4
+ import sqlalchemy
5
+ from aiogram.exceptions import AiogramError
6
+ from emoji import emojize
7
+
8
+ from arpakitlib.ar_str_util import remove_tags_and_html
9
+ from project.core.settings import get_cached_settings
10
+ from project.core.util import setup_logging
11
+ from project.sqlalchemy_db_.sqlalchemy_db import get_cached_sqlalchemy_db
12
+ from project.sqlalchemy_db_.sqlalchemy_model import UserDBM
13
+ from project.tg_bot.tg_bot import get_cached_tg_bot
14
+
15
+ _logger = logging.getLogger(__name__)
16
+
17
+
18
+ async def notify_admins(text: str):
19
+ text = emojize(text.strip())
20
+
21
+ admin_tg_ids = set()
22
+
23
+ if get_cached_sqlalchemy_db() is not None:
24
+ async with get_cached_sqlalchemy_db().new_async_session() as async_session:
25
+ admin_user_dbms: list[UserDBM] = (await async_session.scalars(
26
+ sqlalchemy.select(UserDBM).filter(UserDBM.roles.any(UserDBM.Roles.admin))
27
+ )).all()
28
+ for admin_user_dbm in admin_user_dbms:
29
+ admin_tg_ids.add(admin_user_dbm.tg_id)
30
+
31
+ for tg_id in get_cached_settings().tg_bot_admin_tg_ids:
32
+ admin_tg_ids.add(tg_id)
33
+
34
+ for admin_tg_id in admin_tg_ids:
35
+ try:
36
+ await get_cached_tg_bot().send_message(
37
+ chat_id=admin_tg_id,
38
+ text=text
39
+ )
40
+ except AiogramError as exception:
41
+ _logger.error(exception)
42
+ try:
43
+ await get_cached_tg_bot().send_message(
44
+ chat_id=admin_tg_id,
45
+ text=remove_tags_and_html(text)
46
+ )
47
+ except AiogramError as exception:
48
+ _logger.error(exception)
49
+
50
+
51
+ async def __async_example():
52
+ setup_logging()
53
+ await notify_admins("Hello world")
54
+ await get_cached_tg_bot().session.close()
55
+
56
+
57
+ if __name__ == '__main__':
58
+ asyncio.run(__async_example())
@@ -4,6 +4,7 @@ import logging
4
4
  from aiogram.types import BotCommand, BotCommandScopeChat
5
5
 
6
6
  from arpakitlib.ar_str_util import return_str_if_none
7
+ from project.core.settings import get_cached_settings
7
8
  from project.core.util import setup_logging
8
9
  from project.sqlalchemy_db_.sqlalchemy_db import get_cached_sqlalchemy_db
9
10
  from project.sqlalchemy_db_.sqlalchemy_model import UserDBM
@@ -29,6 +30,13 @@ def get_client_tg_bot_commands_to_set() -> list[BotCommand]:
29
30
  get_cached_client_tg_bot_blank().command_to_desc().get(ClientTgBotCommands.about),
30
31
  ClientTgBotCommands.about
31
32
  )
33
+ ),
34
+ BotCommand(
35
+ command=ClientTgBotCommands.support,
36
+ description=return_str_if_none(
37
+ get_cached_client_tg_bot_blank().command_to_desc().get(ClientTgBotCommands.support),
38
+ ClientTgBotCommands.support
39
+ )
32
40
  )
33
41
  ]
34
42
  return res
@@ -53,18 +61,32 @@ async def set_client_tg_bot_commands():
53
61
  async def set_admin_tg_bot_commands():
54
62
  _logger.info(f"start")
55
63
 
56
- with get_cached_sqlalchemy_db().new_session() as session:
57
- user_dbms: list[UserDBM] = session.query(UserDBM).filter(UserDBM.roles.any(UserDBM.Roles.admin)).all()
64
+ user_tg_ids = set()
65
+ for tg_bot_admin_tg_id in get_cached_settings().tg_bot_admin_tg_ids:
66
+ user_tg_ids.add(tg_bot_admin_tg_id)
67
+
68
+ if get_cached_sqlalchemy_db() is not None:
69
+ with get_cached_sqlalchemy_db().new_session() as session:
70
+ user_dbms: list[UserDBM] = session.query(UserDBM).filter(UserDBM.roles.any(UserDBM.Roles.admin)).all()
71
+ for user_dbm in user_dbms:
72
+ user_tg_ids.add(user_dbm.tg_id)
58
73
 
59
- for user_dbm in user_dbms:
74
+ for user_tg_id in user_tg_ids:
60
75
  await get_cached_tg_bot().set_my_commands(
61
76
  commands=get_client_tg_bot_commands_to_set() + get_admin_tg_bot_commands_to_set(),
62
- scope=BotCommandScopeChat(chat_id=user_dbm.tg_id)
77
+ scope=BotCommandScopeChat(chat_id=user_tg_id)
63
78
  )
64
79
 
65
80
  _logger.info("finish")
66
81
 
67
82
 
83
+ async def set_all_tg_bot_commands():
84
+ _logger.info(f"start")
85
+ await set_client_tg_bot_commands()
86
+ await set_admin_tg_bot_commands()
87
+ _logger.info("finish")
88
+
89
+
68
90
  async def __async_example():
69
91
  setup_logging()
70
92
  await set_client_tg_bot_commands()