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

Discord.js如何使用.deferReply向指定频道发送消息?

问题解决

报错根因

  • deferReply()、editReply() 是交互(interaction)对象的专属方法,用于处理触发斜杠命令的用户的交互响应,频道(GuildChannel)对象本身不存在这两个方法,所以调用时会抛出类型错误。
  • 向指定频道发送消息不需要调用交互相关方法,直接使用频道对象的send()方法即可实现。

修正后代码

const { SlashCommandBuilder } = require("@discordjs/builders");
const { MessageEmbed } = require("discord.js");

module.exports = {
  data: new SlashCommandBuilder()
    .setName("suggest")
    .setDescription("向指定频道发送你的建议")
    .addStringOption((option) =>
      option
        .setName("suggestion")
        .setDescription("你要提交的建议内容")
        .setRequired(true)
    ),
  async execute(interaction, client) {
    const suggestionChannelID = "900982140504793109";
    const suggestionChannel = client.channels.cache.get(suggestionChannelID);
    // 先响应用户交互,避免3秒超时导致命令报错,ephemeral设为true则只有触发用户能看到这条回复
    await interaction.deferReply({ ephemeral: true });
    const embed = new MessageEmbed()
      .setColor("#0099ff")
      .setTitle(`${interaction.member.displayName} 提交了新建议`)
      .setDescription(interaction.options.getString("suggestion"));
    // 向建议频道发送embed消息
    const suggestionMsg = await suggestionChannel.send({
      embeds: [embed]
    });
    // 给消息添加正反反应
    await suggestionMsg.react("👍");
    await suggestionMsg.react("👎");
    // 回复用户提交成功
    await interaction.editReply("你的建议已成功提交至对应频道,感谢反馈!");
  }
};

注意事项

  • 请确保机器人拥有目标建议频道的发送消息、嵌入链接、添加反应权限,否则会触发权限类报错。
  • 如果你使用的是discord.js v14及以上版本,需要将MessageEmbed替换为EmbedBuilder,导入路径和构造写法对应调整即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:36:01