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

discord.js v13开发投票机器人触发msg.react is not a function报错

问题原因分析
  • 核心问题是你混用了第三方库discord-slash-commands-client和discord.js v13内置的交互处理逻辑。discord.js v13已经原生支持斜杠命令的注册、接收、处理全流程,第三方库的交互对象和discord.js原生对象结构不兼容,导致你调用interaction.reply加fetchReply: true返回的不是标准的discord.js Message实例,自然没有react方法。
  • 额外小问题:你用第三方库注册命令时,空选项的options字段应该传空数组[]而不是空对象{},不过这个不是你当前报错的直接原因。
修复方案

第一步:卸载无用第三方依赖

执行命令:npm uninstall discord-slash-commands-client

第二步:改用discord.js内置逻辑注册斜杠命令

在你的client.on('ready')事件里加入内置注册逻辑,示例代码如下:

const { REST, Routes } = require('discord.js');

client.on('ready', async () => {
  console.log(`Logged in as ${client.user.tag}!`);
  
  const rest = new REST({ version: '10' }).setToken(token);
  // 注册全局命令,生效需要1小时左右,测试可以换成公会命令即时生效
  try {
    await rest.put(
      Routes.applicationCommands(applicationID),
      { 
        body: [
          {
            name: "kamelott",
            description: "Generation de citation kamelott aléatoire sans argument",
            options: []
          },
          {
            name: "sondage",
            description: "Création de sondage",
            options:[
              {
                name: "sentence",
                description: "Question du sondage",
                type: 3,
                required: true
              }
            ]
          }
        ] 
      }
    );
    console.log('斜杠命令注册成功');
  } catch (error) {
    console.error(error);
  }
});

第三步:调整投票逻辑确保反应按顺序添加

你原有的sondage命令逻辑里,补全第二个反应的添加即可,修改后代码:

}else if(commandName === 'sondage'){
  sentence = interaction.options.getString('sentence') ;

  let pollEmbed = new Discord.MessageEmbed()
    .setTitle('Question')
    .setDescription(sentence +"\n\nVeuillez répondre à ce sondage par le biais de ces réacations :white_check_mark:  ou :negative_squared_cross_mark: ")
    .setAuthor(interaction.user.username)
    .setTimestamp()
    .setFooter("");

  try {
    const msg = await interaction.reply({ embeds: [pollEmbed] , fetchReply: true });
    // 按顺序添加两个反应,加await避免顺序错乱
    await msg.react('✅');
    await msg.react('❌');
  } catch (error) {
    console.log('------------------------');
    console.log("Erreur avec le sondage");
    console.log(error);
    console.log('------------------------');
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 03:36:04