diff --git a/bot/linkai/link_ai_bot.py b/bot/linkai/link_ai_bot.py index 4d6a4ca7b..8917b023c 100644 --- a/bot/linkai/link_ai_bot.py +++ b/bot/linkai/link_ai_bot.py @@ -34,7 +34,11 @@ def _chat(self, query, context, retry_count=0): try: # load config - app_code = conf().get("linkai_app_code") + if context.get("generate_breaked_by"): + logger.info(f"[LINKAI] won't set appcode because a plugin ({context['generate_breaked_by']}) affected the context") + app_code = None + else: + app_code = conf().get("linkai_app_code") linkai_api_key = conf().get("linkai_api_key") session_id = context["session_id"] diff --git a/channel/chat_channel.py b/channel/chat_channel.py index dd80b4867..6a2f11e81 100644 --- a/channel/chat_channel.py +++ b/channel/chat_channel.py @@ -162,6 +162,8 @@ def _generate_reply(self, context: Context, reply: Reply = Reply()) -> Reply: reply = e_context["reply"] if not e_context.is_pass(): logger.debug("[WX] ready to handle context: type={}, content={}".format(context.type, context.content)) + if e_context.is_break(): + context["generate_breaked_by"] = e_context["breaked_by"] if context.type == ContextType.TEXT or context.type == ContextType.IMAGE_CREATE: # 文字和图片消息 reply = super().build_reply_content(context.content, context) elif context.type == ContextType.VOICE: # 语音消息 diff --git a/plugins/dungeon/dungeon.py b/plugins/dungeon/dungeon.py index 07fbde713..dce62cdfb 100644 --- a/plugins/dungeon/dungeon.py +++ b/plugins/dungeon/dungeon.py @@ -64,7 +64,7 @@ def on_handle_context(self, e_context: EventContext): if e_context["context"].type != ContextType.TEXT: return bottype = Bridge().get_bot_type("chat") - if bottype not in [const.OPEN_AI, const.CHATGPT, const.CHATGPTONAZURE]: + if bottype not in [const.OPEN_AI, const.CHATGPT, const.CHATGPTONAZURE, const.LINKAI]: return bot = Bridge().get_bot("chat") content = e_context["context"].content[:] diff --git a/plugins/event.py b/plugins/event.py index df8c609e7..719e6fcac 100644 --- a/plugins/event.py +++ b/plugins/event.py @@ -50,3 +50,6 @@ def __delitem__(self, key): def is_pass(self): return self.action == EventAction.BREAK_PASS + + def is_break(self): + return self.action == EventAction.BREAK or self.action == EventAction.BREAK_PASS diff --git a/plugins/godcmd/godcmd.py b/plugins/godcmd/godcmd.py index f2613f925..2ce370fa9 100644 --- a/plugins/godcmd/godcmd.py +++ b/plugins/godcmd/godcmd.py @@ -285,9 +285,9 @@ def on_handle_context(self, e_context: EventContext): ok, result = False, "请提供一个GPT模型" elif cmd == "gpt_model": user_data = conf().get_user_data(user) - model = conf().get('model') - if 'gpt_model' in user_data: - model = user_data['gpt_model'] + model = conf().get("model") + if "gpt_model" in user_data: + model = user_data["gpt_model"] ok, result = True, "你的GPT模型为" + str(model) elif cmd == "reset_gpt_model": try: @@ -320,7 +320,7 @@ def on_handle_context(self, e_context: EventContext): load_config() ok, result = True, "配置已重载" elif cmd == "resetall": - if bottype in [const.OPEN_AI, const.CHATGPT, const.CHATGPTONAZURE]: + if bottype in [const.OPEN_AI, const.CHATGPT, const.CHATGPTONAZURE, const.LINKAI]: channel.cancel_all_session() bot.sessions.clear_all_session() ok, result = True, "重置所有会话成功" diff --git a/plugins/plugin_manager.py b/plugins/plugin_manager.py index d8ad2c3e7..269695478 100644 --- a/plugins/plugin_manager.py +++ b/plugins/plugin_manager.py @@ -163,6 +163,9 @@ def emit_event(self, e_context: EventContext, *args, **kwargs): logger.debug("Plugin %s triggered by event %s" % (name, e_context.event)) instance = self.instances[name] instance.handlers[e_context.event](e_context, *args, **kwargs) + if e_context.is_break(): + e_context["breaked_by"] = name + logger.debug("Plugin %s breaked event %s" % (name, e_context.event)) return e_context def set_plugin_priority(self, name: str, priority: int): diff --git a/plugins/role/role.py b/plugins/role/role.py index 4f1dc879b..c75aa905a 100644 --- a/plugins/role/role.py +++ b/plugins/role/role.py @@ -99,7 +99,7 @@ def on_handle_context(self, e_context: EventContext): if e_context["context"].type != ContextType.TEXT: return btype = Bridge().get_bot_type("chat") - if btype not in [const.OPEN_AI, const.CHATGPT, const.CHATGPTONAZURE]: + if btype not in [const.OPEN_AI, const.CHATGPT, const.CHATGPTONAZURE, const.LINKAI]: return bot = Bridge().get_bot("chat") content = e_context["context"].content[:] diff --git a/plugins/tool/tool.py b/plugins/tool/tool.py index 9f1cf25a2..46ddee392 100644 --- a/plugins/tool/tool.py +++ b/plugins/tool/tool.py @@ -55,6 +55,7 @@ def on_handle_context(self, e_context: EventContext): const.CHATGPT, const.OPEN_AI, const.CHATGPTONAZURE, + const.LINKAI, ): return