From 673a4e2c7fd075ecb9872663ffe2738c9ddf930e Mon Sep 17 00:00:00 2001 From: Soulter <37870767+Soulter@users.noreply.github.com> Date: Sun, 26 Mar 2023 20:32:59 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=A7=A3=E5=86=B3newbing=E6=8D=A2?= =?UTF-8?q?=E8=AF=9D=E9=A2=98=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=9B=E8=A7=A3?= =?UTF-8?q?=E5=86=B3newbing=E5=9B=9E=E5=A4=8D=E6=85=A2=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- addons/revEdgeGPT/revedgegpt.py | 19 +++++++++++++++++++ cores/qqbot/core.py | 16 ++++++++++++---- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/addons/revEdgeGPT/revedgegpt.py b/addons/revEdgeGPT/revedgegpt.py index 6bc79d1d4..3a9005c9f 100644 --- a/addons/revEdgeGPT/revedgegpt.py +++ b/addons/revEdgeGPT/revedgegpt.py @@ -4,11 +4,26 @@ import json class revEdgeGPT: def __init__(self): + self.busy = False + self.wait_stack = [] with open('./cookies.json', 'r') as f: cookies = json.load(f) self.bot = Chatbot(cookies=cookies) + def is_busy(self): + return self.busy + + async def reset(self): + try: + await self.bot.reset() + return False + except BaseException: + return True + async def chat(self, prompt): + if self.busy: + return + self.busy = True resp = 'err' err_count = 0 retry_count = 5 @@ -17,12 +32,16 @@ class revEdgeGPT: try: resp = await self.bot.ask(prompt=prompt, conversation_style=ConversationStyle.creative) resp = resp['item']['messages'][len(resp['item']['messages'])-1]['text'] + if resp == prompt: + resp += '\n\n如果你没有让我复述你的话,那代表我可能不想和你继续这个话题了,请输入/reset重置会话😶' break except BaseException as e: + print(e.with_traceback) err_count += 1 if err_count >= retry_count: raise e print("[RevEdgeGPT] 请求出现了一些问题, 正在重试。次数"+str(err_count)) + self.busy = False print("[RevEdgeGPT] "+str(resp)) return resp \ No newline at end of file diff --git a/cores/qqbot/core.py b/cores/qqbot/core.py index 86f580487..57eecf02b 100644 --- a/cores/qqbot/core.py +++ b/cores/qqbot/core.py @@ -666,8 +666,12 @@ def oper_msg(message, at=False, msg_ref = None): return elif provider == REV_EDGEGPT: try: - chatgpt_res = "[RevBing]" - chatgpt_res = asyncio.run(rev_edgegpt.chat(qq_msg)) + if rev_edgegpt.is_busy(): + send_qq_msg(message, f"[RevBing] 正忙,请稍后再试",msg_ref=msg_ref) + return + else: + chatgpt_res = "[RevBing]" + chatgpt_res += str(asyncio.run_coroutine_threadsafe(rev_edgegpt.chat(qq_msg), client.loop).result()) except BaseException as e: print("[System-Err] Rev NewBing API错误。原因如下:\n"+str(e)) send_qq_msg(message, f"Rev NewBing API错误。原因如下:\n{str(e)} \n前往官方频道反馈~") @@ -744,7 +748,7 @@ def get_stat(): def command_oper(qq_msg, message, session_id, name, user_id, user_name, at): go = False # 是否处理完指令后继续执行msg_oper后面的代码 msg = '' - global session_dict, now_personality, provider + global session_dict, now_personality, provider, rev_edgegpt, client # 指令返回值,/set设置人格是1 type = -1 @@ -752,8 +756,12 @@ def command_oper(qq_msg, message, session_id, name, user_id, user_name, at): # 指令控制 if qq_msg == "/reset" or qq_msg == "/重置": msg = '' - session_dict[session_id] = [] + if provider == REV_EDGEGPT and rev_edgegpt is not None: + asyncio.run_coroutine_threadsafe(rev_edgegpt.reset(), client.loop).result() + else: + session_dict[session_id] = [] if at: + msg = f"{name}(id: {session_id})的历史记录重置成功\n\n{announcement}" else: msg = f"你的历史记录重置成功"