Commit Graph

4668 Commits

Author SHA1 Message Date
minecraft1024a
afce3799ac ci(workflow): 移除自动创建预发布的工作流
该工作流会在每次推送到 master 分支时创建一个预发布版本,现已不再需要此自动化流程。
2025-11-19 23:05:37 +08:00
minecraft1024a
0b474327c1 refactor(config): 移除 breaking 模式配置项
随着 breaking 模式相关逻辑被移除,其配置项已不再需要。
本次提交从配置文件模板中删除了 `enable_breaking_mode` 选项,并更新了内部版本号。
2025-11-19 23:05:37 +08:00
minecraft1024a
77e2e549bd ci(workflow): 为预发布标签添加 'MoFox-' 前缀 2025-11-19 23:05:37 +08:00
tt-P607
f3b3e60c1c feat(chat): 增加已读标记以聚焦未读消息
为聊天上下文生成逻辑引入了“已读标记” (read_mark) 机制。

当生成回复时,可以在历史消息中插入一个明确的分隔符,以告知模型哪些消息是它已经看过的旧消息,哪些是需要关注的新消息。

这有助于模型更好地聚焦于未读内容,提升上下文感知能力和回复的相关性。

同时,将 Prompt 模板中的“群聊”等硬编码文本参数化,以更好地适配私聊等不同聊天场景。
2025-11-19 23:05:36 +08:00
tt-P607
f515bf679e refactor(chat): 移除 breaking 模式下复杂的消息等待机制
原有的 breaking 模式等待逻辑过于复杂,它会累积新消息的兴趣值,并根据动态阈值(受专注度和发言频率影响)决定何时响应。这种机制可能导致响应延迟且行为难以预测。

本次重构完全移除了该等待与累积机制。现在,系统一旦收到任何新消息,就会立即处理并计算其平均兴趣值,从而确保了响应的及时性和逻辑的简洁性。
2025-11-19 23:05:36 +08:00
minecraft1024a
98fb7db4fa ci(workflow): 为预发布工作流添加写入权限
为 GITHUB_TOKEN 授予 `contents: write` 权限,以允许工作流创建 GitHub Release。
2025-11-19 23:05:35 +08:00
minecraft1024a
b171dc5847 fix(schedule): 修复日程生成在连续失败时无限重试的问题
先前的日程生成逻辑使用无限循环进行重试。在 LLM 服务持续失败或返回无效数据的情况下,这可能导致程序陷入死循环。

本次修改将重试机制改为有固定上限(3次)的循环。如果所有尝试均失败,将记录错误并返回 None,从而确保程序的健壮性。
2025-11-19 23:05:35 +08:00
minecraft1024a
6bf05fd660 fix(permission): 将权限管理器初始化改为异步
`PermissionManager` 的 `__init__` 方法中包含了同步的数据库初始化操作,这会在异步环境中阻塞事件循环。

本次提交将数据库连接的逻辑移至一个新的异步方法 `initialize()` 中,并在应用启动时显式调用和等待它。这确保了数据库的初始化过程是异步执行的,避免了潜在的性能问题。

BREAKING CHANGE: `PermissionManager` 实例化后需要手动调用并等待 `initialize()` 方法来完成数据库初始化。
2025-11-19 23:05:35 +08:00
minecraft1024a
ba91b99674 fix(db): 适配 SQLAlchemy 2.0 API 变更
更新了与数据库交互的代码,以适配 SQLAlchemy 2.0 引入的 API 变更,解决相关的废弃警告和异步调用问题。

主要变更包括:
- 使用 `scalars().first()` 替代已废弃的 `scalar()` 方法。
- 在获取所有标量结果时显式调用 `.all()`。
- 对异步引擎 `get_engine()` 的调用进行 `await`。
- 移除了向 Inspector 方法(如 `get_table_names`)传递多余的 `conn` 参数。
2025-11-19 23:05:34 +08:00
minecraft1024a
83eb5c80c5 fix(plugin_system): 修复无配置插件加载时产生不必要警告
对于未定义 `config_schema` 的插件,现在会将其视作一种正常情况,并为其分配一个空的配置。

此举修复了先前版本中,这类插件在加载时会错误地触发“配置文件不存在”警告的问题。同时将生成默认配置文件的日志等级从 debug 调整为 info,使其在默认情况下可见。
2025-11-19 23:05:34 +08:00
minecraft1024a
d3f88ce981 ***数据库怎么有虫子啊 2025-11-19 23:05:34 +08:00
Furina-1013-create
ff9405cfb7 ?
如果国家立法禁止🥬🖊️打音游
相传,有一个理想国

