ForcePilot/backend/package/yuxi/channels/adapters/qqbot/commands/builtin.py
Kris 552aef767c feat(qqbot): 实现QQ机器人适配器完整功能模块
新增QQ Bot适配器完整代码栈,包含:
1. 基础适配器入口与工具类封装
2. 会话管理、重试队列与流量控制
3. 命令系统与内置指令(ping/help/status等)
4. 富媒体消息处理与格式转换
5. 引用存储与审批管理
6. 凭证备份与会话持久化
7. 健康检查与交互回调系统
2026-05-12 00:48:04 +08:00

103 lines
3.0 KiB
Python

from __future__ import annotations
import time
from .framework import CommandRegistry, CommandContext, CommandResult
_start_time = time.time()
async def _cmd_ping(ctx: CommandContext) -> CommandResult:
uptime = time.time() - _start_time
hours = int(uptime // 3600)
minutes = int((uptime % 3600) // 60)
seconds = int(uptime % 60)
msg = ctx.msg
user = msg.identity.channel_user_id or "Unknown"
return CommandResult(
success=True,
message=f"Pong! 在线时间: {hours}h {minutes}m {seconds}s\n发送者: {user}",
)
async def _cmd_help(ctx: CommandContext) -> CommandResult:
registry = ctx.adapter._command_registry if hasattr(ctx.adapter, "_command_registry") else None
if registry is None:
return CommandResult(success=True, message="命令系统未初始化。")
lines = ["可用命令:"]
seen: set[str] = set()
for name in sorted(registry.command_names):
cmd = registry._commands.get(name)
if cmd and name not in seen:
seen.add(name)
desc = cmd.description or "(无描述)"
usage = f" - 用法: {cmd.usage}" if cmd.usage else ""
lines.append(f" /{name} - {desc}{usage}")
return CommandResult(success=True, message="\n".join(lines))
async def _cmd_status(ctx: CommandContext) -> CommandResult:
adapter = ctx.adapter
status = getattr(adapter, "status", "unknown")
reconnect = getattr(adapter, "_reconnect_manager", None)
reconnect_state = reconnect.state.name if reconnect else "N/A"
circuit_breaker = getattr(adapter, "_circuit_breaker", None)
cb_state = "open" if circuit_breaker and circuit_breaker.is_open else "closed"
return CommandResult(
success=True,
message=(f"状态: {status}\n重连状态: {reconnect_state}\n熔断器: {cb_state}"),
)
async def _cmd_clearlogs(ctx: CommandContext) -> CommandResult:
adapter = ctx.adapter
known_users = getattr(adapter, "_known_users", None)
group_buffer = getattr(adapter, "_group_buffer", None)
if known_users:
known_users.clear()
if group_buffer:
group_buffer.gc()
return CommandResult(success=True, message="日志已清理(已知用户记录 + 过期群聊缓冲)。")
def register_builtin_commands(registry: CommandRegistry) -> CommandRegistry:
registry.register(
name="ping",
handler=_cmd_ping,
description="检测 Bot 是否在线",
usage="/ping",
aliases=["p"],
)
registry.register(
name="help",
handler=_cmd_help,
description="显示所有可用命令",
usage="/help",
aliases=["h"],
)
registry.register(
name="status",
handler=_cmd_status,
description="查看 Bot 运行状态",
usage="/status",
aliases=["st"],
)
registry.register(
name="clearlogs",
handler=_cmd_clearlogs,
description="清理运行日志和缓存",
usage="/clearlogs",
)
return registry