You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JS实现玩家骤减5000人时Discord告警?代码问题排查

问题分析与修正方案

你的代码存在的核心问题

  • 逻辑判断完全颠倒:你需要检测的是玩家突然消失(在线人数大幅减少),但代码里写的online - previouscount >= 5000是在判断在线人数增加5000以上,和需求完全相反。
  • 状态无法持久化:如果这段代码是每次检查时都重新执行(比如封装在函数里每次调用都声明let previouscount = 0),previouscount会被反复重置为0,永远无法记录上一次的在线人数,自然无法对比人数变化。
  • data的有效性未处理:const online = data;中的data需要确保是正确的数字类型值,如果data是字符串、对象或者未正确获取的无效值,会直接导致判断失效。

修正后的代码示例

// 将previouscount放在全局作用域或闭包中,确保多次检查时状态保留
let previouscount = 0;

// 假设这是定时执行的检查函数,比如每30秒拉取一次在线人数
function checkPlayerDisappear() {
  // 替换为你实际获取在线人数的逻辑,强制转为数字避免类型错误
  const online = Number(data);
  
  // 过滤无效数值,防止非数字导致错误判断
  if (isNaN(online)) return;

  // 判断在线人数是否减少了5000及以上(玩家消失)
  if (previouscount - online >= 5000) {
    // 这里添加发送Discord警告的逻辑
    // 示例:调用Discord Webhook发送消息
    const webhookUrl = "你的Discord Webhook地址";
    fetch(webhookUrl, {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({ content: "⚠️ 警告:5000名玩家突然从服务器消失!" })
    });
  }
  
  // 更新上一次的在线人数,必须放在判断之后,确保下一次对比用当前值
  previouscount = online;
}

额外注意事项

  • 持久化状态:如果你的代码运行在无状态环境(比如云函数每次触发都重新初始化),需要用数据库、缓存(如Redis)存储previouscount的值,否则每次触发都会重置为0。
  • 频率控制:不要过于频繁执行检查,避免API调用超限或误判短时间内的人数波动。
  • 错误处理:给fetch添加错误捕获,避免发送Discord消息失败时导致程序崩溃:
    fetch(webhookUrl, { /* ... */ })
      .catch(err => console.error("发送Discord警告失败:", err));
    

内容的提问来源于stack exchange,提问作者Udayana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 13:23:27