Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev
This commit is contained in:
@@ -80,9 +80,8 @@
|
||||
- 🔄 **数据库切换** - 支持 SQLite 与 MySQL 自由切换,采用 SQLAlchemy 2.0 重新构建
|
||||
- 🛡️ **反注入集成** - 内置一整套回复前注入过滤系统,为人格保驾护航
|
||||
- 🎥 **视频分析** - 支持多种视频识别模式,拓展原版视觉
|
||||
- 😴 **苏醒系统** - 能够睡觉、失眠、被吵醒,更具乐趣
|
||||
- 📅 **日程系统** - 让墨狐规划每一天
|
||||
- 🧠 **拓展记忆系统** - 支持瞬时记忆等多种记忆
|
||||
- 📅 **日程系统** - 让MoFox规划每一天
|
||||
- 🧠 **拓展记忆系统** - 支持瞬时记忆和长期记忆等多种记忆方式
|
||||
- 🎪 **完善的 Event** - 支持动态事件注册和处理器订阅,并实现了聚合结果管理
|
||||
- 🔍 **内嵌魔改插件** - 内置联网搜索等诸多功能,等你来探索
|
||||
- 🔌 **MCP 协议支持** - 集成 Model Context Protocol,支持外部工具服务器连接(仅 Streamable HTTP)
|
||||
@@ -103,7 +102,7 @@
|
||||
| 项目 | 要求 |
|
||||
| ------------ | ---------------------------------------- |
|
||||
| 🖥️ 操作系统 | Windows 10/11、macOS 10.14+、Linux (Ubuntu 18.04+) |
|
||||
| 🐍 Python 版本 | Python 3.10 或更高版本 |
|
||||
| 🐍 Python 版本 | Python 3.11 或更高版本 |
|
||||
| 💾 内存 | 建议 ≥ 4GB 可用内存 |
|
||||
| 💿 存储空间 | 建议 ≥ 2GB 可用空间 |
|
||||
|
||||
|
||||
@@ -240,6 +240,8 @@ class ActionModifier:
|
||||
action_instance = cast(BaseAction, action_instance)
|
||||
# 设置必要的属性
|
||||
action_instance.log_prefix = self.log_prefix
|
||||
# 强制注入 chat_content 以供 go_activate 内部的辅助函数使用
|
||||
setattr(action_instance, "_activation_chat_content", chat_content)
|
||||
# 调用 go_activate 方法
|
||||
task = action_instance.go_activate(
|
||||
llm_judge_model=self.llm_judge
|
||||
|
||||
@@ -71,11 +71,12 @@ def init_prompt():
|
||||
不要复读你前面发过的内容,意思相近也不行。
|
||||
不要浮夸,不要夸张修辞,平淡且不要输出多余内容(包括前后缀,冒号和引号,括号,表情包,at或 @等 ),只输出一条回复就好。
|
||||
|
||||
**【重要】不要在回复中输出任何格式化标记**:
|
||||
- 不要输出类似 [表情包:xxx]、[图片:xxx]、[回复<xxx>:xxx] 这样的格式
|
||||
- 如果想表达笑的情绪,直接说"哈哈"、"笑死"等,不要说"[表情包:笑哭]"
|
||||
- 如果想提到某人,直接说"你"、或者他的名字,不要说"[回复<某人>]"
|
||||
- 说什么就直接输出什么,不要加任何格式化标记
|
||||
**【!!!绝对禁止!!!】在回复中输出任何格式化标记**:
|
||||
- **核心原则**: 你的回复**只能**包含纯粹的口语化文本。任何看起来像程序指令、系统提示或格式标签的内容都**绝对不允许**出现在你的回复里。
|
||||
- **禁止模仿系统消息**: 绝对禁止输出任何类似 `[回复<xxx>:xxx]`、`[表情包:xxx]`、`[图片:xxx]` 的格式。这些都是系统用于展示消息的方式,不是你应该说的话。
|
||||
- **禁止模仿动作指令**: 绝对禁止输出 `[戳了戳]` 或 `[poke]`。这类互动由名为 `poke_user` 的特殊动作处理,不是文本消息。
|
||||
- **正确提及用户**: 如果想提到某人,直接说“你”或他/她的名字,绝对禁止使用 `[回复<某人>]` 或 `@某人` 的格式。
|
||||
- **正确表达情绪**: 如果想表达笑的情绪,直接说“哈哈”、“嘻嘻”等,绝对禁止使用 `[表情包:笑哭]` 这样的文字。
|
||||
|
||||
*你叫{bot_name},也有人叫你{bot_nickname}*
|
||||
|
||||
@@ -144,11 +145,12 @@ def init_prompt():
|
||||
|
||||
请注意不要输出多余内容(包括前后缀,冒号和引号,at或 @等 )。只输出回复内容。
|
||||
|
||||
**【重要】不要在回复中输出任何格式化标记**:
|
||||
- 不要输出类似 [表情包:xxx]、[图片:xxx]、[回复<xxx>:xxx] 这样的格式
|
||||
- 如果想表达笑的情绪,直接说"哈哈"、"笑死"等,不要说"[表情包:笑哭]"
|
||||
- 如果想提到某人,直接说"你"、"他",不要说"[回复<某人>]"
|
||||
- 说什么就直接输出什么,不要加任何标记或括号
|
||||
**【!!!绝对禁止!!!】在回复中输出任何格式化标记**:
|
||||
- **核心原则**: 你的回复**只能**包含纯粹的口语化文本。任何看起来像程序指令、系统提示或格式标签的内容都**绝对不允许**出现在你的回复里。
|
||||
- **禁止模仿系统消息**: 绝对禁止输出任何类似 `[回复<xxx>:xxx]`、`[表情包:xxx]`、`[图片:xxx]` 的格式。这些都是系统用于展示消息的方式,不是你应该说的话。
|
||||
- **禁止模仿动作指令**: 绝对禁止输出 `[戳了戳]` 或 `[poke]`。这类互动由名为 `poke_user` 的特殊动作处理,不是文本消息。
|
||||
- **正确提及用户**: 如果想提到某人,直接说“你”或他/她的名字,绝对禁止使用 `[回复<某人>]` 或 `@某人` 的格式。
|
||||
- **正确表达情绪**: 如果想表达笑的情绪,直接说“哈哈”、“嘻嘻”等,绝对禁止使用 `[表情包:笑哭]` 这样的文字。
|
||||
|
||||
{moderation_prompt}
|
||||
|
||||
@@ -216,11 +218,12 @@ If you need to use the search tool, please directly call the function "lpmm_sear
|
||||
{keywords_reaction_prompt}
|
||||
请注意不要输出多余内容(包括前后缀,冒号和引号,at或 @等 )。只输出回复内容。
|
||||
|
||||
**【重要】不要在回复中输出任何格式化标记**:
|
||||
- 不要输出类似 [表情包:xxx]、[图片:xxx]、[回复<xxx>:xxx] 这样的格式
|
||||
- 如果想表达笑的情绪,直接说"哈哈"、"笑死"等,不要说"[表情包:笑哭]"
|
||||
- 如果想提到某人,直接说"你"、"他",不要说"[回复<某人>]"
|
||||
- 说什么就直接输出什么,不要加任何标记或括号
|
||||
**【!!!绝对禁止!!!】在回复中输出任何格式化标记**:
|
||||
- **核心原则**: 你的回复**只能**包含纯粹的口语化文本。任何看起来像程序指令、系统提示或格式标签的内容都**绝对不允许**出现在你的回复里。
|
||||
- **禁止模仿系统消息**: 绝对禁止输出任何类似 `[回复<xxx>:xxx]`、`[表情包:xxx]`、`[图片:xxx]` 的格式。这些都是系统用于展示消息的方式,不是你应该说的话。
|
||||
- **禁止模仿动作指令**: 绝对禁止输出 `[戳了戳]` 或 `[poke]`。这类互动由名为 `poke_user` 的特殊动作处理,不是文本消息。
|
||||
- **正确提及用户**: 如果想提到某人,直接说“你”或他/她的名字,绝对禁止使用 `[回复<某人>]` 或 `@某人` 的格式。
|
||||
- **正确表达情绪**: 如果想表达笑的情绪,直接说“哈哈”、“嘻嘻”等,绝对禁止使用 `[表情包:笑哭]` 这样的文字。
|
||||
|
||||
{moderation_prompt}
|
||||
你的核心任务是针对 {reply_target_block} 中提到的内容,{relation_info_block}生成一段紧密相关且能推动对话的回复。你的回复应该:
|
||||
@@ -1266,7 +1269,7 @@ class DefaultReplyer:
|
||||
# 构建action描述 (如果启用planner)
|
||||
action_descriptions = ""
|
||||
if available_actions:
|
||||
action_descriptions = "你有以下的动作能力,但执行这些动作不由你决定,由另外一个模型同步决定,因此你只需要知道有如下能力即可:\n"
|
||||
action_descriptions = "以下是系统中可用的动作列表。**【重要】**这些动作将由一个独立的决策模型决定是否执行,**并非你的职责**。你只需要了解这些能力的存在,以便更好地理解对话情景,**严禁**在你的回复中模仿、调用或提及这些动作本身。\n"
|
||||
for action_name, action_info in available_actions.items():
|
||||
action_description = action_info.description
|
||||
action_descriptions += f"- {action_name}: {action_description}\n"
|
||||
@@ -1976,7 +1979,7 @@ class DefaultReplyer:
|
||||
|
||||
return f"你与{sender}是普通朋友关系。"
|
||||
|
||||
async def _store_chat_memory_async(self, reply_to: str, reply_message: dict[str, Any] | None = None):
|
||||
async def _store_chat_memory_async(self, reply_to: str, reply_message: DatabaseMessages | dict[str, Any] | None = None):
|
||||
"""
|
||||
异步存储聊天记忆(从build_memory_block迁移而来)
|
||||
|
||||
|
||||
@@ -38,17 +38,6 @@ class PermissionCommand(PlusCommand):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
permission_nodes: ClassVar[list[PermissionNodeField]] = [
|
||||
PermissionNodeField(
|
||||
node_name="manage",
|
||||
description="权限管理:可以授权和撤销其他用户的权限",
|
||||
),
|
||||
PermissionNodeField(
|
||||
node_name="view",
|
||||
description="权限查看:可以查看权限节点和用户权限信息",
|
||||
),
|
||||
]
|
||||
|
||||
async def execute(self, args: CommandArgs) -> tuple[bool, str | None, bool]:
|
||||
"""执行权限管理命令"""
|
||||
if args.is_empty:
|
||||
@@ -57,7 +46,7 @@ class PermissionCommand(PlusCommand):
|
||||
|
||||
subcommand = args.get_first.lower()
|
||||
remaining_args = args.get_args()[1:] # 获取除第一个参数外的所有参数
|
||||
chat_stream = self.message.chat_stream
|
||||
chat_stream = self.message.chat_info.stream_id
|
||||
|
||||
if subcommand in ["grant", "授权", "give"]:
|
||||
await self._grant_permission(chat_stream, remaining_args)
|
||||
@@ -396,3 +385,14 @@ class PermissionManagerPlugin(BasePlugin):
|
||||
def get_plugin_components(self) -> list[tuple[PlusCommandInfo, type[PlusCommand]]]:
|
||||
"""返回插件的PlusCommand组件"""
|
||||
return [(PermissionCommand.get_plus_command_info(), PermissionCommand)]
|
||||
|
||||
permission_nodes: ClassVar[list[PermissionNodeField]] = [
|
||||
PermissionNodeField(
|
||||
node_name="manage",
|
||||
description="权限管理:可以授权和撤销其他用户的权限",
|
||||
),
|
||||
PermissionNodeField(
|
||||
node_name="view",
|
||||
description="权限查看:可以查看权限节点和用户权限信息",
|
||||
),
|
||||
]
|
||||
Reference in New Issue
Block a user