diff --git a/plugins/stats_dashboard/dashboard_server.py b/plugins/stats_dashboard/dashboard_server.py index b01fb07..ebeee62 100644 --- a/plugins/stats_dashboard/dashboard_server.py +++ b/plugins/stats_dashboard/dashboard_server.py @@ -8,7 +8,7 @@ from flask import Flask, render_template, request, jsonify, redirect, url_for, s from db.connection import DBConnectionManager from db.stats_db import StatsDBOperator from utils.wechat.contact_manager import ContactManager - +from robot_cmd.robot_command import GroupBotManager, Feature, PermissionStatus class DashboardServer: """统计看板服务器""" @@ -69,6 +69,96 @@ class DashboardServer: def errors(): return render_template('errors.html') + # 在_create_app方法中添加新的路由 + @app.route('/robot_management') + def robot_management(): + return render_template('robot_management.html') + + @app.route('/api/robot/groups') + def api_robot_groups(): + # 获取所有群组列表 + + groups = GroupBotManager.get_group_list() + group_data = [] + + for group_id in groups: + group_name = self.contact_manager.get_nickname(group_id) + robot_status = GroupBotManager.get_group_permission(group_id, Feature.ROBOT) + group_data.append({ + "group_id": group_id, + "group_name": group_name, + "robot_status": robot_status.value + }) + + return jsonify({"success": True, "data": group_data}) + + @app.route('/api/robot/group//permissions') + def api_robot_group_permissions(group_id): + + permissions = GroupBotManager.list_group_permissions(group_id) + permission_data = [] + + for feature, status in permissions.items(): + permission_data.append({ + "feature_id": feature.value, + "feature_name": feature.name, + "feature_description": feature.description, + "status": status.value + }) + + return jsonify({"success": True, "data": permission_data}) + + @app.route('/api/robot/group//permissions', methods=['POST']) + def api_update_robot_permissions(group_id): + # 更新群组功能权限 + from robot_cmd.robot_command import GroupBotManager, Feature, PermissionStatus + + data = request.json + feature_id = data.get('feature_id') + status = data.get('status') + + try: + feature = Feature(int(feature_id)) + new_status = PermissionStatus(status) + + # 特殊处理ROBOT功能 + if feature == Feature.ROBOT: + r = self.db_manager.get_redis_connection() + if new_status == PermissionStatus.ENABLED: + GroupBotManager.local_cache["group_list"].add(group_id) + r.sadd("group:list", group_id) + else: + GroupBotManager.local_cache["group_list"].remove(group_id) + r.srem("group:list", group_id) + + GroupBotManager.set_group_permission(group_id, feature, new_status) + return jsonify({"success": True}) + except Exception as e: + self.logger.error(f"更新群组权限失败: {e}") + return jsonify({"success": False, "error": str(e)}), 400 + + @app.route('/api/robot/batch_operation', methods=['POST']) + def api_robot_batch_operation(): + # 批量操作接口 + data = request.json + operation = data.get('operation') + group_ids = data.get('group_ids', []) + + results = {} + + try: + if operation == 'remove_groups': + for group_id in group_ids: + result = GroupBotManager.remove_group(group_id) + results[group_id] = result + + return jsonify({"success": True, "results": results}) + else: + return jsonify({"success": False, "error": "不支持的操作类型"}), 400 + except Exception as e: + self.logger.error(f"批量操作失败: {e}") + return jsonify({"success": False, "error": str(e)}), 400 + @app.route('/api/plugin_stats') def api_plugin_stats(): days = request.args.get('days', 7, type=int) @@ -197,3 +287,4 @@ class DashboardServer: except Exception as e: if hasattr(self, 'logger'): self.logger.error(f"DashboardServer 析构时出错: {e}") + diff --git a/plugins/stats_dashboard/templates/base.html b/plugins/stats_dashboard/templates/base.html index 4df8d7d..5e78545 100644 --- a/plugins/stats_dashboard/templates/base.html +++ b/plugins/stats_dashboard/templates/base.html @@ -103,6 +103,13 @@ 错误日志 + + + + + + 群机器人管理 + @@ -153,7 +160,8 @@ '2': '/plugins', '3': '/users', '4': '/groups', - '5': '/errors' + '5': '/errors', + '6': '/robot_management' }; // 如果当前不在对应页面,则跳转