From 419a3e518ece086e3f5e93ca5c7f2754ef1ca13f Mon Sep 17 00:00:00 2001 From: lanvent Date: Sat, 10 Jun 2023 23:42:43 +0800 Subject: [PATCH] feat: make plugin compatible with LINKAI in most cases --- bot/linkai/link_ai_bot.py | 6 +++++- channel/chat_channel.py | 2 ++ plugins/dungeon/dungeon.py | 2 +- plugins/event.py | 3 +++ plugins/godcmd/godcmd.py | 8 ++++---- plugins/plugin_manager.py | 3 +++ plugins/role/role.py | 2 +- plugins/tool/tool.py | 1 + 8 files changed, 20 insertions(+), 7 deletions(-) diff --git a/bot/linkai/link_ai_bot.py b/bot/linkai/link_ai_bot.py index 4d6a4ca..8917b02 100644 --- a/bot/linkai/link_ai_bot.py +++ b/bot/linkai/link_ai_bot.py @@ -34,7 +34,11 @@ class LinkAIBot(Bot): 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 dd80b48..6a2f11e 100644 --- a/channel/chat_channel.py +++ b/channel/chat_channel.py @@ -162,6 +162,8 @@ class ChatChannel(Channel): 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 07fbde7..dce62cd 100644 --- a/plugins/dungeon/dungeon.py +++ b/plugins/dungeon/dungeon.py @@ -64,7 +64,7 @@ class Dungeon(Plugin): 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 df8c609..719e6fc 100644 --- a/plugins/event.py +++ b/plugins/event.py @@ -50,3 +50,6 @@ class EventContext: 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 f2613f9..2ce370f 100644 --- a/plugins/godcmd/godcmd.py +++ b/plugins/godcmd/godcmd.py @@ -285,9 +285,9 @@ class Godcmd(Plugin): 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 @@ class Godcmd(Plugin): 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 d8ad2c3..2696954 100644 --- a/plugins/plugin_manager.py +++ b/plugins/plugin_manager.py @@ -163,6 +163,9 @@ class PluginManager: 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 4f1dc87..c75aa90 100644 --- a/plugins/role/role.py +++ b/plugins/role/role.py @@ -99,7 +99,7 @@ class Role(Plugin): 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 9f1cf25..46ddee3 100644 --- a/plugins/tool/tool.py +++ b/plugins/tool/tool.py @@ -55,6 +55,7 @@ class Tool(Plugin): const.CHATGPT, const.OPEN_AI, const.CHATGPTONAZURE, + const.LINKAI, ): return