Lib.core.ConfigManager
配置管理器
1""" 2配置管理器 3""" 4 5import dataclasses 6 7import yaml 8from ..constants import * 9from ..utils import Logger 10 11logger = Logger.get_logger() 12 13 14class ConfigManager: 15 """ 16 配置管理器 17 """ 18 def __init__(self, config_path, default_config: str | dict = None): 19 self.config_path = config_path 20 self.default_config = default_config 21 self.config = {} 22 self.load_config() 23 24 def load_config(self): 25 """ 26 加载配置文件 27 Returns: 28 None 29 """ 30 if os.path.exists(self.config_path): 31 try: 32 with open(self.config_path, encoding="utf-8") as f: 33 self.config = yaml.safe_load(f) 34 except Exception as e: 35 logger.error(f"配置文件 {self.config_path} 加载失败,请检查配置文件内容是否正确。" 36 f"如果无法修复,请删除配置文件重新配置,以创建默认配置文件。" 37 f"错误信息:{repr(e)}") 38 else: 39 try: 40 if isinstance(self.default_config, str): 41 with open(self.config_path, "w", encoding="utf-8") as f: 42 f.write(self.default_config) 43 logger.info(f"配置文件 {self.config_path} 不存在,已创建默认配置文件") 44 self.load_config() 45 elif isinstance(self.default_config, dict): 46 with open(self.config_path, "w", encoding="utf-8") as f: 47 yaml.safe_dump(self.default_config, f) 48 logger.info(f"配置文件 {self.config_path} 不存在,已创建默认配置文件") 49 self.load_config() 50 else: 51 logger.error(f"配置文件 {self.config_path} 不存在,且未提供默认配置,无法创建默认配置文件") 52 self.config = {} 53 except Exception as e: 54 logger.error(f"配置文件 {self.config_path} 创建失败,请检查配置文件路径是否正确。错误信息:{repr(e)}") 55 self.config = {} 56 self.init() 57 58 def init(self): 59 """ 60 用于初始化配置文件,可自行编写初始化逻辑,例如默认值等 61 """ 62 pass 63 64 def save_config(self): 65 """ 66 保存配置文件 67 Returns: 68 None 69 """ 70 with open(self.config_path, "w", encoding="utf-8") as f: 71 yaml.safe_dump(self.config, f) 72 73 def get(self, key, default=None): 74 """ 75 获取配置项 76 Args: 77 key: 配置项键 78 default: 默认值 79 Returns: 80 配置项值 81 """ 82 return self.config.get(key, default) 83 84 def set(self, key, value): 85 """ 86 设置配置项 87 Args: 88 key: 配置项键 89 value: 配置项值 90 Returns: 91 None 92 """ 93 self.config[key] = value 94 self.init() 95 96 97class GlobalConfig(ConfigManager): 98 """ 99 MRB2配置管理器 100 """ 101 _instance = None 102 _init_flag = False 103 104 @dataclasses.dataclass 105 class Account: 106 """ 107 账号相关 108 """ 109 user_id: int 110 nick_name: str 111 bot_admin: list 112 113 @dataclasses.dataclass 114 class Api: 115 """ 116 Api设置 117 """ 118 host: str 119 port: int 120 access_token: str 121 122 @dataclasses.dataclass 123 class Server: 124 """ 125 监听服务器设置 126 """ 127 host: str 128 port: int 129 server: str 130 max_works: int 131 secret: str 132 133 @dataclasses.dataclass 134 class ThreadPool: 135 """ 136 线程池相关 137 """ 138 max_workers: int 139 140 @dataclasses.dataclass 141 class QQDataCache: 142 """ 143 QQ数据缓存设置 144 """ 145 enable: bool 146 expire_time: int 147 max_cache_size: int 148 149 @dataclasses.dataclass 150 class Debug: 151 """ 152 调试模式,若启用框架的日志等级将被设置为debug,不建议在生产环境开启 153 """ 154 enable: bool 155 save_dump: bool 156 157 @dataclasses.dataclass 158 class AutoRestartOnebot: 159 """ 160 在Onebot实现端状态异常时自动重启Onebot实现端(需开启心跳包) 161 """ 162 enable: bool 163 164 @dataclasses.dataclass 165 class Command: 166 """ 167 命令相关 168 """ 169 command_start: list[str] 170 171 DEFAULT_CONFIG = """# MuRainBot2配置文件 172account: # 账号相关 173 user_id: 0 # QQ账号(留空则自动获取) 174 nick_name: "" # 昵称(留空则自动获取) 175 bot_admin: [] 176 177api: # Api设置(Onebot HTTP通信) 178 host: '127.0.0.1' 179 port: 5700 180 access_token: "" # HTTP的Access Token,为空则不使用(详见https://github.com/botuniverse/onebot-11/blob/master/communication/authorization.md#http-%E5%92%8C%E6%AD%A3%E5%90%91-websocket) 181 182server: # 监听服务器设置(Onebot HTTP POST通信) 183 host: '127.0.0.1' 184 port: 5701 185 server: 'werkzeug' # 使用的服务器(werkzeug或waitress,使用waitress需先pip install waitress) 186 max_works: 4 # 最大工作线程数 187 secret: "" # 上报数据签名密钥(详见https://github.com/botuniverse/onebot-11/blob/master/communication/http-post.md#%E7%AD%BE%E5%90%8D) 188 189thread_pool: # 线程池相关 190 max_workers: 10 # 线程池最大线程数 191 192qq_data_cache: # QQ数据缓存设置 193 enable: true # 是否启用缓存(非常不推荐关闭缓存,对于对于需要无缓存的场景,推荐在插件内自行调用api来获取而非关闭此配置项) 194 expire_time: 300 # 缓存过期时间(秒) 195 max_cache_size: 500 # 最大缓存数量(设置过大可能会导致报错) 196 197debug: # 调试模式,若启用框架的日志等级将被设置为debug,不建议在生产环境开启 198 enable: false # 是否启用调试模式 199 save_dump: true # 是否在发生异常的同时保存一个dump错误文件(不受debug.enable约束,独立开关,若要使用请先安装coredumpy库,不使用可不安装) 200 201auto_restart_onebot: # 在Onebot实现端状态异常时自动重启Onebot实现端(需开启心跳包) 202 enable: true # 是否启用自动重启 203 204command: # 命令相关 205 command_start: ["/"] # 命令起始符 206""" 207 208 def __new__(cls): 209 if not cls._instance: 210 cls._instance = super().__new__(cls) 211 return cls._instance 212 213 def __init__(self): 214 self.account: GlobalConfig.Account = None 215 self.api: GlobalConfig.Api = None 216 self.server: GlobalConfig.Server = None 217 self.thread_pool: GlobalConfig.ThreadPool = None 218 self.qq_data_cache: GlobalConfig.QQDataCache = None 219 self.debug: GlobalConfig.Debug = None 220 self.auto_restart_onebot: GlobalConfig.AutoRestartOnebot = None 221 self.command: GlobalConfig.Command = None 222 if not self._init_flag: 223 self._init_flag = True 224 super().__init__(CONFIG_PATH, self.DEFAULT_CONFIG) 225 else: 226 self.init() 227 228 def init(self): 229 super().init() 230 self.account = self.Account( 231 user_id=self.get("account", {}).get("user_id", 0), 232 nick_name=self.get("account", {}).get("nick_name", ""), 233 bot_admin=self.get("account", {}).get("bot_admin", []) 234 ) 235 self.api = self.Api( 236 host=self.get("api", {}).get("host", ""), 237 port=self.get("api", {}).get("port", 5700), 238 access_token=self.get("api", {}).get("access_token", "") 239 ) 240 self.server = self.Server( 241 host=self.get("server", {}).get("host", ""), 242 port=self.get("server", {}).get("port", 5701), 243 server=self.get("server", {}).get("server", "werkzeug").lower(), 244 max_works=self.get("server", {}).get("max_works", 4), 245 secret=self.get("server", {}).get("secret", "") 246 ) 247 self.thread_pool = self.ThreadPool( 248 max_workers=self.get("thread_pool", {}).get("max_workers", 10) 249 ) 250 self.qq_data_cache = self.QQDataCache( 251 enable=self.get("qq_data_cache", {}).get("enable", True), 252 expire_time=self.get("qq_data_cache", {}).get("expire_time", 300), 253 max_cache_size=self.get("qq_data_cache", {}).get("max_cache_size", 500) 254 ) 255 self.debug = self.Debug( 256 enable=self.get("debug", {}).get("enable", False), 257 save_dump=self.get("debug", {}).get("save_dump", True) 258 ) 259 self.auto_restart_onebot = self.AutoRestartOnebot( 260 enable=self.get("auto_restart_onebot", {}).get("enable", True) 261 ) 262 self.command = self.Command( 263 command_start=self.get("command", {}).get("command_start", ["/"]) 264 ) 265 266 267if __name__ == "__main__": 268 test_config = GlobalConfig() 269 print(test_config.api) 270 test_config.set("api", {"host": "127.0.0.1", "port": 5700}) 271 print(test_config.api)
logger =
<RootLogger root (INFO)>
class
ConfigManager:
15class ConfigManager: 16 """ 17 配置管理器 18 """ 19 def __init__(self, config_path, default_config: str | dict = None): 20 self.config_path = config_path 21 self.default_config = default_config 22 self.config = {} 23 self.load_config() 24 25 def load_config(self): 26 """ 27 加载配置文件 28 Returns: 29 None 30 """ 31 if os.path.exists(self.config_path): 32 try: 33 with open(self.config_path, encoding="utf-8") as f: 34 self.config = yaml.safe_load(f) 35 except Exception as e: 36 logger.error(f"配置文件 {self.config_path} 加载失败,请检查配置文件内容是否正确。" 37 f"如果无法修复,请删除配置文件重新配置,以创建默认配置文件。" 38 f"错误信息:{repr(e)}") 39 else: 40 try: 41 if isinstance(self.default_config, str): 42 with open(self.config_path, "w", encoding="utf-8") as f: 43 f.write(self.default_config) 44 logger.info(f"配置文件 {self.config_path} 不存在,已创建默认配置文件") 45 self.load_config() 46 elif isinstance(self.default_config, dict): 47 with open(self.config_path, "w", encoding="utf-8") as f: 48 yaml.safe_dump(self.default_config, f) 49 logger.info(f"配置文件 {self.config_path} 不存在,已创建默认配置文件") 50 self.load_config() 51 else: 52 logger.error(f"配置文件 {self.config_path} 不存在,且未提供默认配置,无法创建默认配置文件") 53 self.config = {} 54 except Exception as e: 55 logger.error(f"配置文件 {self.config_path} 创建失败,请检查配置文件路径是否正确。错误信息:{repr(e)}") 56 self.config = {} 57 self.init() 58 59 def init(self): 60 """ 61 用于初始化配置文件,可自行编写初始化逻辑,例如默认值等 62 """ 63 pass 64 65 def save_config(self): 66 """ 67 保存配置文件 68 Returns: 69 None 70 """ 71 with open(self.config_path, "w", encoding="utf-8") as f: 72 yaml.safe_dump(self.config, f) 73 74 def get(self, key, default=None): 75 """ 76 获取配置项 77 Args: 78 key: 配置项键 79 default: 默认值 80 Returns: 81 配置项值 82 """ 83 return self.config.get(key, default) 84 85 def set(self, key, value): 86 """ 87 设置配置项 88 Args: 89 key: 配置项键 90 value: 配置项值 91 Returns: 92 None 93 """ 94 self.config[key] = value 95 self.init()
配置管理器
def
load_config(self):
25 def load_config(self): 26 """ 27 加载配置文件 28 Returns: 29 None 30 """ 31 if os.path.exists(self.config_path): 32 try: 33 with open(self.config_path, encoding="utf-8") as f: 34 self.config = yaml.safe_load(f) 35 except Exception as e: 36 logger.error(f"配置文件 {self.config_path} 加载失败,请检查配置文件内容是否正确。" 37 f"如果无法修复,请删除配置文件重新配置,以创建默认配置文件。" 38 f"错误信息:{repr(e)}") 39 else: 40 try: 41 if isinstance(self.default_config, str): 42 with open(self.config_path, "w", encoding="utf-8") as f: 43 f.write(self.default_config) 44 logger.info(f"配置文件 {self.config_path} 不存在,已创建默认配置文件") 45 self.load_config() 46 elif isinstance(self.default_config, dict): 47 with open(self.config_path, "w", encoding="utf-8") as f: 48 yaml.safe_dump(self.default_config, f) 49 logger.info(f"配置文件 {self.config_path} 不存在,已创建默认配置文件") 50 self.load_config() 51 else: 52 logger.error(f"配置文件 {self.config_path} 不存在,且未提供默认配置,无法创建默认配置文件") 53 self.config = {} 54 except Exception as e: 55 logger.error(f"配置文件 {self.config_path} 创建失败,请检查配置文件路径是否正确。错误信息:{repr(e)}") 56 self.config = {} 57 self.init()
加载配置文件
Returns:
None
def
save_config(self):
65 def save_config(self): 66 """ 67 保存配置文件 68 Returns: 69 None 70 """ 71 with open(self.config_path, "w", encoding="utf-8") as f: 72 yaml.safe_dump(self.config, f)
保存配置文件
Returns:
None
98class GlobalConfig(ConfigManager): 99 """ 100 MRB2配置管理器 101 """ 102 _instance = None 103 _init_flag = False 104 105 @dataclasses.dataclass 106 class Account: 107 """ 108 账号相关 109 """ 110 user_id: int 111 nick_name: str 112 bot_admin: list 113 114 @dataclasses.dataclass 115 class Api: 116 """ 117 Api设置 118 """ 119 host: str 120 port: int 121 access_token: str 122 123 @dataclasses.dataclass 124 class Server: 125 """ 126 监听服务器设置 127 """ 128 host: str 129 port: int 130 server: str 131 max_works: int 132 secret: str 133 134 @dataclasses.dataclass 135 class ThreadPool: 136 """ 137 线程池相关 138 """ 139 max_workers: int 140 141 @dataclasses.dataclass 142 class QQDataCache: 143 """ 144 QQ数据缓存设置 145 """ 146 enable: bool 147 expire_time: int 148 max_cache_size: int 149 150 @dataclasses.dataclass 151 class Debug: 152 """ 153 调试模式,若启用框架的日志等级将被设置为debug,不建议在生产环境开启 154 """ 155 enable: bool 156 save_dump: bool 157 158 @dataclasses.dataclass 159 class AutoRestartOnebot: 160 """ 161 在Onebot实现端状态异常时自动重启Onebot实现端(需开启心跳包) 162 """ 163 enable: bool 164 165 @dataclasses.dataclass 166 class Command: 167 """ 168 命令相关 169 """ 170 command_start: list[str] 171 172 DEFAULT_CONFIG = """# MuRainBot2配置文件 173account: # 账号相关 174 user_id: 0 # QQ账号(留空则自动获取) 175 nick_name: "" # 昵称(留空则自动获取) 176 bot_admin: [] 177 178api: # Api设置(Onebot HTTP通信) 179 host: '127.0.0.1' 180 port: 5700 181 access_token: "" # HTTP的Access Token,为空则不使用(详见https://github.com/botuniverse/onebot-11/blob/master/communication/authorization.md#http-%E5%92%8C%E6%AD%A3%E5%90%91-websocket) 182 183server: # 监听服务器设置(Onebot HTTP POST通信) 184 host: '127.0.0.1' 185 port: 5701 186 server: 'werkzeug' # 使用的服务器(werkzeug或waitress,使用waitress需先pip install waitress) 187 max_works: 4 # 最大工作线程数 188 secret: "" # 上报数据签名密钥(详见https://github.com/botuniverse/onebot-11/blob/master/communication/http-post.md#%E7%AD%BE%E5%90%8D) 189 190thread_pool: # 线程池相关 191 max_workers: 10 # 线程池最大线程数 192 193qq_data_cache: # QQ数据缓存设置 194 enable: true # 是否启用缓存(非常不推荐关闭缓存,对于对于需要无缓存的场景,推荐在插件内自行调用api来获取而非关闭此配置项) 195 expire_time: 300 # 缓存过期时间(秒) 196 max_cache_size: 500 # 最大缓存数量(设置过大可能会导致报错) 197 198debug: # 调试模式,若启用框架的日志等级将被设置为debug,不建议在生产环境开启 199 enable: false # 是否启用调试模式 200 save_dump: true # 是否在发生异常的同时保存一个dump错误文件(不受debug.enable约束,独立开关,若要使用请先安装coredumpy库,不使用可不安装) 201 202auto_restart_onebot: # 在Onebot实现端状态异常时自动重启Onebot实现端(需开启心跳包) 203 enable: true # 是否启用自动重启 204 205command: # 命令相关 206 command_start: ["/"] # 命令起始符 207""" 208 209 def __new__(cls): 210 if not cls._instance: 211 cls._instance = super().__new__(cls) 212 return cls._instance 213 214 def __init__(self): 215 self.account: GlobalConfig.Account = None 216 self.api: GlobalConfig.Api = None 217 self.server: GlobalConfig.Server = None 218 self.thread_pool: GlobalConfig.ThreadPool = None 219 self.qq_data_cache: GlobalConfig.QQDataCache = None 220 self.debug: GlobalConfig.Debug = None 221 self.auto_restart_onebot: GlobalConfig.AutoRestartOnebot = None 222 self.command: GlobalConfig.Command = None 223 if not self._init_flag: 224 self._init_flag = True 225 super().__init__(CONFIG_PATH, self.DEFAULT_CONFIG) 226 else: 227 self.init() 228 229 def init(self): 230 super().init() 231 self.account = self.Account( 232 user_id=self.get("account", {}).get("user_id", 0), 233 nick_name=self.get("account", {}).get("nick_name", ""), 234 bot_admin=self.get("account", {}).get("bot_admin", []) 235 ) 236 self.api = self.Api( 237 host=self.get("api", {}).get("host", ""), 238 port=self.get("api", {}).get("port", 5700), 239 access_token=self.get("api", {}).get("access_token", "") 240 ) 241 self.server = self.Server( 242 host=self.get("server", {}).get("host", ""), 243 port=self.get("server", {}).get("port", 5701), 244 server=self.get("server", {}).get("server", "werkzeug").lower(), 245 max_works=self.get("server", {}).get("max_works", 4), 246 secret=self.get("server", {}).get("secret", "") 247 ) 248 self.thread_pool = self.ThreadPool( 249 max_workers=self.get("thread_pool", {}).get("max_workers", 10) 250 ) 251 self.qq_data_cache = self.QQDataCache( 252 enable=self.get("qq_data_cache", {}).get("enable", True), 253 expire_time=self.get("qq_data_cache", {}).get("expire_time", 300), 254 max_cache_size=self.get("qq_data_cache", {}).get("max_cache_size", 500) 255 ) 256 self.debug = self.Debug( 257 enable=self.get("debug", {}).get("enable", False), 258 save_dump=self.get("debug", {}).get("save_dump", True) 259 ) 260 self.auto_restart_onebot = self.AutoRestartOnebot( 261 enable=self.get("auto_restart_onebot", {}).get("enable", True) 262 ) 263 self.command = self.Command( 264 command_start=self.get("command", {}).get("command_start", ["/"]) 265 )
MRB2配置管理器
DEFAULT_CONFIG =
'# MuRainBot2配置文件\naccount: # 账号相关\n user_id: 0 # QQ账号(留空则自动获取)\n nick_name: "" # 昵称(留空则自动获取)\n bot_admin: []\n\napi: # Api设置(Onebot HTTP通信)\n host: \'127.0.0.1\'\n port: 5700\n access_token: "" # HTTP的Access Token,为空则不使用(详见https://github.com/botuniverse/onebot-11/blob/master/communication/authorization.md#http-%E5%92%8C%E6%AD%A3%E5%90%91-websocket)\n\nserver: # 监听服务器设置(Onebot HTTP POST通信)\n host: \'127.0.0.1\'\n port: 5701\n server: \'werkzeug\' # 使用的服务器(werkzeug或waitress,使用waitress需先pip install waitress)\n max_works: 4 # 最大工作线程数\n secret: "" # 上报数据签名密钥(详见https://github.com/botuniverse/onebot-11/blob/master/communication/http-post.md#%E7%AD%BE%E5%90%8D)\n\nthread_pool: # 线程池相关\n max_workers: 10 # 线程池最大线程数\n\nqq_data_cache: # QQ数据缓存设置\n enable: true # 是否启用缓存(非常不推荐关闭缓存,对于对于需要无缓存的场景,推荐在插件内自行调用api来获取而非关闭此配置项)\n expire_time: 300 # 缓存过期时间(秒)\n max_cache_size: 500 # 最大缓存数量(设置过大可能会导致报错)\n\ndebug: # 调试模式,若启用框架的日志等级将被设置为debug,不建议在生产环境开启\n enable: false # 是否启用调试模式\n save_dump: true # 是否在发生异常的同时保存一个dump错误文件(不受debug.enable约束,独立开关,若要使用请先安装coredumpy库,不使用可不安装)\n\nauto_restart_onebot: # 在Onebot实现端状态异常时自动重启Onebot实现端(需开启心跳包)\n enable: true # 是否启用自动重启\n\ncommand: # 命令相关\n command_start: ["/"] # 命令起始符\n'
account: GlobalConfig.Account
api: GlobalConfig.Api
server: GlobalConfig.Server
thread_pool: GlobalConfig.ThreadPool
qq_data_cache: GlobalConfig.QQDataCache
debug: GlobalConfig.Debug
auto_restart_onebot: GlobalConfig.AutoRestartOnebot
command: GlobalConfig.Command
def
init(self):
229 def init(self): 230 super().init() 231 self.account = self.Account( 232 user_id=self.get("account", {}).get("user_id", 0), 233 nick_name=self.get("account", {}).get("nick_name", ""), 234 bot_admin=self.get("account", {}).get("bot_admin", []) 235 ) 236 self.api = self.Api( 237 host=self.get("api", {}).get("host", ""), 238 port=self.get("api", {}).get("port", 5700), 239 access_token=self.get("api", {}).get("access_token", "") 240 ) 241 self.server = self.Server( 242 host=self.get("server", {}).get("host", ""), 243 port=self.get("server", {}).get("port", 5701), 244 server=self.get("server", {}).get("server", "werkzeug").lower(), 245 max_works=self.get("server", {}).get("max_works", 4), 246 secret=self.get("server", {}).get("secret", "") 247 ) 248 self.thread_pool = self.ThreadPool( 249 max_workers=self.get("thread_pool", {}).get("max_workers", 10) 250 ) 251 self.qq_data_cache = self.QQDataCache( 252 enable=self.get("qq_data_cache", {}).get("enable", True), 253 expire_time=self.get("qq_data_cache", {}).get("expire_time", 300), 254 max_cache_size=self.get("qq_data_cache", {}).get("max_cache_size", 500) 255 ) 256 self.debug = self.Debug( 257 enable=self.get("debug", {}).get("enable", False), 258 save_dump=self.get("debug", {}).get("save_dump", True) 259 ) 260 self.auto_restart_onebot = self.AutoRestartOnebot( 261 enable=self.get("auto_restart_onebot", {}).get("enable", True) 262 ) 263 self.command = self.Command( 264 command_start=self.get("command", {}).get("command_start", ["/"]) 265 )
用于初始化配置文件,可自行编写初始化逻辑,例如默认值等
Inherited Members
@dataclasses.dataclass
class
GlobalConfig.Account:
105 @dataclasses.dataclass 106 class Account: 107 """ 108 账号相关 109 """ 110 user_id: int 111 nick_name: str 112 bot_admin: list
账号相关
@dataclasses.dataclass
class
GlobalConfig.Api:
114 @dataclasses.dataclass 115 class Api: 116 """ 117 Api设置 118 """ 119 host: str 120 port: int 121 access_token: str
Api设置
@dataclasses.dataclass
class
GlobalConfig.Server:
123 @dataclasses.dataclass 124 class Server: 125 """ 126 监听服务器设置 127 """ 128 host: str 129 port: int 130 server: str 131 max_works: int 132 secret: str
监听服务器设置
@dataclasses.dataclass
class
GlobalConfig.ThreadPool:
线程池相关
@dataclasses.dataclass
class
GlobalConfig.QQDataCache:
141 @dataclasses.dataclass 142 class QQDataCache: 143 """ 144 QQ数据缓存设置 145 """ 146 enable: bool 147 expire_time: int 148 max_cache_size: int
QQ数据缓存设置
@dataclasses.dataclass
class
GlobalConfig.Debug:
150 @dataclasses.dataclass 151 class Debug: 152 """ 153 调试模式,若启用框架的日志等级将被设置为debug,不建议在生产环境开启 154 """ 155 enable: bool 156 save_dump: bool
调试模式,若启用框架的日志等级将被设置为debug,不建议在生产环境开启
@dataclasses.dataclass
class
GlobalConfig.AutoRestartOnebot:
158 @dataclasses.dataclass 159 class AutoRestartOnebot: 160 """ 161 在Onebot实现端状态异常时自动重启Onebot实现端(需开启心跳包) 162 """ 163 enable: bool
在Onebot实现端状态异常时自动重启Onebot实现端(需开启心跳包)
@dataclasses.dataclass
class
GlobalConfig.Command:
命令相关