From 2f78d4023a4820eb3ea0fb287c3bf903f32addd0 Mon Sep 17 00:00:00 2001 From: FuQuan233 Date: Fri, 7 Nov 2025 17:13:27 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20=E6=94=AF=E6=8C=81=E4=B8=BB?= =?UTF-8?q?=E4=BA=BA=E5=9C=A8=E7=A7=81=E8=81=8A=E4=B8=AD=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E4=BB=96=E4=BA=BA=E9=A2=84=E8=AE=BE=E5=B9=B6=E6=8F=90=E4=BE=9B?= =?UTF-8?q?=E5=BD=93=E5=89=8D=E9=A2=84=E8=AE=BE=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nonebot_plugin_llmchat/__init__.py | 85 +++++++++++++++++++++++++----- 1 file changed, 73 insertions(+), 12 deletions(-) diff --git a/nonebot_plugin_llmchat/__init__.py b/nonebot_plugin_llmchat/__init__.py index 9317a6b..4dad9fd 100755 --- a/nonebot_plugin_llmchat/__init__.py +++ b/nonebot_plugin_llmchat/__init__.py @@ -578,33 +578,94 @@ preset_handler = on_command("API预设", priority=1, block=True, permission=SUPE @preset_handler.handle() async def handle_preset(event: GroupMessageEvent | PrivateMessageEvent, args: Message = CommandArg()): - if isinstance(event, GroupMessageEvent): - context_id = event.group_id - state = group_states[context_id] - else: # PrivateMessageEvent - if not plugin_config.enable_private_chat: - return - context_id = event.user_id - state = private_chat_states[context_id] + # 解析命令参数 + args_text = args.extract_plain_text().strip() + args_parts = args_text.split(maxsplit=1) - preset_name = args.extract_plain_text().strip() + target_id = None + preset_name = None + # 可用预设列表 + available_presets = {p.name for p in plugin_config.api_presets} + + # 只在私聊中允许 SUPERUSER 修改他人预设 + if isinstance(event, PrivateMessageEvent) and args_parts and args_parts[0].isdigit(): + # 第一个参数是纯数字,且不是预设名 + if args_parts[0] not in available_presets: + target_id = int(args_parts[0]) + + # 判断目标是群聊还是私聊 + if target_id in group_states: + state = group_states[target_id] + is_group_target = True + elif target_id in private_chat_states: + state = private_chat_states[target_id] + is_group_target = False + else: + # 默认创建私聊状态 + state = private_chat_states[target_id] + is_group_target = False + + # 如果只有目标 ID,没有预设名,返回当前预设 + if len(args_parts) == 1: + context_type = "群聊" if is_group_target else "私聊" + available_presets_str = "\n- ".join(available_presets) + await preset_handler.finish( + f"{context_type} {target_id} 当前API预设:{state.preset_name}\n可用API预设:\n- {available_presets_str}" + ) + + # 有预设名,进行修改 + preset_name = args_parts[1] + context_id = target_id + else: + # 第一个参数虽然是数字但也是预设名,按普通流程处理 + target_id = None + preset_name = args_text + if not plugin_config.enable_private_chat: + return + context_id = event.user_id + state = private_chat_states[context_id] + is_group_target = False + else: + # 普通情况:修改自己的预设 + preset_name = args_text + + if isinstance(event, GroupMessageEvent): + context_id = event.group_id + state = group_states[context_id] + is_group_target = True + else: # PrivateMessageEvent + if not plugin_config.enable_private_chat: + return + context_id = event.user_id + state = private_chat_states[context_id] + is_group_target = False + + # 处理关闭功能 if preset_name == "off": state.preset_name = preset_name - if isinstance(event, GroupMessageEvent): + if target_id: + context_type = "群聊" if is_group_target else "私聊" + await preset_handler.finish(f"已关闭 {context_type} {context_id} 的llmchat功能") + elif isinstance(event, GroupMessageEvent): await preset_handler.finish("已关闭llmchat群聊功能") else: await preset_handler.finish("已关闭llmchat私聊功能") - available_presets = {p.name for p in plugin_config.api_presets} + # 检查预设是否存在 if preset_name not in available_presets: available_presets_str = "\n- ".join(available_presets) await preset_handler.finish( f"当前API预设:{state.preset_name}\n可用API预设:\n- {available_presets_str}" ) + # 切换预设 state.preset_name = preset_name - await preset_handler.finish(f"已切换至API预设:{preset_name}") + if target_id: + context_type = "群聊" if is_group_target else "私聊" + await preset_handler.finish(f"已将 {context_type} {context_id} 切换至API预设:{preset_name}") + else: + await preset_handler.finish(f"已切换至API预设:{preset_name}") edit_preset_handler = on_command(