fix: 修复gocq启动下QQ频道无法通过@回复消息的问题

feat:  支持重置会话时保留人格
perf: 清除部分无用日志输出
This commit is contained in:
Soulter
2023-09-25 12:03:17 +08:00
parent 67faa587b6
commit 7b8a311dde
6 changed files with 45 additions and 23 deletions
+1 -1
View File
@@ -504,7 +504,7 @@ def oper_msg(message,
if isinstance(i, At):
# @机器人
if message.type == "GuildMessage":
if i.qq == message.user_id:
if i.qq == message.user_id or i.qq == message.self_tiny_id:
with_tag = True
if message.type == "FriendMessage":
if i.qq == message.self_id:
+19 -9
View File
@@ -11,6 +11,7 @@ class CommandOpenAIOfficial(Command):
self.provider = provider
self.cached_plugins = {}
self.global_object = global_object
self.personality_str = ""
super().__init__(provider, global_object)
def check_command(self,
@@ -37,7 +38,7 @@ class CommandOpenAIOfficial(Command):
if hit:
return True, res
if self.command_start_with(message, "reset", "重置"):
return True, self.reset(session_id)
return True, self.reset(session_id, message)
elif self.command_start_with(message, "his", "历史"):
return True, self.his(message, session_id)
elif self.command_start_with(message, "token"):
@@ -77,11 +78,18 @@ class CommandOpenAIOfficial(Command):
return True, super().help_messager(commands, self.platform, cached_plugins), "help"
def reset(self, session_id: str):
def reset(self, session_id: str, message: str = "reset"):
if self.provider is None:
return False, "未启动OpenAI ChatGPT语言模型.", "reset"
self.provider.forget(session_id)
return True, "重置成功", "reset"
l = message.split(" ")
if len(l) == 1:
self.provider.forget(session_id)
return True, "重置成功", "reset"
if len(l) == 2 and l[1] == "p":
self.provider.forget(session_id)
if self.personality_str != "":
self.set(self.personality_str, session_id) # 重新设置人格
return True, "重置成功", "reset"
def his(self, message: str, session_id: str):
if self.provider is None:
@@ -131,13 +139,13 @@ class CommandOpenAIOfficial(Command):
sponsor = key_stat[key]['sponsor']
chatgpt_cfg_str += f" |-{index}: {key_stat[key]['used']}/{max} {sponsor}赞助{tag}\n"
index += 1
return True, f"⭐使用情况({str(gg_count)}个已用):\n{chatgpt_cfg_str}⏰全频道已用{total}tokens", "status"
return True, f"⭐使用情况({str(gg_count)}个已用):\n{chatgpt_cfg_str}", "status"
def count(self):
if self.provider is None:
return False, "未启动OpenAI ChatGPT语言模型.", "reset"
return False, "未启动OpenAI ChatGPT语言模型", "reset"
guild_count, guild_msg_count, guild_direct_msg_count, session_count = self.provider.get_stat()
return True, f"当前会话数: {len(self.provider.session_dict)}\n共有频道数: {guild_count} \n共有消息数: {guild_msg_count}\n私信数: {guild_direct_msg_count}\n历史会话数: {session_count}", "count"
return True, f"【本指令部分统计可能已经过时】\n当前会话数: {len(self.provider.session_dict)}\n共有频道数: {guild_count} \n共有消息数: {guild_msg_count}\n私信数: {guild_direct_msg_count}\n历史会话数: {session_count}", "count"
def key(self, message: str):
if self.provider is None:
@@ -167,7 +175,7 @@ class CommandOpenAIOfficial(Command):
if len(l) == 1:
return True, f"【人格文本由PlexPt开源项目awesome-chatgpt-pr \
ompts-zh提供】\n设置人格: \n/set 人格名。例如/set 编剧\n人格列表: /set list\n人格详细信息: \
/set view 人格名\n自定义人格: /set 人格文本\n清除人格: /unset\n【当前人格】: {str(self.provider.now_personality)}", "set"
/set view 人格名\n自定义人格: /set 人格文本\n重置会话(清除人格): /reset\n重置会话(保留人格): /reset p\n【当前人格】: {str(self.provider.now_personality)}", "set"
elif l[1] == "list":
msg = "人格列表:\n"
for key in personalities.keys():
@@ -202,7 +210,8 @@ class CommandOpenAIOfficial(Command):
'single-tokens': 0
}
self.provider.session_dict[session_id].append(new_record)
return True, f"人格{ps}已设置.", "set"
self.personality_str = message
return True, f"人格{ps}已设置。", "set"
else:
self.provider.now_personality = {
'name': '自定义人格',
@@ -218,6 +227,7 @@ class CommandOpenAIOfficial(Command):
}
self.provider.session_dict[session_id] = []
self.provider.session_dict[session_id].append(new_record)
self.personality_str = message
return True, f"自定义人格已设置。 \n人格信息: {ps}", "set"
def draw(self, message):
+21 -10
View File
@@ -8,6 +8,7 @@ class CommandRevChatGPT(Command):
self.provider = provider
self.cached_plugins = {}
self.global_object = global_object
self.personality_str = ""
super().__init__(provider, global_object)
def check_command(self,
@@ -36,7 +37,7 @@ class CommandRevChatGPT(Command):
if self.command_start_with(message, "help", "帮助"):
return True, self.help(cached_plugins)
elif self.command_start_with(message, "reset"):
return True, self.reset(session_id)
return True, self.reset(session_id, message)
elif self.command_start_with(message, "update"):
return True, self.update(message, role)
elif self.command_start_with(message, "set"):
@@ -47,15 +48,21 @@ class CommandRevChatGPT(Command):
return True, (False, "未知指令", "unknown_command")
return False, None
def reset(self, session_id):
self.provider.forget(session_id)
return True, "重置完毕。", "reset"
def reset(self, session_id, message: str):
l = message.split(" ")
if len(l) == 1:
self.provider.forget(session_id)
return True, "重置完毕。", "reset"
if len(l) == 2 and l[1] == "p":
self.provider.forget(session_id)
ret = self.provider.text_chat(self.personality_str)
return True, f"重置完毕(保留人格)。\n\n{ret}", "reset"
def set(self, message: str, session_id: str):
l = message.split(" ")
if len(l) == 1:
return True, f"设置人格: \n/set 人格名。例如/set 编剧\n人格列表: /set list\n人格详细信息: \
/set view 人格名\n清除人格: /reset", "set"
return True, f"设置人格: \n/set 人格名或人格文本。例如/set 编剧\n人格列表: /set list\n人格详细信息: \
/set view 人格名\n重置会话(清除人格): /reset\n重置会话(保留人格): /reset p", "set"
elif l[1] == "list":
msg = "人格列表:\n"
for key in personalities.keys():
@@ -76,11 +83,15 @@ class CommandRevChatGPT(Command):
else:
ps = l[1].strip()
if ps in personalities:
self.reset(session_id)
self.provider.text_chat(personalities[ps], session_id)
return True, f"人格【{ps}】已设置。", "set"
self.reset(session_id, "reset")
self.personality_str = personalities[ps]
ret = self.provider.text_chat(self.personality_str, session_id)
return True, f"人格【{ps}】已设置。\n\n{ret}", "set"
else:
return True, f"人格【{ps}】不存在。", "set"
self.reset(session_id, "reset")
self.personality_str = ps
ret = self.provider.text_chat(ps, session_id)
return True, f"人格信息已设置。\n\n{ret}", "set"
def switch(self, message: str, session_id: str):
'''
+1 -1
View File
@@ -101,7 +101,7 @@ class QQ:
node.uin = source.self_id
node.name = f"To {source.sender.nickname}:"
node.time = int(time.time())
print(node)
# print(node)
nodes=[node]
await self.client.sendGroupForwardMessage(source.group_id, nodes)
return
+1 -1
View File
@@ -112,7 +112,7 @@ class QQChan():
elif isinstance(res, str):
plain_text = res
print(plain_text, image_path)
# print(plain_text, image_path)
if image_path is not None:
msg_ref = None
+2 -1
View File
@@ -16,7 +16,7 @@ class ProviderOpenAIOfficial(Provider):
self.key_list = []
if 'api_base' in cfg and cfg['api_base'] != 'none' and cfg['api_base'] != '':
openai.api_base = cfg['api_base']
print(f"设置apibase为:{openai.api_base}")
print(f"设置apibase为: {openai.api_base}")
if cfg['key'] != '' and cfg['key'] != None:
self.key_list = cfg['key']
else:
@@ -113,6 +113,7 @@ class ProviderOpenAIOfficial(Provider):
f.close()
cache_data_list, new_record, req = self.wrap(prompt, session_id)
gu.log(f"OPENAI REQUEST: {str(req)}", level=gu.LEVEL_DEBUG, max_len=9999)
retry = 0
response = None
err = ''