From 1828e341905461a25b3729da848d54f8c336b66a Mon Sep 17 00:00:00 2001 From: Rock Chin <1010553892@qq.com> Date: Fri, 10 Mar 2023 21:04:20 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E5=BD=93=E5=89=8D=E4=BC=9A=E8=AF=9D=E7=9A=84?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E6=88=96=E5=85=A8=E9=83=A8=E5=8E=86=E5=8F=B2?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=20(#239)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 3 --- pkg/database/manager.py | 16 ++++++++++++++++ pkg/openai/session.py | 8 +++++++- pkg/qqbot/command.py | 14 ++++++++++++++ 4 files changed, 37 insertions(+), 4 deletions(-) diff --git a/main.py b/main.py index bfdd7a80..99380f1f 100644 --- a/main.py +++ b/main.py @@ -352,9 +352,6 @@ if __name__ == '__main__': updater.update_all(cli=True) sys.exit(0) - # import pkg.utils.configmgr - # - # pkg.utils.configmgr.set_config_and_reload("quote_origin", False) requests.packages.urllib3.disable_warnings(InsecureRequestWarning) qqbot = main(True) diff --git a/pkg/database/manager.py b/pkg/database/manager.py index 5fde3c29..8bc7571d 100644 --- a/pkg/database/manager.py +++ b/pkg/database/manager.py @@ -35,6 +35,7 @@ class DatabaseManager: def __execute__(self, *args, **kwargs) -> Cursor: # logging.debug('SQL: {}'.format(sql)) + logging.debug('SQL: {}'.format(args)) c = self.cursor.execute(*args, **kwargs) self.conn.commit() return c @@ -240,6 +241,21 @@ class DatabaseManager: return sessions + def delete_history(self, session_name: str, index: int) -> bool: + # 删除倒序第index个session + # 查找其id再删除 + self.__execute__(""" + delete from `sessions` where `id` in (select `id` from `sessions` where `name` = '{}' order by `last_interact_timestamp` desc limit 1 offset {}) + """.format(session_name, index)) + + return self.cursor.rowcount == 1 + + def delete_all_history(self, session_name: str) -> bool: + self.__execute__(""" + delete from `sessions` where `name` = '{}' + """.format(session_name)) + return self.cursor.rowcount > 0 + # 将apikey的使用量存进数据库 def dump_api_key_usage(self, api_keys: dict, usage: dict): logging.debug('dumping api key usage...') diff --git a/pkg/openai/session.py b/pkg/openai/session.py index 38a629d1..233b9dc0 100644 --- a/pkg/openai/session.py +++ b/pkg/openai/session.py @@ -40,7 +40,7 @@ def reset_session_prompt(session_name, prompt): prompt = [ { 'role': 'system', - 'content': config.default_prompt['default'] + 'content': config.default_prompt['default'] if type(config.default_prompt) == dict else config.default_prompt } ] # 警告 @@ -366,5 +366,11 @@ class Session: def list_history(self, capacity: int = 10, page: int = 0): return pkg.utils.context.get_database_manager().list_history(self.name, capacity, page) + def delete_history(self, index: int) -> bool: + return pkg.utils.context.get_database_manager().delete_history(self.name, index) + + def delete_all_history(self) -> bool: + return pkg.utils.context.get_database_manager().delete_all_history(self.name) + def draw_image(self, prompt: str): return pkg.utils.context.get_openai_manager().request_image(prompt) diff --git a/pkg/qqbot/command.py b/pkg/qqbot/command.py index b174d453..37ba7142 100644 --- a/pkg/qqbot/command.py +++ b/pkg/qqbot/command.py @@ -256,6 +256,20 @@ def process_command(session_name: str, text_message: str, mgr, config, reply = pkg.qqbot.message.process_normal_message(to_send, mgr, config, launcher_type, launcher_id, sender_id) + elif cmd == 'del': # 删除指定会话历史记录 + if len(params) == 0: + reply = ["[bot]参数不足, 格式: !del <序号>\n可以通过!list查看序号"] + else: + if params[0] == 'all': + pkg.openai.session.get_session(session_name).delete_all_history() + reply = ["[bot]已删除所有历史会话"] + elif params[0].isdigit(): + if pkg.openai.session.get_session(session_name).delete_history(int(params[0])): + reply = ["[bot]已删除历史会话 #{}".format(params[0])] + else: + reply = ["[bot]没有历史会话 #{}".format(params[0])] + else: + reply = ["[bot]参数错误, 格式: !del <序号>\n可以通过!list查看序号"] elif cmd == 'usage': reply_str = "[bot]各api-key使用情况:\n\n"