Commit Graph

884 Commits

Author SHA1 Message Date
Furina-1013-create
de48d2ae02 将回复规则部分的提示词让用户可以自定义,详细请看配置文件 2025-09-22 22:44:15 +08:00
minecraft1024a
cf0ee62c9a Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev 2025-09-21 13:30:30 +08:00
minecraft1024a
742a8c2c37 feat(plugin_system): 导出 schedule_api
将 schedule_api 添加到插件系统的 API 导出列表中,使其对插件可用。
2025-09-21 13:30:27 +08:00
雅诺狐
e7c5a7a2bb Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev 2025-09-21 13:09:48 +08:00
雅诺狐
df809b6dc3 更改权限 2025-09-21 13:09:29 +08:00
minecraft1024a
798f6fde12 Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev 2025-09-21 13:05:16 +08:00
minecraft1024a
016979b6c8 feat(db): 增强数据库自动迁移功能以支持索引创建
重构并增强了数据库自动迁移逻辑,以提供更健壮和全面的模式管理。

主要更新包括:
- **支持索引创建**: 迁移脚本现在会自动检测并创建模型中定义但数据库中缺失的索引。
- **重构迁移流程**:
  1.  首先一次性创建所有缺失的表,提高初始设置效率。
  2.  然后,逐表检查并添加缺失的列和索引,使逻辑更清晰。
- **改进 SQLAlchemy 用法**:
  - 使用 `AddColumn` 和 `CreateIndex` DDL 结构代替原始 SQL 字符串,提高了代码的可读性和数据库方言的兼容性。
  - 优化了 `inspector` 的使用方式,减少了重复调用。
- **增强日志记录**: 提供了更详细的日志输出,清晰地展示了正在执行的操作(如创建表、添加列、创建索引),并改进了错误报告。
2025-09-21 13:05:13 +08:00
雅诺狐
bd94ce1ce5 Update utils_video.py 2025-09-21 10:32:15 +08:00
雅诺狐
d529822191 Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev 2025-09-21 09:59:43 +08:00
雅诺狐
0efbc6dbfe 更新视频识别 2025-09-21 09:59:39 +08:00
minecraft1024a
50f8273053 Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev 2025-09-20 22:21:43 +08:00
minecraft1024a
a9a9f380d6 refactor(person_info): 引入同步方法 get_value 并替换旧的 get_value_sync(因为根本就没有这个方法)
为了解决在不同异步上下文中同步调用数据库可能引发的运行时错误,实现了一个新的、更健壮的同步方法 `PersonInfoManager.get_value`。

- 新方法能够正确处理已在运行的 asyncio 事件循环,提高了在混合代码环境中调用的稳定性。
- 全面替换了原有的 `get_value_sync` 方法调用,统一了同步获取用户信息的接口。
2025-09-20 22:21:35 +08:00
tt-P607
0286d75228 fix(emoji): 修正对同步函数的 await 调用
`get_recent_emojis` 和 `add_emoji_to_history` 函数已被重构为同步方法。本次提交移除了对这两个函数不必要的 `await` 调用,以修复由此引发的 `TypeError`。
2025-09-20 22:12:07 +08:00
tt-P607
ca780919a8 fix(core): 修正因异步改造遗漏的 await 调用
在最近的数据库异步化重构后,部分函数的调用处忘记添加 `await` 关键字,导致协程未被正确执行。

