AstrBot 4.2.1__tar.gz → 4.3.1__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 (553) hide show
  1. {astrbot-4.2.1 → astrbot-4.3.1}/.gitignore +3 -1
  2. {astrbot-4.2.1 → astrbot-4.3.1}/Dockerfile +8 -13
  3. {astrbot-4.2.1 → astrbot-4.3.1}/PKG-INFO +3 -3
  4. {astrbot-4.2.1 → astrbot-4.3.1}/README.md +1 -1
  5. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/config/default.py +49 -10
  6. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/db/__init__.py +12 -1
  7. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/db/po.py +8 -4
  8. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/db/sqlite.py +144 -34
  9. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/pipeline/preprocess_stage/stage.py +24 -0
  10. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/pipeline/result_decorate/stage.py +5 -1
  11. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/astr_message_event.py +10 -0
  12. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/platform_metadata.py +2 -0
  13. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/register.py +3 -0
  14. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/lark/lark_event.py +16 -0
  15. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/telegram/tg_adapter.py +59 -23
  16. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/telegram/tg_event.py +34 -0
  17. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/provider/provider.py +1 -1
  18. astrbot-4.3.1/astrbot/core/provider/sources/zhipu_source.py +21 -0
  19. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/star/filter/command.py +32 -2
  20. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/star/register/star_handler.py +6 -4
  21. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/utils/command_parser.py +1 -1
  22. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/dashboard/routes/config.py +88 -2
  23. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/dashboard/routes/session_management.py +37 -29
  24. astrbot-4.3.1/changelogs/v4.3.0.md +14 -0
  25. astrbot-4.3.1/changelogs/v4.3.1.md +1 -0
  26. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/en-US/features/alkaid/knowledge-base.json +1 -0
  27. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/zh-CN/features/alkaid/knowledge-base.json +1 -0
  28. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/views/PlatformPage.vue +10 -2
  29. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/views/SessionManagementPage.vue +59 -32
  30. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/views/alkaid/KnowledgeBase.vue +10 -1
  31. astrbot-4.3.1/packages/astrbot/commands/__init__.py +31 -0
  32. astrbot-4.3.1/packages/astrbot/commands/admin.py +76 -0
  33. astrbot-4.3.1/packages/astrbot/commands/alter_cmd.py +188 -0
  34. astrbot-4.3.1/packages/astrbot/commands/conversation.py +440 -0
  35. astrbot-4.3.1/packages/astrbot/commands/help.py +61 -0
  36. astrbot-4.3.1/packages/astrbot/commands/llm.py +20 -0
  37. astrbot-4.3.1/packages/astrbot/commands/persona.py +122 -0
  38. astrbot-4.3.1/packages/astrbot/commands/plugin.py +117 -0
  39. astrbot-4.3.1/packages/astrbot/commands/provider.py +201 -0
  40. astrbot-4.3.1/packages/astrbot/commands/setunset.py +37 -0
  41. astrbot-4.3.1/packages/astrbot/commands/sid.py +29 -0
  42. astrbot-4.3.1/packages/astrbot/commands/t2i.py +23 -0
  43. astrbot-4.3.1/packages/astrbot/commands/tool.py +31 -0
  44. astrbot-4.3.1/packages/astrbot/commands/tts.py +36 -0
  45. astrbot-4.3.1/packages/astrbot/main.py +350 -0
  46. astrbot-4.3.1/packages/astrbot/process_llm_request.py +195 -0
  47. {astrbot-4.2.1 → astrbot-4.3.1}/pyproject.toml +2 -2
  48. {astrbot-4.2.1 → astrbot-4.3.1}/requirements.txt +2 -2
  49. astrbot-4.2.1/astrbot/core/provider/sources/zhipu_source.py +0 -81
  50. astrbot-4.2.1/packages/astrbot/main.py +0 -1478
  51. {astrbot-4.2.1 → astrbot-4.3.1}/.dockerignore +0 -0
  52. {astrbot-4.2.1 → astrbot-4.3.1}/.github/FUNDING.yml +0 -0
  53. {astrbot-4.2.1 → astrbot-4.3.1}/.github/ISSUE_TEMPLATE/PLUGIN_PUBLISH.yml +0 -0
  54. {astrbot-4.2.1 → astrbot-4.3.1}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  55. {astrbot-4.2.1 → astrbot-4.3.1}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
  56. {astrbot-4.2.1 → astrbot-4.3.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  57. {astrbot-4.2.1 → astrbot-4.3.1}/.github/auto_assign.yml +0 -0
  58. {astrbot-4.2.1 → astrbot-4.3.1}/.github/copilot-instructions.md +0 -0
  59. {astrbot-4.2.1 → astrbot-4.3.1}/.github/dependabot.yml +0 -0
  60. {astrbot-4.2.1 → astrbot-4.3.1}/.github/workflows/auto_release.yml +0 -0
  61. {astrbot-4.2.1 → astrbot-4.3.1}/.github/workflows/code-format.yml +0 -0
  62. {astrbot-4.2.1 → astrbot-4.3.1}/.github/workflows/codeql.yml +0 -0
  63. {astrbot-4.2.1 → astrbot-4.3.1}/.github/workflows/coverage_test.yml +0 -0
  64. {astrbot-4.2.1 → astrbot-4.3.1}/.github/workflows/dashboard_ci.yml +0 -0
  65. {astrbot-4.2.1 → astrbot-4.3.1}/.github/workflows/docker-image.yml +0 -0
  66. {astrbot-4.2.1 → astrbot-4.3.1}/.github/workflows/stale.yml +0 -0
  67. {astrbot-4.2.1 → astrbot-4.3.1}/.pre-commit-config.yaml +0 -0
  68. {astrbot-4.2.1 → astrbot-4.3.1}/.python-version +0 -0
  69. {astrbot-4.2.1 → astrbot-4.3.1}/CODE_OF_CONDUCT.md +0 -0
  70. {astrbot-4.2.1 → astrbot-4.3.1}/Dockerfile_with_node +0 -0
  71. {astrbot-4.2.1 → astrbot-4.3.1}/LICENSE +0 -0
  72. {astrbot-4.2.1 → astrbot-4.3.1}/README_en.md +0 -0
  73. {astrbot-4.2.1 → astrbot-4.3.1}/README_ja.md +0 -0
  74. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/__init__.py +0 -0
  75. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/api/__init__.py +0 -0
  76. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/api/all.py +0 -0
  77. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/api/event/__init__.py +0 -0
  78. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/api/event/filter/__init__.py +0 -0
  79. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/api/message_components.py +0 -0
  80. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/api/platform/__init__.py +0 -0
  81. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/api/provider/__init__.py +0 -0
  82. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/api/star/__init__.py +0 -0
  83. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/api/util/__init__.py +0 -0
  84. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/cli/__init__.py +0 -0
  85. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/cli/__main__.py +0 -0
  86. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/cli/commands/__init__.py +0 -0
  87. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/cli/commands/cmd_conf.py +0 -0
  88. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/cli/commands/cmd_init.py +0 -0
  89. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/cli/commands/cmd_plug.py +0 -0
  90. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/cli/commands/cmd_run.py +0 -0
  91. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/cli/utils/__init__.py +0 -0
  92. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/cli/utils/basic.py +0 -0
  93. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/cli/utils/plugin.py +0 -0
  94. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/cli/utils/version_comparator.py +0 -0
  95. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/__init__.py +0 -0
  96. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/agent/agent.py +0 -0
  97. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/agent/handoff.py +0 -0
  98. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/agent/hooks.py +0 -0
  99. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/agent/mcp_client.py +0 -0
  100. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/agent/response.py +0 -0
  101. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/agent/run_context.py +0 -0
  102. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/agent/runners/__init__.py +0 -0
  103. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/agent/runners/base.py +0 -0
  104. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/agent/runners/tool_loop_agent_runner.py +0 -0
  105. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/agent/tool.py +0 -0
  106. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/agent/tool_executor.py +0 -0
  107. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/astr_agent_context.py +0 -0
  108. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/astrbot_config_mgr.py +0 -0
  109. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/config/__init__.py +0 -0
  110. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/config/astrbot_config.py +0 -0
  111. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/conversation_mgr.py +0 -0
  112. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/core_lifecycle.py +0 -0
  113. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/db/migration/helper.py +0 -0
  114. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/db/migration/migra_3_to_4.py +0 -0
  115. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/db/migration/shared_preferences_v3.py +0 -0
  116. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/db/migration/sqlite_v3.py +0 -0
  117. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/db/vec_db/base.py +0 -0
  118. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/db/vec_db/faiss_impl/__init__.py +0 -0
  119. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/db/vec_db/faiss_impl/document_storage.py +0 -0
  120. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/db/vec_db/faiss_impl/embedding_storage.py +0 -0
  121. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/db/vec_db/faiss_impl/sqlite_init.sql +0 -0
  122. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/db/vec_db/faiss_impl/vec_db.py +0 -0
  123. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/event_bus.py +0 -0
  124. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/file_token_service.py +0 -0
  125. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/initial_loader.py +0 -0
  126. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/log.py +0 -0
  127. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/message/components.py +0 -0
  128. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/message/message_event_result.py +0 -0
  129. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/persona_mgr.py +0 -0
  130. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/pipeline/__init__.py +0 -0
  131. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/pipeline/content_safety_check/stage.py +0 -0
  132. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/pipeline/content_safety_check/strategies/__init__.py +0 -0
  133. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/pipeline/content_safety_check/strategies/baidu_aip.py +0 -0
  134. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/pipeline/content_safety_check/strategies/keywords.py +0 -0
  135. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/pipeline/content_safety_check/strategies/strategy.py +0 -0
  136. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/pipeline/context.py +0 -0
  137. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/pipeline/context_utils.py +0 -0
  138. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/pipeline/process_stage/method/llm_request.py +0 -0
  139. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/pipeline/process_stage/method/star_request.py +0 -0
  140. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/pipeline/process_stage/stage.py +0 -0
  141. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/pipeline/rate_limit_check/stage.py +0 -0
  142. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/pipeline/respond/stage.py +0 -0
  143. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/pipeline/scheduler.py +0 -0
  144. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/pipeline/session_status_check/stage.py +0 -0
  145. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/pipeline/stage.py +0 -0
  146. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/pipeline/waking_check/stage.py +0 -0
  147. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/pipeline/whitelist_check/stage.py +0 -0
  148. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/__init__.py +0 -0
  149. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/astrbot_message.py +0 -0
  150. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/manager.py +0 -0
  151. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/message_session.py +0 -0
  152. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/message_type.py +0 -0
  153. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/platform.py +0 -0
  154. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/aiocqhttp/aiocqhttp_message_event.py +0 -0
  155. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/aiocqhttp/aiocqhttp_platform_adapter.py +0 -0
  156. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/dingtalk/dingtalk_adapter.py +0 -0
  157. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/dingtalk/dingtalk_event.py +0 -0
  158. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/discord/client.py +0 -0
  159. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/discord/components.py +0 -0
  160. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/discord/discord_platform_adapter.py +0 -0
  161. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/discord/discord_platform_event.py +0 -0
  162. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/lark/lark_adapter.py +0 -0
  163. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/misskey/misskey_adapter.py +0 -0
  164. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/misskey/misskey_api.py +0 -0
  165. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/misskey/misskey_event.py +0 -0
  166. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/misskey/misskey_utils.py +0 -0
  167. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/qqofficial/qqofficial_message_event.py +0 -0
  168. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/qqofficial/qqofficial_platform_adapter.py +0 -0
  169. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_adapter.py +0 -0
  170. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_event.py +0 -0
  171. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_server.py +0 -0
  172. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/satori/satori_adapter.py +0 -0
  173. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/satori/satori_event.py +0 -0
  174. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/slack/client.py +0 -0
  175. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/slack/slack_adapter.py +0 -0
  176. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/slack/slack_event.py +0 -0
  177. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/webchat/webchat_adapter.py +0 -0
  178. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/webchat/webchat_event.py +0 -0
  179. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/webchat/webchat_queue_mgr.py +0 -0
  180. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/wechatpadpro/wechatpadpro_adapter.py +0 -0
  181. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/wechatpadpro/wechatpadpro_message_event.py +0 -0
  182. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/wechatpadpro/xml_data_parser.py +0 -0
  183. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/wecom/wecom_adapter.py +0 -0
  184. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/wecom/wecom_event.py +0 -0
  185. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/wecom/wecom_kf.py +0 -0
  186. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/wecom/wecom_kf_message.py +0 -0
  187. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/weixin_official_account/weixin_offacc_adapter.py +0 -0
  188. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform/sources/weixin_official_account/weixin_offacc_event.py +0 -0
  189. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/platform_message_history_mgr.py +0 -0
  190. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/provider/__init__.py +0 -0
  191. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/provider/entites.py +0 -0
  192. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/provider/entities.py +0 -0
  193. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/provider/func_tool_manager.py +0 -0
  194. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/provider/manager.py +0 -0
  195. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/provider/register.py +0 -0
  196. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/provider/sources/anthropic_source.py +0 -0
  197. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/provider/sources/azure_tts_source.py +0 -0
  198. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/provider/sources/coze_api_client.py +0 -0
  199. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/provider/sources/coze_source.py +0 -0
  200. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/provider/sources/dashscope_source.py +0 -0
  201. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/provider/sources/dashscope_tts.py +0 -0
  202. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/provider/sources/dify_source.py +0 -0
  203. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/provider/sources/edge_tts_source.py +0 -0
  204. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/provider/sources/fishaudio_tts_api_source.py +0 -0
  205. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/provider/sources/gemini_embedding_source.py +0 -0
  206. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/provider/sources/gemini_source.py +0 -0
  207. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/provider/sources/gemini_tts_source.py +0 -0
  208. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/provider/sources/gsv_selfhosted_source.py +0 -0
  209. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/provider/sources/gsvi_tts_source.py +0 -0
  210. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/provider/sources/minimax_tts_api_source.py +0 -0
  211. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/provider/sources/openai_embedding_source.py +0 -0
  212. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/provider/sources/openai_source.py +0 -0
  213. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/provider/sources/openai_tts_api_source.py +0 -0
  214. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/provider/sources/sensevoice_selfhosted_source.py +0 -0
  215. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/provider/sources/vllm_rerank_source.py +0 -0
  216. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/provider/sources/volcengine_tts.py +0 -0
  217. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/provider/sources/whisper_api_source.py +0 -0
  218. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/provider/sources/whisper_selfhosted_source.py +0 -0
  219. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/star/README.md +0 -0
  220. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/star/__init__.py +0 -0
  221. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/star/config.py +0 -0
  222. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/star/context.py +0 -0
  223. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/star/filter/__init__.py +0 -0
  224. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/star/filter/command_group.py +0 -0
  225. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/star/filter/custom_filter.py +0 -0
  226. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/star/filter/event_message_type.py +0 -0
  227. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/star/filter/permission.py +0 -0
  228. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/star/filter/platform_adapter_type.py +0 -0
  229. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/star/filter/regex.py +0 -0
  230. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/star/register/__init__.py +0 -0
  231. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/star/register/star.py +0 -0
  232. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/star/session_llm_manager.py +0 -0
  233. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/star/session_plugin_manager.py +0 -0
  234. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/star/star.py +0 -0
  235. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/star/star_handler.py +0 -0
  236. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/star/star_manager.py +0 -0
  237. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/star/star_tools.py +0 -0
  238. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/star/updator.py +0 -0
  239. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/updator.py +0 -0
  240. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/utils/astrbot_path.py +0 -0
  241. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/utils/dify_api_client.py +0 -0
  242. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/utils/io.py +0 -0
  243. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/utils/log_pipe.py +0 -0
  244. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/utils/metrics.py +0 -0
  245. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/utils/path_util.py +0 -0
  246. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/utils/pip_installer.py +0 -0
  247. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/utils/session_lock.py +0 -0
  248. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/utils/session_waiter.py +0 -0
  249. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/utils/shared_preferences.py +0 -0
  250. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/utils/t2i/__init__.py +0 -0
  251. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/utils/t2i/local_strategy.py +0 -0
  252. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/utils/t2i/network_strategy.py +0 -0
  253. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/utils/t2i/renderer.py +0 -0
  254. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/utils/t2i/template/astrbot_powershell.html +0 -0
  255. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/utils/t2i/template/base.html +0 -0
  256. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/utils/t2i/template_manager.py +0 -0
  257. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/utils/tencent_record_helper.py +0 -0
  258. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/utils/version_comparator.py +0 -0
  259. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/core/zip_updator.py +0 -0
  260. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/dashboard/routes/__init__.py +0 -0
  261. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/dashboard/routes/auth.py +0 -0
  262. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/dashboard/routes/chat.py +0 -0
  263. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/dashboard/routes/conversation.py +0 -0
  264. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/dashboard/routes/file.py +0 -0
  265. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/dashboard/routes/log.py +0 -0
  266. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/dashboard/routes/persona.py +0 -0
  267. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/dashboard/routes/plugin.py +0 -0
  268. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/dashboard/routes/route.py +0 -0
  269. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/dashboard/routes/stat.py +0 -0
  270. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/dashboard/routes/static_file.py +0 -0
  271. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/dashboard/routes/t2i.py +0 -0
  272. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/dashboard/routes/tools.py +0 -0
  273. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/dashboard/routes/update.py +0 -0
  274. {astrbot-4.2.1 → astrbot-4.3.1}/astrbot/dashboard/server.py +0 -0
  275. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.0.md +0 -0
  276. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.1.md +0 -0
  277. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.10.md +0 -0
  278. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.11.md +0 -0
  279. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.12.md +0 -0
  280. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.13.md +0 -0
  281. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.14.md +0 -0
  282. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.15.md +0 -0
  283. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.16.md +0 -0
  284. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.17.md +0 -0
  285. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.18.md +0 -0
  286. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.19.md +0 -0
  287. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.20.md +0 -0
  288. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.21.md +0 -0
  289. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.22.md +0 -0
  290. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.23.md +0 -0
  291. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.24.md +0 -0
  292. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.25.md +0 -0
  293. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.26.md +0 -0
  294. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.27.md +0 -0
  295. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.28.md +0 -0
  296. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.29.md +0 -0
  297. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.3.md +0 -0
  298. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.30.md +0 -0
  299. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.31.md +0 -0
  300. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.32.md +0 -0
  301. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.33.md +0 -0
  302. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.35.md +0 -0
  303. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.36.md +0 -0
  304. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.37.md +0 -0
  305. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.38.md +0 -0
  306. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.39.md +0 -0
  307. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.4.md +0 -0
  308. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.5.md +0 -0
  309. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.6.md +0 -0
  310. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.7.md +0 -0
  311. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.8.md +0 -0
  312. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.4.9.md +0 -0
  313. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.5.0.md +0 -0
  314. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.5.1.md +0 -0
  315. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.5.10.md +0 -0
  316. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.5.11.md +0 -0
  317. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.5.12.md +0 -0
  318. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.5.13.md +0 -0
  319. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.5.14.md +0 -0
  320. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.5.15.md +0 -0
  321. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.5.16.md +0 -0
  322. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.5.17.md +0 -0
  323. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.5.18.md +0 -0
  324. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.5.19.md +0 -0
  325. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.5.2.md +0 -0
  326. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.5.20.md +0 -0
  327. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.5.21.md +0 -0
  328. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.5.22.md +0 -0
  329. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.5.23.md +0 -0
  330. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.5.24.md +0 -0
  331. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.5.25.md +0 -0
  332. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.5.26.md +0 -0
  333. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.5.27.md +0 -0
  334. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.5.3.1.md +0 -0
  335. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.5.3.2.md +0 -0
  336. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.5.3.md +0 -0
  337. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.5.4.md +0 -0
  338. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.5.5.md +0 -0
  339. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.5.6.md +0 -0
  340. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.5.7.md +0 -0
  341. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.5.8.md +0 -0
  342. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v3.5.9.md +0 -0
  343. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v4.0.0-beta.3.md +0 -0
  344. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v4.0.0-beta.4.md +0 -0
  345. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v4.0.0-beta.5.md +0 -0
  346. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v4.0.0.md +0 -0
  347. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v4.1.0.md +0 -0
  348. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v4.1.1.md +0 -0
  349. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v4.1.2.md +0 -0
  350. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v4.1.3.md +0 -0
  351. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v4.1.4.md +0 -0
  352. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v4.1.5.md +0 -0
  353. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v4.1.6.md +0 -0
  354. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v4.1.7.md +0 -0
  355. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v4.2.0.md +0 -0
  356. {astrbot-4.2.1 → astrbot-4.3.1}/changelogs/v4.2.1.md +0 -0
  357. {astrbot-4.2.1 → astrbot-4.3.1}/compose.yml +0 -0
  358. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/.gitignore +0 -0
  359. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/LICENSE +0 -0
  360. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/README.md +0 -0
  361. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/env.d.ts +0 -0
  362. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/index.html +0 -0
  363. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/public/_redirects +0 -0
  364. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/public/favicon.svg +0 -0
  365. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/App.vue +0 -0
  366. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/assets/images/astrbot_banner.png +0 -0
  367. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/assets/images/astrbot_logo_mini.webp +0 -0
  368. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/assets/images/platform_logos/dingtalk.svg +0 -0
  369. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/assets/images/platform_logos/discord.svg +0 -0
  370. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/assets/images/platform_logos/kook.png +0 -0
  371. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/assets/images/platform_logos/lark.png +0 -0
  372. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/assets/images/platform_logos/misskey.png +0 -0
  373. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/assets/images/platform_logos/qq.png +0 -0
  374. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/assets/images/platform_logos/satori.png +0 -0
  375. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/assets/images/platform_logos/slack.svg +0 -0
  376. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/assets/images/platform_logos/telegram.svg +0 -0
  377. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/assets/images/platform_logos/vocechat.png +0 -0
  378. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/assets/images/platform_logos/wechat.png +0 -0
  379. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/assets/images/platform_logos/wecom.png +0 -0
  380. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/components/ConfirmDialog.vue +0 -0
  381. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/components/chat/Chat.vue +0 -0
  382. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/components/chat/MessageList.vue +0 -0
  383. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/components/chat/ProviderModelSelector.vue +0 -0
  384. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/components/platform/AddNewPlatform.vue +0 -0
  385. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/components/provider/AddNewProvider.vue +0 -0
  386. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/components/shared/AstrBotConfig.vue +0 -0
  387. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/components/shared/AstrBotConfigV4.vue +0 -0
  388. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/components/shared/ConsoleDisplayer.vue +0 -0
  389. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/components/shared/ExtensionCard.vue +0 -0
  390. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/components/shared/ItemCard.vue +0 -0
  391. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/components/shared/ItemCardGrid.vue +0 -0
  392. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/components/shared/KnowledgeBaseSelector.vue +0 -0
  393. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/components/shared/LanguageSwitcher.vue +0 -0
  394. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/components/shared/ListConfigItem.vue +0 -0
  395. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/components/shared/Logo.vue +0 -0
  396. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/components/shared/MigrationDialog.vue +0 -0
  397. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/components/shared/ObjectEditor.vue +0 -0
  398. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/components/shared/PersonaSelector.vue +0 -0
  399. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/components/shared/PluginSetSelector.vue +0 -0
  400. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/components/shared/ProviderSelector.vue +0 -0
  401. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/components/shared/ProxySelector.vue +0 -0
  402. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/components/shared/ReadmeDialog.vue +0 -0
  403. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/components/shared/T2ITemplateEditor.vue +0 -0
  404. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/components/shared/WaitingForRestart.vue +0 -0
  405. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/config.ts +0 -0
  406. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/composables.ts +0 -0
  407. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/loader.ts +0 -0
  408. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/en-US/core/actions.json +0 -0
  409. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/en-US/core/common.json +0 -0
  410. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/en-US/core/header.json +0 -0
  411. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/en-US/core/navigation.json +0 -0
  412. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/en-US/core/status.json +0 -0
  413. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/en-US/features/about.json +0 -0
  414. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/en-US/features/alkaid/index.json +0 -0
  415. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/en-US/features/alkaid/memory.json +0 -0
  416. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/en-US/features/auth.json +0 -0
  417. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/en-US/features/chart.json +0 -0
  418. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/en-US/features/chat.json +0 -0
  419. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/en-US/features/config.json +0 -0
  420. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/en-US/features/console.json +0 -0
  421. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/en-US/features/conversation.json +0 -0
  422. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/en-US/features/dashboard.json +0 -0
  423. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/en-US/features/extension.json +0 -0
  424. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/en-US/features/migration.json +0 -0
  425. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/en-US/features/persona.json +0 -0
  426. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/en-US/features/platform.json +0 -0
  427. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/en-US/features/provider.json +0 -0
  428. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/en-US/features/session-management.json +0 -0
  429. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/en-US/features/settings.json +0 -0
  430. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/en-US/features/tool-use.json +0 -0
  431. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/en-US/messages/errors.json +0 -0
  432. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/en-US/messages/success.json +0 -0
  433. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/en-US/messages/validation.json +0 -0
  434. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/zh-CN/core/actions.json +0 -0
  435. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/zh-CN/core/common.json +0 -0
  436. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/zh-CN/core/header.json +0 -0
  437. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/zh-CN/core/navigation.json +0 -0
  438. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/zh-CN/core/status.json +0 -0
  439. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/zh-CN/features/about.json +0 -0
  440. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/zh-CN/features/alkaid/index.json +0 -0
  441. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/zh-CN/features/alkaid/memory.json +0 -0
  442. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/zh-CN/features/auth.json +0 -0
  443. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/zh-CN/features/chart.json +0 -0
  444. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/zh-CN/features/chat.json +0 -0
  445. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/zh-CN/features/config.json +0 -0
  446. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/zh-CN/features/console.json +0 -0
  447. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/zh-CN/features/conversation.json +0 -0
  448. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/zh-CN/features/dashboard.json +0 -0
  449. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/zh-CN/features/extension.json +0 -0
  450. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/zh-CN/features/migration.json +0 -0
  451. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/zh-CN/features/persona.json +0 -0
  452. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/zh-CN/features/platform.json +0 -0
  453. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/zh-CN/features/provider.json +0 -0
  454. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/zh-CN/features/session-management.json +0 -0
  455. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/zh-CN/features/settings.json +0 -0
  456. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/zh-CN/features/tool-use.json +0 -0
  457. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/zh-CN/messages/errors.json +0 -0
  458. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/zh-CN/messages/success.json +0 -0
  459. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/locales/zh-CN/messages/validation.json +0 -0
  460. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/tools/index.ts +0 -0
  461. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/translations.ts +0 -0
  462. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/types.ts +0 -0
  463. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/i18n/validator.ts +0 -0
  464. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/layouts/blank/BlankLayout.vue +0 -0
  465. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/layouts/full/FullLayout.vue +0 -0
  466. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/layouts/full/vertical-header/VerticalHeader.vue +0 -0
  467. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/layouts/full/vertical-sidebar/NavItem.vue +0 -0
  468. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/layouts/full/vertical-sidebar/VerticalSidebar.vue +0 -0
  469. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/layouts/full/vertical-sidebar/sidebarItem.ts +0 -0
  470. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/main.ts +0 -0
  471. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/plugins/confirmPlugin.ts +0 -0
  472. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/plugins/vuetify.ts +0 -0
  473. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/router/AuthRoutes.ts +0 -0
  474. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/router/ChatBoxRoutes.ts +0 -0
  475. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/router/MainRoutes.ts +0 -0
  476. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/router/index.ts +0 -0
  477. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/scss/_override.scss +0 -0
  478. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/scss/_variables.scss +0 -0
  479. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/scss/components/_VButtons.scss +0 -0
  480. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/scss/components/_VCard.scss +0 -0
  481. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/scss/components/_VField.scss +0 -0
  482. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/scss/components/_VInput.scss +0 -0
  483. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/scss/components/_VNavigationDrawer.scss +0 -0
  484. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/scss/components/_VScrollbar.scss +0 -0
  485. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/scss/components/_VShadow.scss +0 -0
  486. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/scss/components/_VTabs.scss +0 -0
  487. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/scss/components/_VTextField.scss +0 -0
  488. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/scss/layout/_container.scss +0 -0
  489. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/scss/layout/_sidebar.scss +0 -0
  490. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/scss/pages/_dashboards.scss +0 -0
  491. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/scss/style.scss +0 -0
  492. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/stores/auth.ts +0 -0
  493. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/stores/common.js +0 -0
  494. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/stores/customizer.ts +0 -0
  495. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/stores/toast.js +0 -0
  496. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/theme/DarkTheme.ts +0 -0
  497. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/theme/LightTheme.ts +0 -0
  498. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/types/themeTypes/ThemeType.ts +0 -0
  499. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/types/vue3-print-nb.d.ts +0 -0
  500. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/types/vue_tabler_icon.d.ts +0 -0
  501. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/utils/platformUtils.js +0 -0
  502. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/utils/providerUtils.js +0 -0
  503. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/utils/toast.js +0 -0
  504. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/views/AboutPage.vue +0 -0
  505. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/views/AlkaidPage.vue +0 -0
  506. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/views/ChatBoxPage.vue +0 -0
  507. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/views/ChatPage.vue +0 -0
  508. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/views/ConfigPage.vue +0 -0
  509. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/views/ConsolePage.vue +0 -0
  510. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/views/ConversationPage.vue +0 -0
  511. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/views/ExtensionPage.vue +0 -0
  512. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/views/PersonaPage.vue +0 -0
  513. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/views/ProviderPage.vue +0 -0
  514. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/views/Settings.vue +0 -0
  515. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/views/ToolUsePage.vue +0 -0
  516. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/views/alkaid/LongTermMemory.vue +0 -0
  517. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/views/alkaid/Other.vue +0 -0
  518. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/views/authentication/auth/LoginPage.vue +0 -0
  519. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/views/authentication/authForms/AuthLogin.vue +0 -0
  520. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/views/dashboards/default/DefaultDashboard.vue +0 -0
  521. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/views/dashboards/default/components/MemoryUsage.vue +0 -0
  522. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/views/dashboards/default/components/MessageStat.vue +0 -0
  523. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/views/dashboards/default/components/OnlinePlatform.vue +0 -0
  524. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/views/dashboards/default/components/OnlineTime.vue +0 -0
  525. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/views/dashboards/default/components/PlatformStat.vue +0 -0
  526. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/views/dashboards/default/components/RunningTime.vue +0 -0
  527. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/src/views/dashboards/default/components/TotalMessage.vue +0 -0
  528. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/tsconfig.json +0 -0
  529. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/tsconfig.vite-config.json +0 -0
  530. {astrbot-4.2.1 → astrbot-4.3.1}/dashboard/vite.config.ts +0 -0
  531. {astrbot-4.2.1 → astrbot-4.3.1}/main.py +0 -0
  532. {astrbot-4.2.1 → astrbot-4.3.1}/packages/astrbot/long_term_memory.py +0 -0
  533. {astrbot-4.2.1 → astrbot-4.3.1}/packages/astrbot/metadata.yaml +0 -0
  534. {astrbot-4.2.1 → astrbot-4.3.1}/packages/python_interpreter/main.py +0 -0
  535. {astrbot-4.2.1 → astrbot-4.3.1}/packages/python_interpreter/metadata.yaml +0 -0
  536. {astrbot-4.2.1 → astrbot-4.3.1}/packages/python_interpreter/requirements.txt +0 -0
  537. {astrbot-4.2.1 → astrbot-4.3.1}/packages/python_interpreter/shared/api.py +0 -0
  538. {astrbot-4.2.1 → astrbot-4.3.1}/packages/reminder/main.py +0 -0
  539. {astrbot-4.2.1 → astrbot-4.3.1}/packages/reminder/metadata.yaml +0 -0
  540. {astrbot-4.2.1 → astrbot-4.3.1}/packages/session_controller/main.py +0 -0
  541. {astrbot-4.2.1 → astrbot-4.3.1}/packages/session_controller/metadata.yaml +0 -0
  542. {astrbot-4.2.1 → astrbot-4.3.1}/packages/thinking_filter/main.py +0 -0
  543. {astrbot-4.2.1 → astrbot-4.3.1}/packages/thinking_filter/metadata.yaml +0 -0
  544. {astrbot-4.2.1 → astrbot-4.3.1}/packages/web_searcher/engines/__init__.py +0 -0
  545. {astrbot-4.2.1 → astrbot-4.3.1}/packages/web_searcher/engines/bing.py +0 -0
  546. {astrbot-4.2.1 → astrbot-4.3.1}/packages/web_searcher/engines/google.py +0 -0
  547. {astrbot-4.2.1 → astrbot-4.3.1}/packages/web_searcher/engines/sogo.py +0 -0
  548. {astrbot-4.2.1 → astrbot-4.3.1}/packages/web_searcher/main.py +0 -0
  549. {astrbot-4.2.1 → astrbot-4.3.1}/packages/web_searcher/metadata.yaml +0 -0
  550. {astrbot-4.2.1 → astrbot-4.3.1}/samples/stt_health_check.wav +0 -0
  551. {astrbot-4.2.1 → astrbot-4.3.1}/tests/test_dashboard.py +0 -0
  552. {astrbot-4.2.1 → astrbot-4.3.1}/tests/test_main.py +0 -0
  553. {astrbot-4.2.1 → astrbot-4.3.1}/tests/test_plugin_manager.py +0 -0
@@ -30,4 +30,6 @@ packages/python_interpreter/workplace
30
30
  .conda/
31
31
  .idea
32
32
  pytest.ini
33
- .astrbot
33
+ .astrbot
34
+
35
+ uv.lock
@@ -4,8 +4,6 @@ WORKDIR /AstrBot
4
4
  COPY . /AstrBot/
5
5
 
6
6
  RUN apt-get update && apt-get install -y --no-install-recommends \
7
- nodejs \
8
- npm \
9
7
  gcc \
10
8
  build-essential \
11
9
  python3-dev \
@@ -13,23 +11,20 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
13
11
  libssl-dev \
14
12
  ca-certificates \
15
13
  bash \
14
+ ffmpeg \
16
15
  && apt-get clean \
17
16
  && rm -rf /var/lib/apt/lists/*
18
17
 
18
+ RUN apt-get update && apt-get install -y curl gnupg && \
19
+ curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - && \
20
+ apt-get install -y nodejs && \
21
+ rm -rf /var/lib/apt/lists/*
22
+
19
23
  RUN python -m pip install uv
20
24
  RUN uv pip install -r requirements.txt --no-cache-dir --system
21
- RUN uv pip install socksio uv pyffmpeg pilk --no-cache-dir --system
22
-
23
- # 释出 ffmpeg
24
- RUN python -c "from pyffmpeg import FFmpeg; ff = FFmpeg();"
25
-
26
- # add /root/.pyffmpeg/bin/ffmpeg to PATH, inorder to use ffmpeg
27
- RUN echo 'export PATH=$PATH:/root/.pyffmpeg/bin' >> ~/.bashrc
25
+ RUN uv pip install socksio uv pilk --no-cache-dir --system
28
26
 
29
- EXPOSE 6185
27
+ EXPOSE 6185
30
28
  EXPOSE 6186
31
29
 
32
30
  CMD [ "python", "main.py" ]
33
-
34
-
35
-
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: AstrBot
3
- Version: 4.2.1
3
+ Version: 4.3.1
4
4
  Summary: 易上手的多平台 LLM 聊天机器人及开发框架
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.10
@@ -25,10 +25,10 @@ Requires-Dist: docstring-parser>=0.16
25
25
  Requires-Dist: faiss-cpu==1.10.0
26
26
  Requires-Dist: filelock>=3.18.0
27
27
  Requires-Dist: google-genai>=1.14.0
28
- Requires-Dist: googlesearch-python>=1.3.0
29
28
  Requires-Dist: lark-oapi>=1.4.15
30
29
  Requires-Dist: lxml-html-clean>=0.4.2
31
30
  Requires-Dist: mcp>=1.8.0
31
+ Requires-Dist: mi-googlesearch-python==1.3.0.post1
32
32
  Requires-Dist: openai>=1.78.0
33
33
  Requires-Dist: ormsgpack>=1.9.1
34
34
  Requires-Dist: pillow>=11.2.1
@@ -246,7 +246,7 @@ pre-commit install
246
246
  - [koishijs/koishi](https://github.com/koishijs/koishi) - 扩展性极强的 Bot 框架
247
247
  - [MaiM-with-u/MaiBot](https://github.com/MaiM-with-u/MaiBot) - 注重拟人功能的 ChatBot
248
248
  - [langbot-app/LangBot](https://github.com/langbot-app/LangBot) - 功能丰富的 Bot 平台
249
- - [LroMiose/nekro-agent](https://github.com/KroMiose/nekro-agent) - 注重 Agent 的 ChatBot
249
+ - [KroMiose/nekro-agent](https://github.com/KroMiose/nekro-agent) - 注重 Agent 的 ChatBot
250
250
  - [zhenxun-org/zhenxun_bot](https://github.com/zhenxun-org/zhenxun_bot) - 功能完善的 ChatBot
251
251
 
252
252
  ## ⭐ Star History
@@ -192,7 +192,7 @@ pre-commit install
192
192
  - [koishijs/koishi](https://github.com/koishijs/koishi) - 扩展性极强的 Bot 框架
193
193
  - [MaiM-with-u/MaiBot](https://github.com/MaiM-with-u/MaiBot) - 注重拟人功能的 ChatBot
194
194
  - [langbot-app/LangBot](https://github.com/langbot-app/LangBot) - 功能丰富的 Bot 平台
195
- - [LroMiose/nekro-agent](https://github.com/KroMiose/nekro-agent) - 注重 Agent 的 ChatBot
195
+ - [KroMiose/nekro-agent](https://github.com/KroMiose/nekro-agent) - 注重 Agent 的 ChatBot
196
196
  - [zhenxun-org/zhenxun_bot](https://github.com/zhenxun-org/zhenxun_bot) - 功能完善的 ChatBot
197
197
 
198
198
  ## ⭐ Star History
@@ -6,7 +6,7 @@ import os
6
6
 
7
7
  from astrbot.core.utils.astrbot_path import get_astrbot_data_path
8
8
 
9
- VERSION = "4.2.1"
9
+ VERSION = "4.3.1"
10
10
  DB_PATH = os.path.join(get_astrbot_data_path(), "data_v4.db")
11
11
 
12
12
  # 默认配置
@@ -64,7 +64,7 @@ DEFAULT_CONFIG = {
64
64
  "datetime_system_prompt": True,
65
65
  "default_personality": "default",
66
66
  "persona_pool": ["*"],
67
- "prompt_prefix": "",
67
+ "prompt_prefix": "{{prompt}}",
68
68
  "max_context_length": -1,
69
69
  "dequeue_context_length": 1,
70
70
  "streaming_response": False,
@@ -116,6 +116,15 @@ DEFAULT_CONFIG = {
116
116
  "port": 6185,
117
117
  },
118
118
  "platform": [],
119
+ "platform_specific": {
120
+ # 平台特异配置:按平台分类,平台下按功能分组
121
+ "lark": {
122
+ "pre_ack_emoji": {"enable": False, "emojis": ["Typing"]},
123
+ },
124
+ "telegram": {
125
+ "pre_ack_emoji": {"enable": False, "emojis": ["✍️"]},
126
+ },
127
+ },
119
128
  "wake_prefix": ["/"],
120
129
  "log_level": "INFO",
121
130
  "pip_install_arg": "",
@@ -1976,26 +1985,28 @@ CONFIG_METADATA_3 = {
1976
1985
  "hint": "留空代表不使用。可用于不支持视觉模态的聊天模型。",
1977
1986
  },
1978
1987
  "provider_stt_settings.enable": {
1979
- "description": "默认启用语音转文本",
1988
+ "description": "启用语音转文本",
1980
1989
  "type": "bool",
1990
+ "hint": "STT 总开关。",
1981
1991
  },
1982
1992
  "provider_stt_settings.provider_id": {
1983
- "description": "语音转文本模型",
1993
+ "description": "默认语音转文本模型",
1984
1994
  "type": "string",
1985
- "hint": "留空代表不使用。",
1995
+ "hint": "用户也可使用 /provider 指令单独选择会话的 STT 模型。",
1986
1996
  "_special": "select_provider_stt",
1987
1997
  "condition": {
1988
1998
  "provider_stt_settings.enable": True,
1989
1999
  },
1990
2000
  },
1991
2001
  "provider_tts_settings.enable": {
1992
- "description": "默认启用文本转语音",
2002
+ "description": "启用文本转语音",
1993
2003
  "type": "bool",
2004
+ "hint": "TTS 总开关。当关闭时,会话启用 TTS 也不会生效。",
1994
2005
  },
1995
2006
  "provider_tts_settings.provider_id": {
1996
- "description": "文本转语音模型",
2007
+ "description": "默认文本转语音模型",
1997
2008
  "type": "string",
1998
- "hint": "留空代表不使用。",
2009
+ "hint": "用户也可使用 /provider 单独选择会话的 TTS 模型。",
1999
2010
  "_special": "select_provider_tts",
2000
2011
  "condition": {
2001
2012
  "provider_tts_settings.enable": True,
@@ -2107,12 +2118,14 @@ CONFIG_METADATA_3 = {
2107
2118
  "provider_settings.wake_prefix": {
2108
2119
  "description": "LLM 聊天额外唤醒前缀 ",
2109
2120
  "type": "string",
2121
+ "hint": "例子: 如果唤醒前缀为 `/`, 额外聊天唤醒前缀为 `chat`,则需要 `/chat` 才会触发 LLM 请求。默认为空。",
2110
2122
  },
2111
2123
  "provider_settings.prompt_prefix": {
2112
- "description": "额外前缀提示词",
2124
+ "description": "用户提示词",
2113
2125
  "type": "string",
2126
+ "hint": "可使用 {{prompt}} 作为用户输入的占位符。如果不输入占位符则代表添加在用户输入的前面。",
2114
2127
  },
2115
- "provider_settings.dual_output": {
2128
+ "provider_tts_settings.dual_output": {
2116
2129
  "description": "开启 TTS 时同时输出语音和文字内容",
2117
2130
  "type": "bool",
2118
2131
  },
@@ -2293,6 +2306,32 @@ CONFIG_METADATA_3 = {
2293
2306
  "description": "用户权限不足时是否回复",
2294
2307
  "type": "bool",
2295
2308
  },
2309
+ "platform_specific.lark.pre_ack_emoji.enable": {
2310
+ "description": "[飞书] 启用预回应表情",
2311
+ "type": "bool",
2312
+ },
2313
+ "platform_specific.lark.pre_ack_emoji.emojis": {
2314
+ "description": "表情列表(飞书表情枚举名)",
2315
+ "type": "list",
2316
+ "items": {"type": "string"},
2317
+ "hint": "表情枚举名参考:https://open.feishu.cn/document/server-docs/im-v1/message-reaction/emojis-introduce",
2318
+ "condition": {
2319
+ "platform_specific.lark.pre_ack_emoji.enable": True,
2320
+ },
2321
+ },
2322
+ "platform_specific.telegram.pre_ack_emoji.enable": {
2323
+ "description": "[Telegram] 启用预回应表情",
2324
+ "type": "bool",
2325
+ },
2326
+ "platform_specific.telegram.pre_ack_emoji.emojis": {
2327
+ "description": "表情列表(Unicode)",
2328
+ "type": "list",
2329
+ "items": {"type": "string"},
2330
+ "hint": "Telegram 仅支持固定反应集合,参考:https://gist.github.com/Soulter/3f22c8e5f9c7e152e967e8bc28c97fc9",
2331
+ "condition": {
2332
+ "platform_specific.telegram.pre_ack_emoji.enable": True,
2333
+ },
2334
+ },
2296
2335
  },
2297
2336
  },
2298
2337
  },
@@ -164,7 +164,7 @@ class BaseDatabase(abc.ABC):
164
164
  self,
165
165
  platform_id: str,
166
166
  user_id: str,
167
- content: list[dict],
167
+ content: dict,
168
168
  sender_id: str | None = None,
169
169
  sender_name: str | None = None,
170
170
  ) -> None:
@@ -287,3 +287,14 @@ class BaseDatabase(abc.ABC):
287
287
  # async def get_llm_messages(self, cid: str) -> list[LLMMessage]:
288
288
  # """Get all LLM messages for a specific conversation."""
289
289
  # ...
290
+
291
+ @abc.abstractmethod
292
+ async def get_session_conversations(
293
+ self,
294
+ page: int = 1,
295
+ page_size: int = 20,
296
+ search_query: str | None = None,
297
+ platform: str | None = None,
298
+ ) -> tuple[list[dict], int]:
299
+ """Get paginated session conversations with joined conversation and persona details, support search and platform filter."""
300
+ ...
@@ -75,7 +75,9 @@ class Persona(SQLModel, table=True):
75
75
 
76
76
  __tablename__ = "personas"
77
77
 
78
- id: int = Field(primary_key=True, sa_column_kwargs={"autoincrement": True})
78
+ id: int | None = Field(
79
+ primary_key=True, sa_column_kwargs={"autoincrement": True}, default=None
80
+ )
79
81
  persona_id: str = Field(max_length=255, nullable=False)
80
82
  system_prompt: str = Field(sa_type=Text, nullable=False)
81
83
  begin_dialogs: Optional[list] = Field(default=None, sa_type=JSON)
@@ -135,7 +137,9 @@ class PlatformMessageHistory(SQLModel, table=True):
135
137
 
136
138
  __tablename__ = "platform_message_history"
137
139
 
138
- id: int = Field(primary_key=True, sa_column_kwargs={"autoincrement": True})
140
+ id: int | None = Field(
141
+ primary_key=True, sa_column_kwargs={"autoincrement": True}, default=None
142
+ )
139
143
  platform_id: str = Field(nullable=False)
140
144
  user_id: str = Field(nullable=False) # An id of group, user in platform
141
145
  sender_id: Optional[str] = Field(default=None) # ID of the sender in the platform
@@ -158,8 +162,8 @@ class Attachment(SQLModel, table=True):
158
162
 
159
163
  __tablename__ = "attachments"
160
164
 
161
- inner_attachment_id: int = Field(
162
- primary_key=True, sa_column_kwargs={"autoincrement": True}
165
+ inner_attachment_id: int | None = Field(
166
+ primary_key=True, sa_column_kwargs={"autoincrement": True}, default=None
163
167
  )
164
168
  attachment_id: str = Field(
165
169
  max_length=36,
@@ -15,10 +15,8 @@ from astrbot.core.db.po import (
15
15
  SQLModel,
16
16
  )
17
17
 
18
- from sqlalchemy import select, update, delete, text
18
+ from sqlmodel import select, update, delete, text, func, or_, desc, col
19
19
  from sqlalchemy.ext.asyncio import AsyncSession
20
- from sqlalchemy.sql import func
21
- from sqlalchemy import or_
22
20
 
23
21
  NOT_GIVEN = T.TypeVar("NOT_GIVEN")
24
22
 
@@ -42,10 +40,10 @@ class SQLiteDatabase(BaseDatabase):
42
40
 
43
41
  async def insert_platform_stats(
44
42
  self,
45
- platform_id: str,
46
- platform_type: str,
47
- count: int = 1,
48
- timestamp: datetime = None,
43
+ platform_id,
44
+ platform_type,
45
+ count=1,
46
+ timestamp=None,
49
47
  ) -> None:
50
48
  """Insert a new platform statistic record."""
51
49
  async with self.get_db() as session:
@@ -76,7 +74,9 @@ class SQLiteDatabase(BaseDatabase):
76
74
  async with self.get_db() as session:
77
75
  session: AsyncSession
78
76
  result = await session.execute(
79
- select(func.count(PlatformStat.platform_id)).select_from(PlatformStat)
77
+ select(func.count(col(PlatformStat.platform_id))).select_from(
78
+ PlatformStat
79
+ )
80
80
  )
81
81
  count = result.scalar_one_or_none()
82
82
  return count if count is not None else 0
@@ -96,7 +96,7 @@ class SQLiteDatabase(BaseDatabase):
96
96
  """),
97
97
  {"start_time": start_time},
98
98
  )
99
- return result.scalars().all()
99
+ return list(result.scalars().all())
100
100
 
101
101
  # ====
102
102
  # Conversation Management
@@ -112,7 +112,7 @@ class SQLiteDatabase(BaseDatabase):
112
112
  if platform_id:
113
113
  query = query.where(ConversationV2.platform_id == platform_id)
114
114
  # order by
115
- query = query.order_by(ConversationV2.created_at.desc())
115
+ query = query.order_by(desc(ConversationV2.created_at))
116
116
  result = await session.execute(query)
117
117
 
118
118
  return result.scalars().all()
@@ -130,7 +130,7 @@ class SQLiteDatabase(BaseDatabase):
130
130
  offset = (page - 1) * page_size
131
131
  result = await session.execute(
132
132
  select(ConversationV2)
133
- .order_by(ConversationV2.created_at.desc())
133
+ .order_by(desc(ConversationV2.created_at))
134
134
  .offset(offset)
135
135
  .limit(page_size)
136
136
  )
@@ -151,25 +151,25 @@ class SQLiteDatabase(BaseDatabase):
151
151
 
152
152
  if platform_ids:
153
153
  base_query = base_query.where(
154
- ConversationV2.platform_id.in_(platform_ids)
154
+ col(ConversationV2.platform_id).in_(platform_ids)
155
155
  )
156
156
  if search_query:
157
157
  search_query = search_query.encode("unicode_escape").decode("utf-8")
158
158
  base_query = base_query.where(
159
159
  or_(
160
- ConversationV2.title.ilike(f"%{search_query}%"),
161
- ConversationV2.content.ilike(f"%{search_query}%"),
162
- ConversationV2.user_id.ilike(f"%{search_query}%"),
160
+ col(ConversationV2.title).ilike(f"%{search_query}%"),
161
+ col(ConversationV2.content).ilike(f"%{search_query}%"),
162
+ col(ConversationV2.user_id).ilike(f"%{search_query}%"),
163
163
  )
164
164
  )
165
165
  if "message_types" in kwargs and len(kwargs["message_types"]) > 0:
166
166
  for msg_type in kwargs["message_types"]:
167
167
  base_query = base_query.where(
168
- ConversationV2.user_id.ilike(f"%:{msg_type}:%")
168
+ col(ConversationV2.user_id).ilike(f"%:{msg_type}:%")
169
169
  )
170
170
  if "platforms" in kwargs and len(kwargs["platforms"]) > 0:
171
171
  base_query = base_query.where(
172
- ConversationV2.platform_id.in_(kwargs["platforms"])
172
+ col(ConversationV2.platform_id).in_(kwargs["platforms"])
173
173
  )
174
174
 
175
175
  # Get total count matching the filters
@@ -180,7 +180,7 @@ class SQLiteDatabase(BaseDatabase):
180
180
  # Get paginated results
181
181
  offset = (page - 1) * page_size
182
182
  result_query = (
183
- base_query.order_by(ConversationV2.created_at.desc())
183
+ base_query.order_by(desc(ConversationV2.created_at))
184
184
  .offset(offset)
185
185
  .limit(page_size)
186
186
  )
@@ -226,7 +226,7 @@ class SQLiteDatabase(BaseDatabase):
226
226
  session: AsyncSession
227
227
  async with session.begin():
228
228
  query = update(ConversationV2).where(
229
- ConversationV2.conversation_id == cid
229
+ col(ConversationV2.conversation_id) == cid
230
230
  )
231
231
  values = {}
232
232
  if title is not None:
@@ -246,7 +246,9 @@ class SQLiteDatabase(BaseDatabase):
246
246
  session: AsyncSession
247
247
  async with session.begin():
248
248
  await session.execute(
249
- delete(ConversationV2).where(ConversationV2.conversation_id == cid)
249
+ delete(ConversationV2).where(
250
+ col(ConversationV2.conversation_id) == cid
251
+ )
250
252
  )
251
253
 
252
254
  async def delete_conversations_by_user_id(self, user_id: str) -> None:
@@ -254,8 +256,115 @@ class SQLiteDatabase(BaseDatabase):
254
256
  session: AsyncSession
255
257
  async with session.begin():
256
258
  await session.execute(
257
- delete(ConversationV2).where(ConversationV2.user_id == user_id)
259
+ delete(ConversationV2).where(col(ConversationV2.user_id) == user_id)
260
+ )
261
+
262
+ async def get_session_conversations(
263
+ self,
264
+ page=1,
265
+ page_size=20,
266
+ search_query=None,
267
+ platform=None,
268
+ ) -> tuple[list[dict], int]:
269
+ """Get paginated session conversations with joined conversation and persona details."""
270
+ async with self.get_db() as session:
271
+ session: AsyncSession
272
+ offset = (page - 1) * page_size
273
+
274
+ base_query = (
275
+ select(
276
+ col(Preference.scope_id).label("session_id"),
277
+ func.json_extract(Preference.value, "$.val").label(
278
+ "conversation_id"
279
+ ), # type: ignore
280
+ col(ConversationV2.persona_id).label("persona_id"),
281
+ col(ConversationV2.title).label("title"),
282
+ col(Persona.persona_id).label("persona_name"),
283
+ )
284
+ .select_from(Preference)
285
+ .outerjoin(
286
+ ConversationV2,
287
+ func.json_extract(Preference.value, "$.val")
288
+ == ConversationV2.conversation_id,
289
+ )
290
+ .outerjoin(
291
+ Persona, col(ConversationV2.persona_id) == Persona.persona_id
258
292
  )
293
+ .where(Preference.scope == "umo", Preference.key == "sel_conv_id")
294
+ )
295
+
296
+ # 搜索筛选
297
+ if search_query:
298
+ search_pattern = f"%{search_query}%"
299
+ base_query = base_query.where(
300
+ or_(
301
+ col(Preference.scope_id).ilike(search_pattern),
302
+ col(ConversationV2.title).ilike(search_pattern),
303
+ col(Persona.persona_id).ilike(search_pattern),
304
+ )
305
+ )
306
+
307
+ # 平台筛选
308
+ if platform:
309
+ platform_pattern = f"{platform}:%"
310
+ base_query = base_query.where(
311
+ col(Preference.scope_id).like(platform_pattern)
312
+ )
313
+
314
+ # 排序
315
+ base_query = base_query.order_by(Preference.scope_id)
316
+
317
+ # 分页结果
318
+ result_query = base_query.offset(offset).limit(page_size)
319
+ result = await session.execute(result_query)
320
+ rows = result.fetchall()
321
+
322
+ # 查询总数(应用相同的筛选条件)
323
+ count_base_query = (
324
+ select(func.count(col(Preference.scope_id)))
325
+ .select_from(Preference)
326
+ .outerjoin(
327
+ ConversationV2,
328
+ func.json_extract(Preference.value, "$.val")
329
+ == ConversationV2.conversation_id,
330
+ )
331
+ .outerjoin(
332
+ Persona, col(ConversationV2.persona_id) == Persona.persona_id
333
+ )
334
+ .where(Preference.scope == "umo", Preference.key == "sel_conv_id")
335
+ )
336
+
337
+ # 应用相同的搜索和平台筛选条件到计数查询
338
+ if search_query:
339
+ search_pattern = f"%{search_query}%"
340
+ count_base_query = count_base_query.where(
341
+ or_(
342
+ col(Preference.scope_id).ilike(search_pattern),
343
+ col(ConversationV2.title).ilike(search_pattern),
344
+ col(Persona.persona_id).ilike(search_pattern),
345
+ )
346
+ )
347
+
348
+ if platform:
349
+ platform_pattern = f"{platform}:%"
350
+ count_base_query = count_base_query.where(
351
+ col(Preference.scope_id).like(platform_pattern)
352
+ )
353
+
354
+ total_result = await session.execute(count_base_query)
355
+ total = total_result.scalar() or 0
356
+
357
+ sessions_data = [
358
+ {
359
+ "session_id": row.session_id,
360
+ "conversation_id": row.conversation_id,
361
+ "persona_id": row.persona_id,
362
+ "title": row.title,
363
+ "persona_name": row.persona_name,
364
+ }
365
+ for row in rows
366
+ ]
367
+ return sessions_data, total
259
368
 
260
369
  async def insert_platform_message_history(
261
370
  self,
@@ -290,9 +399,9 @@ class SQLiteDatabase(BaseDatabase):
290
399
  cutoff_time = now - timedelta(seconds=offset_sec)
291
400
  await session.execute(
292
401
  delete(PlatformMessageHistory).where(
293
- PlatformMessageHistory.platform_id == platform_id,
294
- PlatformMessageHistory.user_id == user_id,
295
- PlatformMessageHistory.created_at < cutoff_time,
402
+ col(PlatformMessageHistory.platform_id) == platform_id,
403
+ col(PlatformMessageHistory.user_id) == user_id,
404
+ col(PlatformMessageHistory.created_at) < cutoff_time,
296
405
  )
297
406
  )
298
407
 
@@ -309,7 +418,7 @@ class SQLiteDatabase(BaseDatabase):
309
418
  PlatformMessageHistory.platform_id == platform_id,
310
419
  PlatformMessageHistory.user_id == user_id,
311
420
  )
312
- .order_by(PlatformMessageHistory.created_at.desc())
421
+ .order_by(desc(PlatformMessageHistory.created_at))
313
422
  )
314
423
  result = await session.execute(query.offset(offset).limit(page_size))
315
424
  return result.scalars().all()
@@ -331,7 +440,7 @@ class SQLiteDatabase(BaseDatabase):
331
440
  """Get an attachment by its ID."""
332
441
  async with self.get_db() as session:
333
442
  session: AsyncSession
334
- query = select(Attachment).where(Attachment.id == attachment_id)
443
+ query = select(Attachment).where(Attachment.attachment_id == attachment_id)
335
444
  result = await session.execute(query)
336
445
  return result.scalar_one_or_none()
337
446
 
@@ -374,7 +483,7 @@ class SQLiteDatabase(BaseDatabase):
374
483
  async with self.get_db() as session:
375
484
  session: AsyncSession
376
485
  async with session.begin():
377
- query = update(Persona).where(Persona.persona_id == persona_id)
486
+ query = update(Persona).where(col(Persona.persona_id) == persona_id)
378
487
  values = {}
379
488
  if system_prompt is not None:
380
489
  values["system_prompt"] = system_prompt
@@ -394,7 +503,7 @@ class SQLiteDatabase(BaseDatabase):
394
503
  session: AsyncSession
395
504
  async with session.begin():
396
505
  await session.execute(
397
- delete(Persona).where(Persona.persona_id == persona_id)
506
+ delete(Persona).where(col(Persona.persona_id) == persona_id)
398
507
  )
399
508
 
400
509
  async def insert_preference_or_update(self, scope, scope_id, key, value):
@@ -449,9 +558,9 @@ class SQLiteDatabase(BaseDatabase):
449
558
  async with session.begin():
450
559
  await session.execute(
451
560
  delete(Preference).where(
452
- Preference.scope == scope,
453
- Preference.scope_id == scope_id,
454
- Preference.key == key,
561
+ col(Preference.scope) == scope,
562
+ col(Preference.scope_id) == scope_id,
563
+ col(Preference.key) == key,
455
564
  )
456
565
  )
457
566
  await session.commit()
@@ -463,7 +572,8 @@ class SQLiteDatabase(BaseDatabase):
463
572
  async with session.begin():
464
573
  await session.execute(
465
574
  delete(Preference).where(
466
- Preference.scope == scope, Preference.scope_id == scope_id
575
+ col(Preference.scope) == scope,
576
+ col(Preference.scope_id) == scope_id,
467
577
  )
468
578
  )
469
579
  await session.commit()
@@ -490,7 +600,7 @@ class SQLiteDatabase(BaseDatabase):
490
600
  DeprecatedPlatformStat(
491
601
  name=data.platform_id,
492
602
  count=data.count,
493
- timestamp=data.timestamp.timestamp(),
603
+ timestamp=int(data.timestamp.timestamp()),
494
604
  )
495
605
  )
496
606
  return deprecated_stats
@@ -548,7 +658,7 @@ class SQLiteDatabase(BaseDatabase):
548
658
  DeprecatedPlatformStat(
549
659
  name=platform_id,
550
660
  count=count,
551
- timestamp=start_time.timestamp(),
661
+ timestamp=int(start_time.timestamp()),
552
662
  )
553
663
  )
554
664
  return deprecated_stats
@@ -1,5 +1,6 @@
1
1
  import traceback
2
2
  import asyncio
3
+ import random
3
4
  from typing import Union, AsyncGenerator
4
5
  from ..stage import Stage, register_stage
5
6
  from ..context import PipelineContext
@@ -22,6 +23,26 @@ class PreProcessStage(Stage):
22
23
  self, event: AstrMessageEvent
23
24
  ) -> Union[None, AsyncGenerator[None, None]]:
24
25
  """在处理事件之前的预处理"""
26
+ # 平台特异配置:platform_specific.<platform>.pre_ack_emoji
27
+ supported = {"telegram", "lark"}
28
+ platform = event.get_platform_name()
29
+ cfg = (
30
+ self.config.get("platform_specific", {})
31
+ .get(platform, {})
32
+ .get("pre_ack_emoji", {})
33
+ ) or {}
34
+ emojis = cfg.get("emojis") or []
35
+ if (
36
+ cfg.get("enable", False)
37
+ and platform in supported
38
+ and emojis
39
+ and event.is_at_or_wake_command
40
+ ):
41
+ try:
42
+ await event.react(random.choice(emojis))
43
+ except Exception as e:
44
+ logger.warning(f"{platform} 预回应表情发送失败: {e}")
45
+
25
46
  # 路径映射
26
47
  if mappings := self.platform_settings.get("path_mapping", []):
27
48
  # 支持 Record,Image 消息段的路径映射。
@@ -46,6 +67,9 @@ class PreProcessStage(Stage):
46
67
  ctx = self.plugin_manager.context
47
68
  stt_provider = ctx.get_using_stt_provider(event.unified_msg_origin)
48
69
  if not stt_provider:
70
+ logger.warning(
71
+ f"会话 {event.unified_msg_origin} 未配置语音转文本模型。"
72
+ )
49
73
  return
50
74
  message_chain = event.get_messages()
51
75
  for idx, component in enumerate(message_chain):
@@ -183,9 +183,13 @@ class ResultDecorateStage(Stage):
183
183
  if (
184
184
  self.ctx.astrbot_config["provider_tts_settings"]["enable"]
185
185
  and result.is_llm_result()
186
- and tts_provider
187
186
  and SessionServiceManager.should_process_tts_request(event)
188
187
  ):
188
+ if not tts_provider:
189
+ logger.warning(
190
+ f"会话 {event.unified_msg_origin} 未配置文本转语音模型。"
191
+ )
192
+ return
189
193
  new_chain = []
190
194
  for comp in result.chain:
191
195
  if isinstance(comp, Plain) and len(comp.text) > 1:
@@ -416,6 +416,16 @@ class AstrMessageEvent(abc.ABC):
416
416
  )
417
417
  self._has_send_oper = True
418
418
 
419
+ async def react(self, emoji: str):
420
+ """
421
+ 对消息添加表情回应。
422
+
423
+ 默认实现为发送一条包含该表情的消息。
424
+ 注意:此实现并不一定符合所有平台的原生“表情回应”行为。
425
+ 如需支持平台原生的消息反应功能,请在对应平台的子类中重写本方法。
426
+ """
427
+ await self.send(MessageChain([Plain(emoji)]))
428
+
419
429
  async def get_group(self, group_id: str = None, **kwargs) -> Optional[Group]:
420
430
  """获取一个群聊的数据, 如果不填写 group_id: 如果是私聊消息,返回 None。如果是群聊消息,返回当前群聊的数据。
421
431