还是随项目启动。解决对象传递问题

This commit is contained in:
liuwei
2025-03-27 11:55:10 +08:00
parent 948b47aa62
commit 1abd076932
5 changed files with 76 additions and 109 deletions

View File

@@ -18,25 +18,69 @@ from db.stats_db import StatsDBOperator
from utils.wechat.contact_manager import ContactManager
from robot_cmd.robot_command import GroupBotManager, Feature, PermissionStatus
# 在导入部分添加
import toml
import os.path
class DashboardServer:
"""统计看板服务器"""
def __init__(self, host: str = "0.0.0.0", port: int = 8888,
username: str = "admin", password: str = "admin123"):
self.host = host
self.port = port
self.username = username
self.password = password
def __init__(self, host: str = None, port: int = None,
username: str = None, password: str = None,
robot_instance=None):
# 加载配置文件
self.config = self._load_dashboard_config()
# 优先使用传入的参数,其次使用配置文件中的参数
self.host = host or self.config.get("server", {}).get("host", "0.0.0.0")
self.port = port or self.config.get("server", {}).get("port", 8888)
self.username = username or self.config.get("auth", {}).get("username", "admin")
self.password = password or self.config.get("auth", {}).get("password", "admin123")
self.logger = logging.getLogger("DashboardServer")
self.logger.info(f"Dashboard配置加载完成: 服务器将运行在 {self.host}:{self.port}")
# 初始化数据库连接
self._init_database()
# 如果提供了robot实例则使用其对象
if robot_instance:
self.db_manager = robot_instance.db_manager
self.contact_manager = robot_instance.contact_manager
# 使用robot的GroupBotManager实例
self.gbm = robot_instance.gbm
self.logger.info("使用Robot实例的对象进行初始化")
else:
# 初始化数据库连接
self._init_database()
# 获取联系人管理器实例
self.contact_manager = ContactManager.get_instance()
self.logger.info("独立初始化数据库和联系人管理器")
# 获取联系人管理器实例
self.contact_manager = ContactManager.get_instance()
self.app = self._create_app()
self._stop_event = threading.Event()
self._server = None # 存储服务器实例
def _load_dashboard_config(self):
"""加载Dashboard配置文件"""
try:
config_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'config.toml')
if os.path.exists(config_path):
with open(config_path, 'r', encoding='utf-8') as f:
return toml.load(f)
else:
# 如果配置文件不存在,创建默认配置
default_config = {
"server": {"host": "0.0.0.0", "port": 8888},
"auth": {"username": "admin", "password": "admin123"}
}
with open(config_path, 'w', encoding='utf-8') as f:
toml.dump(default_config, f)
return default_config
except Exception as e:
print(f"加载Dashboard配置文件失败: {e}")
# 返回默认配置
return {
"server": {"host": "0.0.0.0", "port": 8888},
"auth": {"username": "admin", "password": "admin123"}
}
def _load_config(self):
"""从配置文件加载配置"""