本次提交修复了以下模块中的问题:
- `ExpressionLearner`
- `ChatMessageBuilder`
- `EmojiAction
2025-09-20 22:04:43 +08:00
minecraft1024a
b42608c49a 也许是修好了表达学习吧 2025-09-20 20:45:56 +08:00
雅诺狐
4fcaa8e7fb 移出Rust组件 2025-09-20 18:36:02 +08:00
雅诺狐
4ca2dfe65a refactor(chat): 优化自消息处理逻辑和回复目标选择机制
- 添加自消息阻断机制,避免机器人回复自己的消息
- 重构回复目标选择逻辑,优先选择非机器人用户的消息作为回复目标
2025-09-20 18:08:07 +08:00
雅诺狐
43c93a0e04 Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev 2025-09-20 17:26:52 +08:00
雅诺狐
832743249d refactor(db): 修正SQLAlchemy异步操作调用方式
移除session.add()方法的不必要await调用,修正异步数据库操作模式。主要变更包括:

- 将 `await session.add()` 统一改为 `session.add()`
- 修正部分函数调用为异步版本(如消息查询函数)
- 重构SQLAlchemyTransaction为完全异步实现
- 重写napcat_adapter_plugin数据库层以符合异步规范
- 添加aiomysql和aiosqlite依赖支持
2025-09-20 17:26:28 +08:00
雅诺狐
5f3203c6c9 refactor(db): 修正SQLAlchemy异步操作调用方式
移除session.add()方法的不必要await调用,修正异步数据库操作模式。主要变更包括:

- 将 `await session.add()` 统一改为 `session.add()`
- 修正部分函数调用为异步版本(如消息查询函数)
- 重构SQLAlchemyTransaction为完全异步实现
- 重写napcat_adapter_plugin数据库层以符合异步规范
- 添加aiomysql和aiosqlite依赖支持
2025-09-20 17:25:48 +08:00
雅诺狐
55717669dd refactor(db): 将数据库操作异步化
- 将所有 session.add() 改为 await session.add()
- 将所有 session.commit() 改为 await session.commit()
- 将 session.refresh() 改为 await session.refresh()
2025-09-20 14:35:31 +08:00
雅诺狐
816ce9805c Update base_action.py 2025-09-20 14:18:53 +08:00
tt-P607
e2e0d3c30a refactor(core): 适配核心数据获取与消息构建函数的异步调用
在数据库交互层异步化后,多个相关的数据获取和消息构建函数(如 `build_readable_messages`)也转为异步实现。本次提交在所有调用点添加了 `await` 关键字,以适应这一变化。

此外,本次提交还包含以下修复:
- 在主动思考模块中增加了对规划器返回无效动作的检查,避免后续流程出错。
- 修正了日志记录中错误的上下文变量引用。
2025-09-20 13:52:37 +08:00
tt-P607
8d9aa4fb9e refactor(db): 重构数据库交互为异步模式
为了提升性能并与项目整体的异步架构保持一致,对核心数据库交互模块进行了异步化重构。

主要修改内容包括:
- 将 `PermissionManager` 中的所有数据库操作从同步改为异步,以避免阻塞事件循环。
- 使用 `async_sessionmaker` 和 `async with session` 替代原有的同步会话管理。
- 将 SQLAlchemy 查询语法更新为异步兼容的 `await session.execute(select(...))` 模式。
- 相应地,调用链中依赖数据库操作的多个方法也已更新为 `async` 函数。
2025-09-20 13:07:06 +08:00
tt-P607
57b2e32ba0 Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev 2025-09-20 12:43:42 +08:00
tt-P607
6b5bf02382 总算能回复了😭😭😭 2025-09-20 12:43:37 +08:00
雅诺狐
7777e1ec71 Update message.py 2025-09-20 12:38:24 +08:00
雅诺狐
d22b3b71fe 小修复 2025-09-20 12:31:05 +08:00
tt-P607
a2b9f963e4 Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev 2025-09-20 12:26:38 +08:00
tt-P607
74a9c346f0 6 2025-09-20 12:26:31 +08:00
tt-P607
9b2addfd86 5 2025-09-20 12:22:15 +08:00
tt-P607
a8992cdd51 4次修改 2025-09-20 11:57:22 +08:00
雅诺狐
788190fb11 将AFC合并至Master分支 2025-09-20 11:45:59 +08:00
雅诺狐
898208f425 perf(methods): 通过移除不必要的 self 参数优化方法签名
在包括 chat、plugin_system、schedule 和 mais4u 在内的多个模块中,消除冗余的实例引用。此次改动将无需访问实例状态的实用函数转换为静态方法,从而提升了内存效率,并使方法依赖关系更加清晰。
2025-09-20 10:55:06 +08:00
tt-P607
0cc4f5bb27 三次修改 2025-09-20 02:21:53 +08:00
雅诺狐
6a98ae6208 二次修改 2025-09-19 20:45:26 +08:00
雅诺狐
4dbc651d74 数据库异步支持
仅仅支持还有107处待迁移
2025-09-19 20:20:20 +08:00
minecraft1024a
5a0a63464a Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev 2025-09-19 19:01:00 +08:00
tt-P607
437d804efd feat(napcat): 支持音乐分享卡片并增强消息兼容性
新增对 NapCat 框架音乐分享类型消息的解析支持。现在可以正确识别并提取音乐卡片中的歌曲、歌手、来源和封面等信息,并将其格式化为图文消息进行展示。

此外,增强了消息接收的兼容性。对于缺少 `post_type` 字段但包含 `message_type` 的普通消息,会自动补充 `post_type` 字段,确保其能被正常路由和处理,避免消息丢失。
2025-09-18 15:06:55 +08:00
tt-P607
bd8859ed82 回退“feat: 实现KEYWORD_OR_LLM_JUDGE激活类型” 2025-09-17 22:43:01 +08:00
tt-P607
722790d830 feat(plugins): 新增网易云音乐点歌插件
新增一个内置的音乐点歌插件,允许用户通过自然语言或特定命令搜索和分享来自网易云音乐的歌曲。

- **双模触发**: 支持通过关键词(如“点歌”、“来首歌”)自动激活的 Action 组件和通过 `/music <歌曲名>` 命令精确触发的 Command 组件。
- **API集成**: 集成了第三方网易云音乐API,用于搜索歌曲信息,并包含重试机制以提高稳定性。
- **丰富的消息类型**: 能够将搜索结果以标准的音乐卡片形式发送给用户,提升交互体验。
- **高度可配置**: 插件提供了详细的配置文件,允许用户自定义API地址、超时时间、功能开关(如是否显示专辑封面、是否以语音形式发送)等。
- **完整的插件结构**: 包含了 `_manifest.json`、`README.md` 和 `LICENSE` 文件,符合插件规范,提供了清晰的文档和许可证信息。
2025-09-17 20:59:31 +08:00
tt-P607
f5435cabd7 feat(actions): 增强音乐搜索,从LLM回复中提取确切歌名
为了提高音乐播放的准确性,引入了一种新机制,可根据 LLM 生成的回复动态更新音乐搜索动作。

在某些场景下,Planner 生成的 `music_search` 动作可能只包含一个模糊的意图,而 LLM 在其回复文本中会明确指出要播放的具体歌曲(例如,“好的,为您播放《晴天》”)。

此变更通过以下方式解决了这个问题:
- 新增 `_extract_song_name_from_reply` 辅助函数,用于从回复文本中解析书名号《》内的歌名。
- 在执行并行附加动作前,系统会尝试从主回复中提取歌名。
- 如果成功提取,该歌名将被注入 `music_search` 动作的参数中,确保执行的搜索与 LLM 的意图完全一致。
2025-09-17 20:51:53 +08:00
tt-P607
f7b4263f87 feat(planner): 引入双模动作激活机制与混合触发类型
为了更精细地控制动作在不同聊天模式下的行为,并提升决策效率,本次更新引入了全新的动作激活机制。

- **双模激活**: 为 Action 新增 `normal_activation_type` 和 `focus_activation_type` 属性,允许插件在 `NORMAL` 和 `FOCUS` 模式下拥有不同的激活策略,使行为更符合上下文。

- **混合触发**: 新增 `KEYWORD_OR_LLM_JUDGE` 激活类型。该类型会先进行快速的关键词匹配,若未匹配成功,则回退至 LLM 进行判断,兼顾了响应速度和智能化。

- **流程优化**: 重构了 `PlanGenerator` 的动作筛选逻辑,使其在生成计划前,就根据当前聊天模式和简单的激活规则进行预筛选,为后续的 LLM 决策提供更精准、更高效的候选动作列表。
2025-09-17 20:27:19 +08:00
tt-P607
66899208a6 feat(tarots): 新增塔罗牌占卜插件
新增了一个功能完备的塔罗牌占卜插件,为机器人增加了娱乐和互动能力。

主要功能包括:

- **自然语言交互**:通过 Action 响应用户的抽牌请求,并由大模型进行个性化解牌。
- **多牌组与牌阵**:内置B站幻星集、经典韦特和东方塔罗牌组,支持单张、圣三角等多种牌阵。
- **智能图片缓存**:自动从网络下载并缓存卡牌图片,具备完整性校验和代理支持,提升响应速度。
- **管理指令**:提供 `/tarots` 指令,方便管理员一键缓存所有图片和切换当前使用的牌组。
2025-09-17 15:27:23 +08:00
tt-P607
9f1b62a63a feat(reminder): 增强自然语言时间解析的智能化
更新了用于时间转换的LLM提示词,增加了更智能的推断规则,以更准确地处理模糊的时间表述。

主要改进:
- 根据当前时间上下文推断上午/下午。例如,在下午说“8点”,将被理解为当晚20:00。
- 当解析出的时间早于当前时间时,自动将提醒设置为第二天,避免创建无效的过去提醒。
2025-09-16 15:34:01 +08:00
tt-P607
31ede52be9 fix(reminder): 修复多条提醒消息重复@用户的问题
当提醒消息被分割成多段发送时,旧的逻辑会导致每一段消息都@目标用户。

本次修改调整了消息构造逻辑,确保只有第一段消息会包含@提醒,避免在群聊中造成不必要的刷屏。
2025-09-16 15:27:54 +08:00
tt-P607
2fba610bb7 feat(reminder): 使用 LLM 生成个性化提醒消息
将提醒插件中的确认消息和提醒通知改为通过 `generator_api` 调用 LLM 生成,以提供更具个性和符合人设的互动体验。

- **动态确认消息**: 在用户成功设置提醒后,调用 LLM 生成一条生动的确认回复,取代了原有的固定文本。
- **动态提醒内容**: 在提醒任务触发时,调用 LLM 根据提醒内容、设置者和被提醒者信息生成一条定制化的提醒消息。
- **回退机制**: 为确保核心功能的稳定性,在 LLM 调用失败或未返回有效内容时,系统将自动回退到原有的硬编码模板消息。
2025-09-16 15:12:25 +08:00
tt-P607
3603d5ec61 feat(reminder): 提升提醒功能的用户识别与意图理解
为提升提醒插件的可用性和准确性,进行了两项主要增强:

1.  **优化意图提取Prompt**:向LLM提供了Bot自身名称,并增加了示例,指导其更准确地识别提醒的真正目标,避免将Bot误认为被提醒人。
2.  **引入多级用户匹配机制**:在原有的精确名称匹配基础上,增加了子字符串包含匹配和基于`difflib`的模糊匹配,大幅提高了在用户名称输入不完全或有误时成功设置提醒的概率。
2025-09-16 14:37:34 +08:00
tt-P607
890cedc1ed feat(planner): 重构动作决策逻辑与参数提取机制
本次提交对动作规划器(Planner)和动作(Action)的执行流程进行了重大重构,旨在提高决策的准确性和可靠性,使机器人能更精确地响应用户指令。

核心变更:
- **决策与参数提取分离**: 规划器(Planner)现在专注于根据用户意图选择最合适的动作,不再负责提取动作参数。
- **动作参数自解析**: `RemindAction` 等动作现在通过内部调用 LLM,从用户消息中自行解析所需参数,使其更加独立和健壮。
- **优化决策Prompt**: 引入“最高优先级检查”和“互斥原则”,强制优先执行由明确意图触发的特定动作(如 `set_reminder`),并在此情况下禁止选择 `reply`,避免重复响应。
- **增强调试**: 在处理循环中增加了日志,以清晰地记录LLM最终选择的动作组合,方便调试。
2025-09-16 14:00:33 +08:00
tt-P607
7a1e7218f2 fix(chat): 优化线程环境下的同步数据库调用逻辑
重构了 `_sync_db_get` 函数,以解决在复杂线程和事件循环场景下可能出现的死锁和不稳定性问题。

旧的实现逻辑过于复杂,试图处理多种事件循环状态,容易出错。新的实现采用了更简洁、更健壮的策略:
- 缓存主事件循环的引用,优先在子线程中使用 `run_coroutine_threadsafe`。
- 当无法使用主循环或在主线程中时,回退到使用 `asyncio.run()` 创建新循环来执行异步任务,这是一种更安全的模式。
- 增加了保护措施,避免在已运行的主事件循环中调用时造成阻塞。

此外,此提交还修复了日志记录器中可能添加空前缀导致格式异常的小问题。
2025-09-16 11:47:27 +08:00