ssss
This commit is contained in:
@@ -39,6 +39,7 @@ class Bot(MessageAPI, GroupAPI, FriendAPI, AccountAPI, MediaAPI):
|
|||||||
"""
|
"""
|
||||||
super().__init__(ws_client, ws_client.self_id or 0)
|
super().__init__(ws_client, ws_client.self_id or 0)
|
||||||
self.code_executor: Optional["CodeExecutor"] = None
|
self.code_executor: Optional["CodeExecutor"] = None
|
||||||
|
self.nickname: str = ""
|
||||||
|
|
||||||
async def get_group_list(self, no_cache: bool = False) -> List[GroupInfo]:
|
async def get_group_list(self, no_cache: bool = False) -> List[GroupInfo]:
|
||||||
# GroupAPI.get_group_list 不支持 no_cache 参数,这里忽略它
|
# GroupAPI.get_group_list 不支持 no_cache 参数,这里忽略它
|
||||||
|
|||||||
@@ -38,17 +38,38 @@ def _get_system_info():
|
|||||||
cpu_percent = psutil.cpu_percent(interval=1)
|
cpu_percent = psutil.cpu_percent(interval=1)
|
||||||
mem_info = psutil.virtual_memory()
|
mem_info = psutil.virtual_memory()
|
||||||
bot_mem_mb = PROCESS.memory_info().rss / (1024 * 1024)
|
bot_mem_mb = PROCESS.memory_info().rss / (1024 * 1024)
|
||||||
|
|
||||||
|
# 磁盘信息
|
||||||
|
disk_usage = psutil.disk_usage('/')
|
||||||
|
|
||||||
|
# 网络信息
|
||||||
|
net_io = psutil.net_io_counters()
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"cpu_percent": f"{cpu_percent:.1f}",
|
"cpu_percent": f"{cpu_percent:.1f}",
|
||||||
"mem_percent": f"{mem_info.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}",
|
"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:
|
except Exception as e:
|
||||||
logger.error(f"获取系统信息失败: {e}")
|
logger.error(f"获取系统信息失败: {e}")
|
||||||
return {
|
return {
|
||||||
"cpu_percent": "N/A",
|
"cpu_percent": "N/A",
|
||||||
"mem_percent": "N/A",
|
"mem_percent": "N/A",
|
||||||
|
"mem_total": "N/A",
|
||||||
|
"mem_used": "N/A",
|
||||||
"bot_mem_mb": "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", "状态")
|
@matcher.command("status", "状态")
|
||||||
@@ -60,18 +81,22 @@ async def handle_status(bot: Bot, event: MessageEvent, args: list[str]):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
# 1. 获取API信息 (增加独立错误处理)
|
# 1. 获取API信息 (增加独立错误处理)
|
||||||
|
# 尝试获取或更新 bot.nickname
|
||||||
|
if not hasattr(bot, "nickname") or not bot.nickname:
|
||||||
try:
|
try:
|
||||||
# 优先使用 get_stranger_info 获取自身信息,比 get_login_info 更轻量
|
# 优先使用 get_stranger_info 获取自身信息,比 get_login_info 更轻量
|
||||||
stranger_info = await bot.get_stranger_info(user_id=bot.self_id)
|
stranger_info = await bot.get_stranger_info(user_id=bot.self_id)
|
||||||
nickname = stranger_info.nickname
|
bot.nickname = stranger_info.nickname
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.warning(f"获取 stranger_info 失败: {e}, 将回退到 login_info")
|
logger.warning(f"获取 stranger_info 失败: {e}, 将回退到 login_info")
|
||||||
try:
|
try:
|
||||||
login_info = await bot.get_login_info()
|
login_info = await bot.get_login_info()
|
||||||
nickname = login_info.nickname
|
bot.nickname = login_info.nickname
|
||||||
except Exception as e2:
|
except Exception as e2:
|
||||||
logger.warning(f"获取 login_info 也失败了: {e2}")
|
logger.warning(f"获取 login_info 也失败了: {e2}")
|
||||||
nickname = "获取失败"
|
bot.nickname = "获取失败"
|
||||||
|
|
||||||
|
nickname = bot.nickname
|
||||||
|
|
||||||
# 状态信息:如果能响应此命令,说明机器人必然在线且状态良好
|
# 状态信息:如果能响应此命令,说明机器人必然在线且状态良好
|
||||||
# 这避免了依赖可能超时或未实现的 get_status API
|
# 这避免了依赖可能超时或未实现的 get_status API
|
||||||
@@ -138,14 +163,28 @@ async def handle_status(bot: Bot, event: MessageEvent, args: list[str]):
|
|||||||
system_data = {
|
system_data = {
|
||||||
"cpu_percent": "Timeout",
|
"cpu_percent": "Timeout",
|
||||||
"mem_percent": "Timeout",
|
"mem_percent": "Timeout",
|
||||||
|
"mem_total": "Timeout",
|
||||||
|
"mem_used": "Timeout",
|
||||||
"bot_mem_mb": "Timeout",
|
"bot_mem_mb": "Timeout",
|
||||||
|
"disk_percent": "Timeout",
|
||||||
|
"disk_total": "Timeout",
|
||||||
|
"disk_used": "Timeout",
|
||||||
|
"net_sent": "Timeout",
|
||||||
|
"net_recv": "Timeout",
|
||||||
}
|
}
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"获取系统信息异常: {e}")
|
logger.error(f"获取系统信息异常: {e}")
|
||||||
system_data = {
|
system_data = {
|
||||||
"cpu_percent": "Error",
|
"cpu_percent": "Error",
|
||||||
"mem_percent": "Error",
|
"mem_percent": "Error",
|
||||||
|
"mem_total": "Error",
|
||||||
|
"mem_used": "Error",
|
||||||
"bot_mem_mb": "Error",
|
"bot_mem_mb": "Error",
|
||||||
|
"disk_percent": "Error",
|
||||||
|
"disk_total": "Error",
|
||||||
|
"disk_used": "Error",
|
||||||
|
"net_sent": "Error",
|
||||||
|
"net_recv": "Error",
|
||||||
}
|
}
|
||||||
|
|
||||||
# 5. 准备模板所需的所有数据
|
# 5. 准备模板所需的所有数据
|
||||||
|
|||||||
@@ -223,12 +223,20 @@
|
|||||||
</li>
|
</li>
|
||||||
<li class="info-item">
|
<li class="info-item">
|
||||||
<span class="info-label">内存占用</span>
|
<span class="info-label">内存占用</span>
|
||||||
<span class="info-value">{{ system.mem_percent }}%</span>
|
<span class="info-value">{{ system.mem_percent }}% ({{ system.mem_used }}G / {{ system.mem_total }}G)</span>
|
||||||
</li>
|
</li>
|
||||||
<li class="info-item">
|
<li class="info-item">
|
||||||
<span class="info-label">Bot 进程内存</span>
|
<span class="info-label">Bot 进程内存</span>
|
||||||
<span class="info-value">{{ system.bot_mem_mb }} MB</span>
|
<span class="info-value">{{ system.bot_mem_mb }} MB</span>
|
||||||
</li>
|
</li>
|
||||||
|
<li class="info-item">
|
||||||
|
<span class="info-label">磁盘占用</span>
|
||||||
|
<span class="info-value">{{ system.disk_percent }}% ({{ system.disk_used }}G / {{ system.disk_total }}G)</span>
|
||||||
|
</li>
|
||||||
|
<li class="info-item">
|
||||||
|
<span class="info-label">网络流量 (↑/↓)</span>
|
||||||
|
<span class="info-value">{{ system.net_sent }}MB / {{ system.net_recv }}MB</span>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user