feat: 重载后恢复诸个单例对象

This commit is contained in:
Rock Chin
2023-01-01 23:18:32 +08:00
parent 7e83ba3f77
commit 82e3ef6497
9 changed files with 79 additions and 100 deletions
+3 -7
View File
@@ -17,8 +17,7 @@ import logging
import pkg.qqbot.filter
import pkg.qqbot.process as processor
inst = None
import pkg.utils.context
# 并行运行
@@ -107,8 +106,8 @@ class QQBotManager:
self.bot = bot
global inst
inst = self
pkg.utils.context.set_qqbot_manager(self)
def send(self, event, msg, check_quote=True):
asyncio.run(
@@ -198,6 +197,3 @@ class QQBotManager:
threading.Thread(target=asyncio.run, args=(send_task,)).start()
def get_inst() -> QQBotManager:
global inst
return inst
+13 -12
View File
@@ -16,6 +16,7 @@ import pkg.openai.session
import pkg.openai.manager
import pkg.utils.reloader
import pkg.utils.updater
import pkg.utils.context
processing = []
@@ -25,7 +26,7 @@ def process_message(launcher_type: str, launcher_id: int, text_message: str, mes
sender_id: int) -> MessageChain:
global processing
mgr = pkg.qqbot.manager.get_inst()
mgr = pkg.utils.context.get_qqbot_manager()
reply = []
session_name = "{}_{}".format(launcher_type, launcher_id)
@@ -125,22 +126,22 @@ def process_message(launcher_type: str, launcher_id: int, text_message: str, mes
reply = [reply_str]
elif cmd == 'usage':
api_keys = pkg.openai.manager.get_inst().key_mgr.api_key
api_keys = pkg.utils.context.get_openai_manager().key_mgr.api_key
reply_str = "[bot]api-key使用情况:(阈值:{})\n\n".format(
pkg.openai.manager.get_inst().key_mgr.api_key_fee_threshold)
pkg.utils.context.get_openai_manager().key_mgr.api_key_fee_threshold)
using_key_name = ""
for api_key in api_keys:
reply_str += "{}:\n - {}美元 {}%\n".format(api_key,
round(
pkg.openai.manager.get_inst().key_mgr.get_fee(
pkg.utils.context.get_openai_manager().key_mgr.get_fee(
api_keys[api_key]), 6),
round(
pkg.openai.manager.get_inst().key_mgr.get_fee(
pkg.utils.context.get_openai_manager().key_mgr.get_fee(
api_keys[
api_key]) / pkg.openai.manager.get_inst().key_mgr.api_key_fee_threshold * 100,
api_key]) / pkg.utils.context.get_openai_manager().key_mgr.api_key_fee_threshold * 100,
3))
if api_keys[api_key] == pkg.openai.manager.get_inst().key_mgr.using_key:
if api_keys[api_key] == pkg.utils.context.get_openai_manager().key_mgr.using_key:
using_key_name = api_key
reply_str += "\n当前使用:{}".format(using_key_name)
@@ -191,17 +192,17 @@ def process_message(launcher_type: str, launcher_id: int, text_message: str, mes
reply = ["[bot]err:调用API失败,请重试或联系作者,或等待修复"]
except openai.error.RateLimitError as e:
# 尝试切换api-key
current_tokens_amt = pkg.openai.manager.get_inst().key_mgr.get_fee(
pkg.openai.manager.get_inst().key_mgr.get_using_key())
pkg.openai.manager.get_inst().key_mgr.set_current_exceeded()
switched, name = pkg.openai.manager.get_inst().key_mgr.auto_switch()
current_tokens_amt = pkg.utils.context.get_openai_manager().key_mgr.get_fee(
pkg.utils.context.get_openai_manager().key_mgr.get_using_key())
pkg.utils.context.get_openai_manager().key_mgr.set_current_exceeded()
switched, name = pkg.utils.context.get_openai_manager().key_mgr.auto_switch()
if not switched:
mgr.notify_admin("API调用额度超限({}),请向OpenAI账户充值或在config.py中更换api_key".format(
current_tokens_amt))
reply = ["[bot]err:API调用额度超额,请联系作者,或等待修复"]
else:
openai.api_key = pkg.openai.manager.get_inst().key_mgr.get_using_key()
openai.api_key = pkg.utils.context.get_openai_manager().key_mgr.get_using_key()
mgr.notify_admin("API调用额度超限({}),已切换到{}".format(current_tokens_amt, name))
reply = ["[bot]err:API调用额度超额,已自动切换,请重新发送消息"]
except openai.error.InvalidRequestError as e: