#!/usr/bin/env python3 # -*- coding: utf-8 -*- import logging.config import os import shutil import yaml class Config(object): def __init__(self) -> None: self.reload() def _load_config(self) -> dict: pwd = os.path.dirname(os.path.abspath(__file__)) try: with open(f"{pwd}/config.yaml", "rb") as fp: yconfig = yaml.safe_load(fp) except FileNotFoundError: shutil.copyfile(f"{pwd}/config.yaml.template", f"{pwd}/config.yaml") with open(f"{pwd}/config.yaml", "rb") as fp: yconfig = yaml.safe_load(fp) return yconfig def reload(self) -> None: yconfig = self._load_config() logging.config.dictConfig(yconfig["logging"]) self.GROUPS = yconfig["groups"]["enable"] self.NEWS = yconfig["news"]["receivers"] self.REPORT_REMINDERS = yconfig["report_reminder"]["receivers"] self.CHATGPT = yconfig.get("chatgpt", {}) self.TIGERBOT = yconfig.get("tigerbot", {}) self.XINGHUO_WEB = yconfig.get("xinghuo_web", {}) self.CHATGLM = yconfig.get("chatglm", {}) self.BardAssistant = yconfig.get("bard", {}) self.ZhiPu = yconfig.get("zhipu", {}) self.CLAUDE = yconfig.get("claude", {}) self.DEEPSEEK = yconfig.get("deepseek", {}) self.DOUBAO = yconfig.get("doubao", {}) # DB config self.mariadb = yconfig.get("db_config", {}) self.redis = yconfig.get("redis_config", {}) #gewechat config gewechat_config = yconfig['gewechat'] self.BASE_URL = gewechat_config.get("base_url", "") self.GEWECHAT_TOKEN = gewechat_config.get("gewechat_token", "") self.APP_ID = gewechat_config.get("app_id", "") self.CALLBACK_URL = gewechat_config.get("callback_url", "") def update_config(self, section, key, value): """更新配置文件中指定部分的键值 Args: section: 配置部分名称,如 'gewechat' key: 键名,如 'app_id' value: 要设置的值 """ import yaml import os config_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'config.yaml') # 读取当前配置 with open(config_path, 'r', encoding='utf-8') as f: config_data = yaml.safe_load(f) # 更新配置 if section in config_data: config_data[section][key] = value # 写回配置文件 with open(config_path, 'w', encoding='utf-8') as f: yaml.dump(config_data, f, default_flow_style=False, allow_unicode=True) # 更新当前实例的属性 if hasattr(self, key.upper()): setattr(self, key.upper(), value) return True return False