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

求助:Discord.js机器人重启后筛选自身Webhook并发送消息失败

解决Discord.js机器人重启时仅向自身创建的Webhook发送消息的问题

看起来你已经找对了方向,但在Webhook归属判断和异步处理上有点小问题,我来帮你修正并给出完整的实现方案:

核心问题分析

你之前的代码有两个关键问题:

  • 用webhook.owner == ${bot.user.username}``来判断归属:用户名不是唯一标识,而且webhook.owner是一个User对象,直接和字符串比较肯定不匹配。正确的做法是比较用户ID,这是Discord中唯一且可靠的标识。
  • 没有处理异步操作:guild.fetchWebhooks()是异步方法,必须等待它返回结果后再进行筛选和发送操作,否则会拿不到有效的Webhook列表。

完整实现代码

在你的ready.js(或者监听ready事件的代码块)中,使用以下代码:

bot.on('ready', async () => {
  console.log(`✅ 已登录为 ${bot.user.tag}`);

  // 遍历机器人加入的所有服务器
  for (const guild of bot.guilds.cache.values()) {
    try {
      // 获取当前服务器的所有Webhook(异步操作,必须用await)
      const webhooks = await guild.fetchWebhooks();
      
      // 筛选出机器人自身拥有的Webhook
      const myWebhooks = webhooks.filter(webhook => {
        // 先判断owner是否存在,避免报错
        return webhook.owner && webhook.owner.id === bot.user.id;
      });

      // 给每个符合条件的Webhook发送重启通知
      for (const webhook of myWebhooks.values()) {
        try {
          await webhook.send({
            content: '我刚刚重启完成啦!😎',
            // 如果你不需要提及自己,可以加上下面这行禁止自动提及
            // allowedMentions: { parse: [] }
          });
          console.log(`📤 已向服务器「${guild.name}」的Webhook发送通知`);
        } catch (err) {
          console.error(`❌ 发送消息到Webhook失败(服务器:${guild.name}):`, err);
        }
      }
    } catch (err) {
      console.error(`❌ 获取服务器「${guild.name}」的Webhook失败:`, err);
    }
  }
});

关键细节解释

  1. Webhook归属判断:
    webhook.owner返回的是创建该Webhook的User对象(机器人创建的话就是机器人自己的User实例),我们通过对比webhook.owner.id和bot.user.id来确保只处理机器人自己创建的Webhook,这是最准确的方式。

  2. 异步操作处理:
    所有涉及Discord API的操作(比如fetchWebhooks()、webhook.send())都是异步的,必须用await等待操作完成,否则代码会在API返回结果前继续执行,导致无法获取到Webhook数据。

  3. 错误处理:
    加入try/catch块可以避免单个服务器的Webhook操作失败导致整个循环终止,同时能输出具体的错误信息方便调试。

这样修改后,机器人重启时就会遍历所有服务器,找到自己创建的Webhook并发送消息,不会触发其他Webhook啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:45:23