From 8553c6797bafa4ac0a0292099cea202cc50668bc Mon Sep 17 00:00:00 2001 From: K2cr2O1 <2221577113@qq.com> Date: Fri, 23 Jan 2026 18:40:54 +0800 Subject: [PATCH] ssss --- core/bot.py | 1 + plugins/bot_status.py | 61 +++++++++++++++++++++++++++++++++++-------- templates/status.html | 10 ++++++- 3 files changed, 60 insertions(+), 12 deletions(-) diff --git a/core/bot.py b/core/bot.py index 0b16400..c727db4 100644 --- a/core/bot.py +++ b/core/bot.py @@ -39,6 +39,7 @@ class Bot(MessageAPI, GroupAPI, FriendAPI, AccountAPI, MediaAPI): """ super().__init__(ws_client, ws_client.self_id or 0) self.code_executor: Optional["CodeExecutor"] = None + self.nickname: str = "" async def get_group_list(self, no_cache: bool = False) -> List[GroupInfo]: # GroupAPI.get_group_list 不支持 no_cache 参数,这里忽略它 diff --git a/plugins/bot_status.py b/plugins/bot_status.py index 8828533..cab92ed 100644 --- a/plugins/bot_status.py +++ b/plugins/bot_status.py @@ -38,17 +38,38 @@ def _get_system_info(): cpu_percent = psutil.cpu_percent(interval=1) mem_info = psutil.virtual_memory() bot_mem_mb = PROCESS.memory_info().rss / (1024 * 1024) + + # 磁盘信息 + disk_usage = psutil.disk_usage('/') + + # 网络信息 + net_io = psutil.net_io_counters() + return { "cpu_percent": f"{cpu_percent:.1f}", "mem_percent": f"{mem_info.percent:.1f}", + "mem_total": f"{mem_info.total / (1024**3):.1f}", + "mem_used": f"{mem_info.used / (1024**3):.1f}", "bot_mem_mb": f"{bot_mem_mb:.2f}", + "disk_percent": f"{disk_usage.percent:.1f}", + "disk_total": f"{disk_usage.total / (1024**3):.1f}", + "disk_used": f"{disk_usage.used / (1024**3):.1f}", + "net_sent": f"{net_io.bytes_sent / (1024**2):.1f}", + "net_recv": f"{net_io.bytes_recv / (1024**2):.1f}", } except Exception as e: logger.error(f"获取系统信息失败: {e}") return { "cpu_percent": "N/A", "mem_percent": "N/A", + "mem_total": "N/A", + "mem_used": "N/A", "bot_mem_mb": "N/A", + "disk_percent": "N/A", + "disk_total": "N/A", + "disk_used": "N/A", + "net_sent": "N/A", + "net_recv": "N/A", } @matcher.command("status", "状态") @@ -60,18 +81,22 @@ async def handle_status(bot: Bot, event: MessageEvent, args: list[str]): try: # 1. 获取API信息 (增加独立错误处理) - try: - # 优先使用 get_stranger_info 获取自身信息,比 get_login_info 更轻量 - stranger_info = await bot.get_stranger_info(user_id=bot.self_id) - nickname = stranger_info.nickname - except Exception as e: - logger.warning(f"获取 stranger_info 失败: {e}, 将回退到 login_info") + # 尝试获取或更新 bot.nickname + if not hasattr(bot, "nickname") or not bot.nickname: try: - login_info = await bot.get_login_info() - nickname = login_info.nickname - except Exception as e2: - logger.warning(f"获取 login_info 也失败了: {e2}") - nickname = "获取失败" + # 优先使用 get_stranger_info 获取自身信息,比 get_login_info 更轻量 + stranger_info = await bot.get_stranger_info(user_id=bot.self_id) + bot.nickname = stranger_info.nickname + except Exception as e: + logger.warning(f"获取 stranger_info 失败: {e}, 将回退到 login_info") + try: + login_info = await bot.get_login_info() + bot.nickname = login_info.nickname + except Exception as e2: + logger.warning(f"获取 login_info 也失败了: {e2}") + bot.nickname = "获取失败" + + nickname = bot.nickname # 状态信息:如果能响应此命令,说明机器人必然在线且状态良好 # 这避免了依赖可能超时或未实现的 get_status API @@ -138,14 +163,28 @@ async def handle_status(bot: Bot, event: MessageEvent, args: list[str]): system_data = { "cpu_percent": "Timeout", "mem_percent": "Timeout", + "mem_total": "Timeout", + "mem_used": "Timeout", "bot_mem_mb": "Timeout", + "disk_percent": "Timeout", + "disk_total": "Timeout", + "disk_used": "Timeout", + "net_sent": "Timeout", + "net_recv": "Timeout", } except Exception as e: logger.error(f"获取系统信息异常: {e}") system_data = { "cpu_percent": "Error", "mem_percent": "Error", + "mem_total": "Error", + "mem_used": "Error", "bot_mem_mb": "Error", + "disk_percent": "Error", + "disk_total": "Error", + "disk_used": "Error", + "net_sent": "Error", + "net_recv": "Error", } # 5. 准备模板所需的所有数据 diff --git a/templates/status.html b/templates/status.html index aef197d..af937c4 100644 --- a/templates/status.html +++ b/templates/status.html @@ -223,12 +223,20 @@