855 协议版本-调整完毕内容
This commit is contained in:
@@ -1,10 +1,9 @@
|
||||
from flask import Blueprint, render_template, jsonify, request, current_app
|
||||
from .auth import login_required
|
||||
import logging
|
||||
from loguru import logger
|
||||
|
||||
# 创建联系人管理蓝图
|
||||
contacts_bp = Blueprint('contacts', __name__, url_prefix='/contacts')
|
||||
logger = logging.getLogger("ContactsBlueprint")
|
||||
|
||||
# 联系人管理页面
|
||||
@contacts_bp.route('/')
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
from flask import Blueprint, render_template, jsonify, request, current_app
|
||||
from .auth import login_required
|
||||
import logging
|
||||
from loguru import logger
|
||||
import xml.etree.ElementTree as ET
|
||||
from datetime import datetime
|
||||
from utils.message_formatter import format_quote_message
|
||||
|
||||
# 创建消息管理蓝图
|
||||
messages_bp = Blueprint('messages', __name__)
|
||||
logger = logging.getLogger("MessagesBlueprint")
|
||||
logger = logger
|
||||
|
||||
# 消息列表页面
|
||||
@messages_bp.route('/messages')
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import json
|
||||
import logging
|
||||
from loguru import logger
|
||||
import os
|
||||
|
||||
import toml
|
||||
@@ -9,7 +9,7 @@ from admin.dashboard.blueprints.auth import login_required
|
||||
|
||||
# 创建蓝图
|
||||
plugin_routes = Blueprint('plugin_routes', __name__)
|
||||
LOG = logging.getLogger(__name__)
|
||||
LOG = logger
|
||||
|
||||
|
||||
# 机器人管理页面
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
from flask import Blueprint, render_template, jsonify, request, current_app
|
||||
from .auth import login_required
|
||||
import logging
|
||||
from loguru import logger
|
||||
from utils.robot_cmd.robot_command import GroupBotManager, Feature, PermissionStatus
|
||||
from datetime import datetime
|
||||
|
||||
# 创建机器人管理蓝图
|
||||
robot_bp = Blueprint('robot', __name__, url_prefix='/robot')
|
||||
logger = logging.getLogger("RobotBlueprint")
|
||||
LOG = logger
|
||||
|
||||
# 机器人管理页面
|
||||
@robot_bp.route('/')
|
||||
@@ -31,7 +31,7 @@ def api_robot_groups():
|
||||
if groups is None:
|
||||
groups = set()
|
||||
|
||||
logger.info(f"获取到 {len(groups)} 个群组")
|
||||
LOG.info(f"获取到 {len(groups)} 个群组")
|
||||
group_data = []
|
||||
|
||||
for group_id in groups:
|
||||
@@ -53,7 +53,7 @@ def api_robot_groups():
|
||||
"robot_status": robot_status.value if robot_status else "unknown"
|
||||
})
|
||||
except Exception as e:
|
||||
logger.warning(f"处理群组 {group_id} 信息时出错: {e}")
|
||||
LOG.warning(f"处理群组 {group_id} 信息时出错: {e}")
|
||||
# 添加基本信息,避免单个群组错误影响整个列表
|
||||
group_data.append({
|
||||
"group_id": group_id,
|
||||
@@ -63,7 +63,7 @@ def api_robot_groups():
|
||||
|
||||
return jsonify({"success": True, "data": group_data})
|
||||
except Exception as e:
|
||||
logger.error(f"获取群组列表失败: {e}")
|
||||
LOG.error(f"获取群组列表失败: {e}")
|
||||
return jsonify({"success": False, "error": str(e)}), 500
|
||||
|
||||
@robot_bp.route('/api/group/<group_id>/permissions')
|
||||
@@ -83,7 +83,7 @@ def api_robot_group_permissions(group_id):
|
||||
|
||||
return jsonify({"success": True, "data": permission_data})
|
||||
except Exception as e:
|
||||
logger.error(f"获取群组权限失败: {e}")
|
||||
LOG.error(f"获取群组权限失败: {e}")
|
||||
return jsonify({"success": False, "error": str(e)}), 500
|
||||
|
||||
@robot_bp.route('/api/group/<group_id>/permissions', methods=['POST'])
|
||||
@@ -112,7 +112,7 @@ def api_update_robot_permissions(group_id):
|
||||
GroupBotManager.set_group_permission(group_id, feature, new_status)
|
||||
return jsonify({"success": True})
|
||||
except Exception as e:
|
||||
logger.error(f"更新群组权限失败: {e}")
|
||||
LOG.error(f"更新群组权限失败: {e}")
|
||||
return jsonify({"success": False, "error": str(e)}), 400
|
||||
|
||||
@robot_bp.route('/api/batch_operation', methods=['POST'])
|
||||
@@ -135,7 +135,7 @@ def api_robot_batch_operation():
|
||||
else:
|
||||
return jsonify({"success": False, "error": "不支持的操作类型"}), 400
|
||||
except Exception as e:
|
||||
logger.error(f"批量操作失败: {e}")
|
||||
LOG.error(f"批量操作失败: {e}")
|
||||
return jsonify({"success": False, "error": str(e)}), 400
|
||||
|
||||
@robot_bp.route('/api/add_group', methods=['POST'])
|
||||
@@ -179,7 +179,7 @@ def api_add_group():
|
||||
}
|
||||
})
|
||||
except Exception as e:
|
||||
logger.error(f"添加群组失败: {e}")
|
||||
LOG.error(f"添加群组失败: {e}")
|
||||
return jsonify({"success": False, "error": str(e)}), 500
|
||||
|
||||
@robot_bp.route('/api/group/<group_id>/message_trend')
|
||||
@@ -211,7 +211,7 @@ def api_group_message_trend(group_id):
|
||||
}
|
||||
})
|
||||
except Exception as e:
|
||||
logger.error(f"获取群组消息趋势数据出错: {e}")
|
||||
LOG.error(f"获取群组消息趋势数据出错: {e}")
|
||||
return jsonify({'success': False, 'error': str(e)}), 500
|
||||
|
||||
# 添加缺失的群组状态更新接口
|
||||
@@ -225,7 +225,7 @@ def api_update_group_status(group_id):
|
||||
|
||||
if status == 'disabled':
|
||||
# 禁用该群组的所有功能
|
||||
logger.info(f"正在禁用群组 {group_id} 的所有功能")
|
||||
LOG.info(f"正在禁用群组 {group_id} 的所有功能")
|
||||
|
||||
# 获取所有功能并禁用
|
||||
for feature in Feature:
|
||||
@@ -245,7 +245,7 @@ def api_update_group_status(group_id):
|
||||
})
|
||||
elif status == 'enabled':
|
||||
# 启用该群组的基本功能
|
||||
logger.info(f"正在启用群组 {group_id} 的基本功能")
|
||||
LOG.info(f"正在启用群组 {group_id} 的基本功能")
|
||||
|
||||
# 添加到群组列表
|
||||
if group_id not in GroupBotManager.local_cache["group_list"]:
|
||||
@@ -269,5 +269,5 @@ def api_update_group_status(group_id):
|
||||
}), 400
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"更新群组状态失败: {e}")
|
||||
LOG.error(f"更新群组状态失败: {e}")
|
||||
return jsonify({"success": False, "error": str(e)}), 500
|
||||
@@ -1,12 +1,11 @@
|
||||
from flask import Blueprint, render_template, jsonify, request
|
||||
from .auth import login_required
|
||||
import logging
|
||||
from loguru import logger
|
||||
from datetime import datetime
|
||||
from flask import current_app
|
||||
|
||||
# 创建统计数据蓝图
|
||||
stats_bp = Blueprint('stats', __name__)
|
||||
logger = logging.getLogger("StatsBlueprint")
|
||||
|
||||
# 页面路由
|
||||
@stats_bp.route('/plugins')
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from flask import Blueprint, render_template, jsonify, request, send_from_directory, current_app
|
||||
from .auth import login_required
|
||||
import logging
|
||||
from loguru import logger
|
||||
import os
|
||||
import time
|
||||
from datetime import datetime
|
||||
@@ -10,7 +10,7 @@ from collections import deque
|
||||
|
||||
# 创建系统信息蓝图
|
||||
system_bp = Blueprint('system', __name__)
|
||||
logger = logging.getLogger("SystemBlueprint")
|
||||
|
||||
# 记录应用启动时间
|
||||
APP_START_TIME = time.time()
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import logging
|
||||
from loguru import logger
|
||||
import uuid
|
||||
from flask import Blueprint, jsonify, request, current_app, render_template
|
||||
from .auth import login_required
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
virtual_group_bp = Blueprint('virtual_group', __name__)
|
||||
|
||||
# 添加虚拟群组管理视图
|
||||
|
||||
@@ -2,23 +2,22 @@
|
||||
"""
|
||||
统计看板服务器 - 使用Flask蓝图重构版
|
||||
"""
|
||||
import logging
|
||||
import os
|
||||
import sys
|
||||
import threading
|
||||
import time
|
||||
from datetime import datetime
|
||||
|
||||
from gewechat_client import GewechatClient
|
||||
from loguru import logger
|
||||
|
||||
from db.message_storage import MessageStorageDB
|
||||
from db.stats_db import StatsDBOperator
|
||||
from flask import Flask, send_from_directory
|
||||
import toml
|
||||
|
||||
from wechat_ipad import WechatAPIClient
|
||||
|
||||
# 添加项目根目录到系统路径,确保可以导入项目模块
|
||||
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..')))
|
||||
|
||||
|
||||
class DashboardServer:
|
||||
"""统计看板服务器"""
|
||||
|
||||
@@ -34,10 +33,8 @@ class DashboardServer:
|
||||
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}")
|
||||
logging.getLogger("werkzeug").setLevel(logging.WARNING)
|
||||
|
||||
self.LOG = logger
|
||||
self.LOG.info(f"Dashboard配置加载完成: 服务器将运行在 {self.host}:{self.port}")
|
||||
# 如果提供了robot实例,则使用其对象
|
||||
if robot_instance:
|
||||
self.db_manager = robot_instance.db_manager
|
||||
@@ -47,11 +44,10 @@ class DashboardServer:
|
||||
self.contact_manager = robot_instance.contact_manager
|
||||
self.plugin_manager = robot_instance.plugin_manager
|
||||
self.plugin_registry = robot_instance.plugin_registry
|
||||
self.client:GewechatClient= robot_instance.client
|
||||
self.app_id = robot_instance.app_id
|
||||
self.logger.info("使用Robot实例的对象进行初始化")
|
||||
self.client: WechatAPIClient = robot_instance.ipad_bot
|
||||
self.LOG.info("使用Robot实例的对象进行初始化")
|
||||
else:
|
||||
self.logger.error("未提供Robot实例,Dashboard无法正常工作")
|
||||
self.LOG.error("未提供Robot实例,Dashboard无法正常工作")
|
||||
raise ValueError("必须提供Robot实例")
|
||||
|
||||
self.app = self._create_app()
|
||||
@@ -75,7 +71,7 @@ class DashboardServer:
|
||||
toml.dump(default_config, f)
|
||||
return default_config
|
||||
except Exception as e:
|
||||
self.logger.error(f"加载Dashboard配置文件失败: {e}")
|
||||
self.LOG.error(f"加载Dashboard配置文件失败: {e}")
|
||||
# 返回默认配置
|
||||
return {
|
||||
"server": {"host": "0.0.0.0", "port": 8888},
|
||||
@@ -90,10 +86,10 @@ class DashboardServer:
|
||||
app.secret_key = "stats_dashboard_secret_key"
|
||||
# 禁用模板缓存,使修改HTML文件后立即生效
|
||||
app.config['TEMPLATES_AUTO_RELOAD'] = True
|
||||
|
||||
|
||||
# 将dashboard_server实例设置为app的属性
|
||||
app.dashboard_server = self
|
||||
|
||||
|
||||
# 配置静态文件访问
|
||||
static_folder = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'static')
|
||||
|
||||
@@ -120,9 +116,9 @@ class DashboardServer:
|
||||
|
||||
# 注册蓝图
|
||||
self._register_blueprints(app)
|
||||
|
||||
|
||||
return app
|
||||
|
||||
|
||||
def _register_blueprints(self, app):
|
||||
"""注册所有蓝图"""
|
||||
# 在函数内部导入蓝图,避免循环导入
|
||||
@@ -146,52 +142,52 @@ class DashboardServer:
|
||||
app.register_blueprint(stats_bp)
|
||||
app.register_blueprint(system_bp)
|
||||
app.register_blueprint(plugin_routes)
|
||||
|
||||
self.logger.info("所有蓝图已注册")
|
||||
|
||||
self.LOG.info("所有蓝图已注册")
|
||||
|
||||
def run(self):
|
||||
"""运行服务器"""
|
||||
from werkzeug.serving import make_server
|
||||
|
||||
self.logger.info(f"启动服务器: {self.host}:{self.port}")
|
||||
self.LOG.info(f"启动服务器: {self.host}:{self.port}")
|
||||
try:
|
||||
# 使用线程安全的方式运行服务器
|
||||
self._server = make_server(self.host, self.port, self.app)
|
||||
self._server.serve_forever()
|
||||
except Exception as e:
|
||||
self.logger.error(f"服务器运行失败: {e}")
|
||||
self.LOG.error(f"服务器运行失败: {e}")
|
||||
self._stop_event.set()
|
||||
|
||||
def stop(self):
|
||||
"""停止服务器"""
|
||||
self.logger.info("正在停止服务器...")
|
||||
self.LOG.info("正在停止服务器...")
|
||||
self._stop_event.set()
|
||||
|
||||
# 使用werkzeug服务器的关闭方法
|
||||
if self._server:
|
||||
self._server.shutdown()
|
||||
|
||||
self.logger.info("服务器已停止")
|
||||
self.LOG.info("服务器已停止")
|
||||
|
||||
def get_current_user_info(self):
|
||||
"""获取当前登录的微信用户信息"""
|
||||
try:
|
||||
if not self.client:
|
||||
self.logger.error("client实例不可用,无法获取当前用户信息")
|
||||
self.LOG.error("client实例不可用,无法获取当前用户信息")
|
||||
return {"success": False, "message": "实例不可用"}
|
||||
|
||||
|
||||
# 获取当前登录的微信ID
|
||||
resp = self.client.get_profile(self.app_id)
|
||||
|
||||
resp = self.client.get_profile(self.client.wxid)
|
||||
self.LOG.info(f"get_current_user_info:{resp}")
|
||||
if not resp or resp.get("ret") != 200:
|
||||
self.logger.error(f"获取用户信息失败: {resp}")
|
||||
self.LOG.error(f"获取用户信息失败: {resp}")
|
||||
return {"success": False, "message": "获取用户信息失败"}
|
||||
|
||||
|
||||
# 从新的resp格式中获取用户信息
|
||||
user_data = resp.get("data", {})
|
||||
if not user_data:
|
||||
return {"success": False, "message": "未获取到用户数据"}
|
||||
|
||||
|
||||
return {
|
||||
"success": True,
|
||||
"data": {
|
||||
@@ -203,5 +199,5 @@ class DashboardServer:
|
||||
}
|
||||
}
|
||||
except Exception as e:
|
||||
self.logger.error(f"获取当前用户信息失败: {e}")
|
||||
self.LOG.error(f"获取当前用户信息失败: {e}")
|
||||
return {"success": False, "message": f"获取用户信息出错: {str(e)}"}
|
||||
|
||||
Reference in New Issue
Block a user