EasyXrayEasyXray
运维

Discord 机器人

将 Discord 机器人接入 EasyXray,在指定频道接收实时的面板事件 Embed 告警、周期性健康报告(含数据库备份)以及执行交互式控制命令。

EasyXray 提供了完整的 Discord 集成支持:通过事件总线(EventBus)实时推送事件告警、通过定时任务发送包含数据库备份的服务器状态报告,以及通过 Discord Gateway 执行交互式管理命令。

Discord 实时通知和周期性报告使用出站 HTTPS REST API v10 请求。交互式机器人命令则通过与 Discord Gateway 建立的后台安全 WebSocket 连接实现。

完成配置

创建 Discord 应用程序与机器人

  1. 打开 Discord 开发者门户 并登录。
  2. 点击右上角的 New Application,输入名称(例如 EasyXray Notifier)并确认创建。
  3. 在左侧菜单中,进入 Bot 标签页。
  4. 点击 Reset Token(如果尚未创建机器人则点击 Add Bot),并复制生成的 Bot Token。请妥善保管该令牌。
  5. 在 Privileged Gateway Intents 区域,勾选启用 Message Content Intent(机器人读取 !status 等前缀命令所必需)。

邀请机器人加入你的 Discord 服务器

  1. 在开发者门户左侧导航栏中,进入 OAuth2 → URL Generator。
  2. 在 Scopes 中勾选 bot。
  3. 在下方展开的 Bot Permissions 中,勾选以下权限:
    • Send Messages(发送消息)
    • Embed Links(嵌入链接)
    • Attach Files(附加文件 —— 发送数据库备份附件所必需)
    • Read Message History(读取消息历史)
  4. 复制页面底部生成的邀请链接,在浏览器中打开并将机器人添加到你的目标服务器。

复制频道 ID

  1. 在 Discord 客户端中开启开发者模式:用户设置 → 高级 → 开发者模式(开启)。
  2. 右键点击希望接收告警和执行命令的频道,选择复制频道 ID(Copy Channel ID)。
  3. 确保机器人拥有该频道的查看和发送消息权限。

配置面板

  1. 在 EasyXray 面板中,打开面板设置 → Discord 机器人(或直接访问 /settings#discord)。
  2. 在通用区域:
    • 开启启用 Discord 通知。
    • 填入你的 Discord Bot Token 和 频道 ID。
    • 在管理员用户 ID中填入你自己的 Discord 用户数字 ID(右键你的个人头像 → 复制用户 ID;多个 ID 请用英文逗号分隔)。
    • 选择偏好的 Discord 机器人语言。
  3. 在通知区域:
    • 设置通知时间(如 @daily、@weekly 或自定义 Cron 表达式)。
    • 如需自动备份,可开启数据库备份,定时报告中将自动附带 EasyXray.db 备份文件。
    • 勾选需要触发告警的事件类型,并配置 CPU / 内存阈值。
  4. 点击发送测试通知以验证连通性。你的 Discord 频道应立刻收到一条测试 Embed 消息。
  5. 点击保存应用配置。

机器人命令

启用后,机器人将在配置的 Discord 频道内监听命令(同时支持 ! 和 / 前缀)。仅列在管理员用户 ID中的用户可以执行命令;来自其他用户的消息将被忽略,若未配置管理员 ID 则关闭命令响应。!backup 与定时备份会将数据库文件发送至频道中,因此请务必选择仅管理员可见的频道:

命令说明
!status查看系统负载、内存占用、CPU 使用率、核心状态、TCP/UDP 连接数及当前在线用户。
!report立即生成并发送完整的服务器与代理状态报告 Embed。
!backup立即导出并发送当前数据库备份文件(EasyXray.db)与 config.json。
!usage <email>查询指定客户端的流量用量(上传/下载)、配额上限及到期时间。
!inbounds列出所有活动的入站连接、监听端口、协议、已用流量及客户端数量。
!restart安全重启 Xray 核心,无需重启整个 Web 面板。
!help显示机器人可用命令列表及使用说明。

事件告警

告警以 Discord Embed 格式发送,带有颜色标识和关键诊断信息:

事件类型标识说明
xray.crash🔴 红色Xray 核心崩溃;包含崩溃原因及时间戳
outbound.down🔴 红色出站连通性探测失败
outbound.up🟢 绿色出站连通性已恢复
node.down🔴 红色远程子节点离线或不可达
node.up🟢 绿色远程子节点重新连接且健康
cpu.high🟠 橙色服务器 CPU 使用率超过设定阈值(discordCpu)
memory.high🟠 橙色服务器内存使用率超过设定阈值(discordMemory)
login.attempt🟢 / 🔴Web 面板登录尝试(包含用户名、客户端 IP 及登录结果)

登录告警仅包含尝试的用户名及客户端 IP 地址。系统绝不会记录或传输密码明文。

设置参考

设置项默认值说明
discordBotEnablefalseDiscord 机器人与告警总开关。
discordBotToken(保密)从 Discord 开发者门户获取的 Bot Token。
discordChannelId(无)接收消息的目标 Discord 频道 Snowflake ID(17–20 位数字)。
discordAdminIds(无)允许执行命令的 Discord 用户数字 ID(逗号分隔)。留空则禁用命令交互。
discordLangen-USDiscord 机器人消息与报告使用的语言。
discordRunTime@daily发送周期性状态报告的 Cron 表达式或预设计划。
discordBotBackupfalse是否在周期性报告中自动附带数据库备份文件(EasyXray.db)。
discordEnabledEventslogin.attempt,cpu.high触发通知的事件类型列表(逗号分隔)。
discordCpu80触发 CPU 告警的利用率百分比阈值(0–100)。
discordMemory80触发内存告警的利用率百分比阈值(0–100)。

故障排查

  • 测试报错 "invalid bot token (401)":请确认复制的是开发者门户 Bot 标签页中的 Bot Token,而非 Client Secret 或 Application ID。
  • 测试报错 "missing permissions (403)":请检查机器人角色在目标频道或对应分类目录中是否拥有 Send Messages、Embed Links 以及 Attach Files 权限。
  • 命令无响应:请确认你的 Discord 用户 ID 已填入管理员用户 ID中。然后检查开发者门户中该机器人的 Message Content Intent 是否已开启,并重启面板(若缺少该意图,Discord 会直接关闭连接且不再重试)。
  • 测试报错 "channel not found (404)":请检查频道 ID 是否为纯数字,并确认机器人已加入拥有该频道的服务器。
  • 出站代理需求:若你的服务器所在网络环境访问 Discord 需经过代理,请在面板设置中配置面板出站代理(Panel Outbound),Discord 的所有请求将自动经由该代理发出。

On this page