理想国有一套完善的法律法规,其中就包含🥬🖊️不能打音游

每个孩子出生后,科学家都会用一个底力检测设备检测TA的底力

如果底力足够高,国王会为TA举办一个神圣的颁奖典礼,允许TA踏入神圣的音游殿堂,这是对TA底力的肯定

如果底力过低,亲朋好友都松了一口气,因为这意味着这个孩子将免受音游的折磨

毕竟🥬🖊️是不能打音游的

但这个国家有一个神秘的传说

那就是其实被挑选去打音游的孩子,其实早就被国王献祭了!

证据一目了然,每个周末和寒暑假,人们上街娱乐散步,从未有人见过打音游的

可人怎么能没有周末和寒暑假呢?不打音游的人苦思冥想

最终得出结论:那些打音游的,一定是被国王献祭了

-

凌晨三点,一个音游人激动地从机厅走出来

他的口中喃喃自语:噫,好!我P了!

静谧的夜,大家都睡了

只有路过的环卫工人看到他疯癫的样子,一眼就看出他是音游人

心中十分害怕,连忙跑回家,人们奔走相告:

原来音游人没死,他们只是疯了!

-

染上音游,就好像一辈子都在xing歌

打音游人在xing歌的轮回中,纷纷成了哲学家

有一天,一个音游哲学家陷入沉思:

国家禁止🥬🖊️打音游

但如果不是🥬🖊️的话,为什么要打音游来折磨自己?

由此可得,这条法规不成立

大彻大悟的音游人们意识到自己被欺骗了,承受了很多不必要的折磨

由于这地狱般生活的摧残,音游人们变成了反社会人格

愤怒之下,他们研发出炸药,炸平了理想国

毁灭了整个世界

-

几亿年后,这片土地进化出了新的文明

新的国家出现了

新的国家里有新的音游入,他们在日复一日的折磨中,怀疑自己的底力和手法,不明白自己为什么要受这样的折磨

不禁感叹:

唉!如果国家禁止🥬🖊️打音游就好了!
2025-11-19 23:05:33 +08:00
Furina-1013-create
11e97a15ed 将回复规则部分的提示词让用户可以自定义,详细请看配置文件 2025-11-19 23:05:31 +08:00
雅诺狐
4091a4eadf 更改权限 2025-11-19 23:05:29 +08:00
minecraft1024a
28be81583e feat(plugin_system): 导出 schedule_api
将 schedule_api 添加到插件系统的 API 导出列表中,使其对插件可用。
2025-11-19 23:05:26 +08:00
雅诺狐
142a744ed0 Update utils_video.py 2025-11-19 23:05:24 +08:00
雅诺狐
e11a24b479 更新视频识别 2025-11-19 23:05:24 +08:00
minecraft1024a
c4a9a3fdb8 feat(db): 增强数据库自动迁移功能以支持索引创建
重构并增强了数据库自动迁移逻辑,以提供更健壮和全面的模式管理。

主要更新包括:
- **支持索引创建**: 迁移脚本现在会自动检测并创建模型中定义但数据库中缺失的索引。
- **重构迁移流程**:
  1.  首先一次性创建所有缺失的表,提高初始设置效率。
  2.  然后,逐表检查并添加缺失的列和索引,使逻辑更清晰。
- **改进 SQLAlchemy 用法**:
  - 使用 `AddColumn` 和 `CreateIndex` DDL 结构代替原始 SQL 字符串,提高了代码的可读性和数据库方言的兼容性。
  - 优化了 `inspector` 的使用方式,减少了重复调用。
- **增强日志记录**: 提供了更详细的日志输出,清晰地展示了正在执行的操作(如创建表、添加列、创建索引),并改进了错误报告。
2025-11-19 23:05:23 +08:00
tt-P607
8f7867c937 fix(emoji): 修正对同步函数的 await 调用
`get_recent_emojis` 和 `add_emoji_to_history` 函数已被重构为同步方法。本次提交移除了对这两个函数不必要的 `await` 调用,以修复由此引发的 `TypeError`。
2025-11-19 23:05:22 +08:00
tt-P607
26b9d02476 fix(core): 修正因异步改造遗漏的 await 调用
在最近的数据库异步化重构后,部分函数的调用处忘记添加 `await` 关键字,导致协程未被正确执行。

