QChatGPT/pkg/utils/reloader.py

43 lines
1.3 KiB
Python
Raw Normal View History

2023-01-01 22:52:27 +08:00
import logging
import threading
2023-01-01 22:52:27 +08:00
import importlib
import pkgutil
import pkg.utils.context
2023-01-01 22:52:27 +08:00
def walk(module, prefix=''):
2023-01-02 13:06:48 +08:00
"""遍历并重载所有模块"""
2023-01-01 22:52:27 +08:00
for item in pkgutil.iter_modules(module.__path__):
if item.ispkg:
walk(__import__(module.__name__ + '.' + item.name, fromlist=['']), prefix + item.name + '.')
else:
logging.info('reload module: {}'.format(prefix + item.name))
importlib.reload(__import__(module.__name__ + '.' + item.name, fromlist=['']))
2023-01-02 13:28:32 +08:00
def reload_all(notify=True):
# 解除bot的事件注册
import pkg
pkg.utils.context.get_qqbot_manager().unsubscribe_all()
# 执行关闭流程
logging.info("执行程序关闭流程")
import main
main.stop()
2023-01-02 13:06:48 +08:00
# 重载所有模块
pkg.utils.context.context['exceeded_keys'] = pkg.utils.context.get_openai_manager().key_mgr.exceeded
context = pkg.utils.context.context
2023-01-01 22:52:27 +08:00
walk(pkg)
importlib.reload(__import__('config'))
importlib.reload(__import__('main'))
pkg.utils.context.context = context
# 执行启动流程
logging.info("执行程序启动流程")
2023-01-02 12:00:10 +08:00
threading.Thread(target=main.main, args=(False,), daemon=False).start()
logging.info('程序启动完成')
2023-01-02 13:28:32 +08:00
if notify:
pkg.utils.context.get_qqbot_manager().notify_admin("重载完成")