diff --git a/config-template.py b/config-template.py index bd5180d9..f1903f9f 100644 --- a/config-template.py +++ b/config-template.py @@ -32,6 +32,9 @@ openai_config = { }, } +# 管理员QQ号,用于接收报错等通知,为0时不发送通知 +admin_qq = 0 + # 情景预设(机器人人格) # 每个会话的预设信息,影响所有会话,无视指令重置 # 可以通过这个字段指定某些情况的回复,可直接用自然语言描述指令 @@ -40,9 +43,6 @@ openai_config = { # 可参考 https://github.com/PlexPt/awesome-chatgpt-prompts-zh default_prompt = "如果我之后想获取帮助,请你说“输入!help获取帮助”" -# 管理员QQ号,用于接收报错等通知,为0时不发送通知 -admin_qq = 0 - # 群内响应规则 # 符合此消息的群内消息即使不包含at机器人也会响应 # 支持消息前缀匹配及正则表达式匹配 diff --git a/pkg/qqbot/manager.py b/pkg/qqbot/manager.py index fd71739e..b8d80454 100644 --- a/pkg/qqbot/manager.py +++ b/pkg/qqbot/manager.py @@ -73,6 +73,9 @@ class QQBotManager: else: self.reply_filter = pkg.qqbot.filter.ReplyFilter([]) + # 由于YiriMirai的bot对象是单例的,且shutdown方法暂时无法使用 + # 故只在第一次初始化时创建bot对象,重载之后使用原bot对象 + # 因此,bot的配置不支持热重载 if first_time_init: self.first_time_init(mirai_http_api_config) else: @@ -94,6 +97,10 @@ class QQBotManager: go(self.on_group_message, (event,)) def unsubscribe_all(): + """取消所有订阅 + + 用于在热重载流程中卸载所有事件处理器 + """ assert isinstance(self.bot, Mirai) bus = self.bot.bus assert isinstance(bus, mirai.models.bus.ModelEventBus) diff --git a/pkg/utils/reloader.py b/pkg/utils/reloader.py index 10bfff49..b2903570 100644 --- a/pkg/utils/reloader.py +++ b/pkg/utils/reloader.py @@ -12,6 +12,7 @@ from main import log_colors_config def walk(module, prefix=''): + """遍历并重载所有模块""" for item in pkgutil.iter_modules(module.__path__): if item.ispkg: walk(__import__(module.__name__ + '.' + item.name, fromlist=['']), prefix + item.name + '.') @@ -29,6 +30,7 @@ def reload_all(): import main main.stop() + # 重载所有模块 context = pkg.utils.context.context walk(pkg) importlib.reload(__import__('config')) diff --git a/pkg/utils/updater.py b/pkg/utils/updater.py index bfa6d35e..90b14004 100644 --- a/pkg/utils/updater.py +++ b/pkg/utils/updater.py @@ -2,6 +2,7 @@ import dulwich.porcelain def update_all(): + """使用dulwich更新源码""" try: from dulwich import porcelain repo = porcelain.open_repo('.')