本次提交修复了以下模块中的问题:
- `ExpressionLearner`
- `ChatMessageBuilder`
- `EmojiAction
2025-11-19 23:05:22 +08:00
minecraft1024a
79baac2797 refactor(person_info): 引入同步方法 get_value 并替换旧的 get_value_sync(因为根本就没有这个方法)
为了解决在不同异步上下文中同步调用数据库可能引发的运行时错误,实现了一个新的、更健壮的同步方法 `PersonInfoManager.get_value`。

- 新方法能够正确处理已在运行的 asyncio 事件循环,提高了在混合代码环境中调用的稳定性。
- 全面替换了原有的 `get_value_sync` 方法调用,统一了同步获取用户信息的接口。
2025-11-19 23:05:20 +08:00
minecraft1024a
02067b6eeb 也许是修好了表达学习吧 2025-11-19 23:05:18 +08:00
雅诺狐
4deb3d63eb 移出Rust组件 2025-11-19 23:05:18 +08:00
雅诺狐
a82c16852f refactor(chat): 优化自消息处理逻辑和回复目标选择机制
- 添加自消息阻断机制,避免机器人回复自己的消息
- 重构回复目标选择逻辑,优先选择非机器人用户的消息作为回复目标
2025-11-19 23:05:18 +08:00
雅诺狐
229d47d79b refactor(db): 修正SQLAlchemy异步操作调用方式
移除session.add()方法的不必要await调用,修正异步数据库操作模式。主要变更包括:

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

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

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

主要修改内容包括:
- 将 `PermissionManager` 中的所有数据库操作从同步改为异步,以避免阻塞事件循环。
- 使用 `async_sessionmaker` 和 `async with session` 替代原有的同步会话管理。
- 将 SQLAlchemy 查询语法更新为异步兼容的 `await session.execute(select(...))` 模式。
- 相应地,调用链中依赖数据库操作的多个方法也已更新为 `async` 函数。
2025-11-19 23:05:09 +08:00
雅诺狐
9ec8ea6310 Update message.py 2025-11-19 23:05:08 +08:00
雅诺狐
ca51182172 小修复 2025-11-19 23:05:07 +08:00
tt-P607
1c760798b0 总算能回复了😭😭😭 2025-11-19 23:05:06 +08:00
雅诺狐
26a4c492c3 将AFC合并至Master分支 2025-11-19 23:05:06 +08:00
tt-P607
610688f641 6 2025-11-19 23:05:05 +08:00
tt-P607
d9f2cd084d 5 2025-11-19 23:05:04 +08:00
tt-P607
d53238dfc9 4次修改 2025-11-19 23:05:02 +08:00
雅诺狐
93542cadef perf(methods): 通过移除不必要的 self 参数优化方法签名
在包括 chat、plugin_system、schedule 和 mais4u 在内的多个模块中,消除冗余的实例引用。此次改动将无需访问实例状态的实用函数转换为静态方法,从而提升了内存效率,并使方法依赖关系更加清晰。
2025-11-19 23:05:00 +08:00
tt-P607
aba4f1a947 三次修改 2025-11-19 23:02:01 +08:00
雅诺狐
635311bc80 二次修改 2025-11-19 23:01:18 +08:00
雅诺狐
69cc8fc1ab 数据库异步支持
仅仅支持还有107处待迁移
2025-11-19 23:01:18 +08:00
tt-P607
c82c48d491 feat(napcat): 支持音乐分享卡片并增强消息兼容性
新增对 NapCat 框架音乐分享类型消息的解析支持。现在可以正确识别并提取音乐卡片中的歌曲、歌手、来源和封面等信息,并将其格式化为图文消息进行展示。

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

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

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

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

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

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

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

主要功能包括:

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

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

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

- **动态确认消息**: 在用户成功设置提醒后,调用 LLM 生成一条生动的确认回复,取代了原有的固定文本。
- **动态提醒内容**: 在提醒任务触发时,调用 LLM 根据提醒内容、设置者和被提醒者信息生成一条定制化的提醒消息。
- **回退机制**: 为确保核心功能的稳定性,在 LLM 调用失败或未返回有效内容时,系统将自动回退到原有的硬编码模板消息。
2025-11-19 23:01:13 +08:00