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

如何使用discord.js编辑消息实现FiveM服务器统计数据定时更新

问题核心原因

  • 你代码里调用的messages.fetch()是异步方法,返回的是Promise对象而非消息实例,直接对Promise调用.edit()方法必然会执行失败。
  • 额外兼容性注意:如果你的discord.js版本升级到了v14及以上,原有MessageEmbed构造器已被废弃,替换为EmbedBuilder,语法有小幅度调整。
  • 优化建议:不需要每分钟重复拉取频道和目标消息,提前一次拉取后复用实例即可,减少Discord API请求次数避免触发限流规则。

修正后代码示例

// 提前拉取目标消息实例,定时器直接复用
let targetMessage;
// 建议在客户端ready事件触发后执行一次消息拉取
client.on('ready', async () => {
  try {
    const statChannel = await client.channels.fetch('902678733977157632');
    targetMessage = await statChannel.messages.fetch('902682557789908992');
    // 消息拉取成功后启动定时任务
    startStatsUpdate();
  } catch (err) {
    console.error('拉取目标消息失败:', err);
  }
});

function startStatsUpdate() {
  var serverStats = setInterval(async function () {
    try {
      const state = await Gamedig.query({
        type: 'fivem',
        host: config.ipabs,
        port: config.port
      });
      // 以下为discord.js v14版本写法,v13及以下可换回原来的MessageEmbed
      const embed = new Discord.EmbedBuilder()
        .setTitle('Logic RP Stats:')
        .setImage('https://images-ext-2.discordapp.net/external/PaPGVPWBJVWcsboWGg9IWOfE0U0QSj1sb3UEwYIHYcA/https/images-ext-1.discordapp.net/external/zcWeRc4OUGdU4UKejuGPzrBt2CvqZY8iIqPZtcrUc84/https/images-ext-2.discordapp.net/external/QyWWFfOXuBL0VfdsZNJJdwoLQKQcvmpXo9IHRZoDM6U/https/cdn-longterm.mee6.xyz/plugins/reaction_roles/images/873023096611799080/911344681e6437aff9cc5e8a6660412e8733a43cde7dc38d01649a557a5e46d8.gif')
        .addFields(
          { name: "Status:", value: `Online`, inline: true },
          { name: "Queue:", value: `${state}`, inline: true },
          { name: "IP:", value: `${state.connect}`, inline: true },
          { name: "Next Restart:", value: `12:00 PM EST`, inline: true },
          { name: "Players:", value: `${state.raw.clients}/${state.maxplayers}`, inline: true },
          { name: "Ping:", value: `${state.ping}`, inline: true },
          { name: "Inhabitants:", value: liste, inline: false },
        )
        .setColor(`AQUA`)
        .setFooter({ text: `Logic RP | ${versionNumber}` });
      await targetMessage.edit({ embeds: [embed] });
    } catch (error) {
      const embed = new Discord.EmbedBuilder()
        .setTitle('The Server Is Currently Down')
        .setImage('https://images-ext-2.discordapp.net/external/PaPGVPWBJVWcsboWGg9IWOfE0U0QSj1sb3UEwYIHYcA/https/images-ext-1.discordapp.net/external/zcWeRc4OUGdU4UKejuGPzrBt2CvqZY8iIqPZtcrUc84/https/images-ext-2.discordapp.net/external/QyWWFfOXuBL0VfdsZNJJdwoLQKQcvmpXo9IHRZoDM6U/https/cdn-longterm.mee6.xyz/plugins/reaction_roles/images/873023096611799080/911344681e6437aff9cc5e8a6660412e8733a43cde7dc38d01649a557a5e46d8.gif')
        .setColor('AQUA')
        .setFooter({ text: `Logic RP | ${versionNumber}` });
      await targetMessage.edit({ embeds: [embed] });
    }
  }, 60000);
}

额外注意项

  • 确保你的Discord机器人开启了对应服务器的发送消息、编辑消息权限,同时开发者后台开启了GUILDS、GUILD_MESSAGES相关的Gateway Intents。
  • 代码中用到的liste、versionNumber、config变量请提前确保已经正确声明赋值,避免出现变量未定义的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:06:02