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

如何让Discord机器人向指定频道发消息?代码报错求助

解决Discord机器人-announce命令发送消息失败的问题

看起来你的代码里有几个和Discord.js版本不兼容、逻辑处理不到位的问题,结合报错信息,我帮你一步步梳理并修复:

核心问题分析

  1. API版本不匹配:你应该在用Discord.js v12或更高版本,但代码里用了旧版的API调用方式,这是导致找不到频道的主要原因
  2. 消息内容提取错误:直接用message.content会把命令前缀和announce都包含进去,导致公告内容不对
  3. 未处理异步异常:channel.send()是异步操作,没处理失败情况就会触发Promise拒绝警告
  4. 冗余代码:已经定义了announcechannel却重复调用获取频道的方法

修正后的完整代码

// 确保你的bot实例、prefix已经正确初始化
const prefix = "-";

bot.on('message', async (message) => {
  // 过滤非命令消息和机器人自己发的消息
  if (!message.content.startsWith(prefix) || message.author.bot) return;

  // 拆分命令和参数
  const args = message.content.slice(prefix.length).trim().split(/ +/);
  const cmd = args.shift().toLowerCase();

  if (cmd === 'announce') {
    // 提取命令后的公告内容
    const announcementContent = args.join(' ');
    if (!announcementContent) {
      return message.reply('请输入要发送的公告内容哦!');
    }

    // 获取目标频道(v12+需要用cache)
    const announceChannel = bot.channels.cache.get("336313710106902529");
    if (!announceChannel) {
      return message.reply('找不到目标频道,请检查频道ID是否正确!');
    }

    // 创建公告Embed(v12+用MessageEmbed替代RichEmbed)
    const announceEmbed = new Discord.MessageEmbed()
      .setTitle(":flag_jp: **Announcement** :flag_jp:")
      .setDescription(announcementContent)
      .setColor("#ff0000");

    // 发送消息并处理异常
    try {
      await announceChannel.send(announceEmbed);
      message.reply('公告已经成功发送到Announcements频道啦!');
    } catch (error) {
      console.error('发送公告出错:', error);
      message.reply('发送公告失败了,请检查机器人是否有该频道的发消息权限,或者频道ID是否正确!');
    }
  }
});

关键修改说明

  • 适配新版API:把channels.get()改成channels.cache.get(),RichEmbed换成MessageEmbed,这是Discord.js v12+的强制要求
  • 正确提取内容:用args拆分命令和参数,再用join(' ')拼接回公告内容,避免把命令前缀包含进去
  • 处理异步异常:用async/await配合try/catch捕获发送消息时的错误,解决控制台的Promise拒绝警告
  • 增强鲁棒性:添加了内容为空、频道不存在的判断,同时给用户发送反馈提示,方便排查问题

额外注意事项

  • 确认机器人在Announcements频道有发送消息和嵌入链接的权限
  • 频道ID要确保正确:开启Discord开发者模式后,右键频道就能复制ID
  • 如果用的是Discord.js v13及以上版本,初始化客户端时需要开启GUILDS和GUILD_MESSAGES这两个intents,否则无法获取频道和消息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:31:23