当前位置: 首页 > 知识库问答 >
问题:

DiscordAPIError:交互已经被确认。Discord.js反应()函数问题

安高翰
2023-03-14

我有这个投票命令,它创建了一个新的MessageEmbed,然后我希望机器人用4个表情对投票做出反应,以便能够在投票中投票。问题是当我使用回复()函数进行交互时,机器人崩溃并给我这个错误:DiscordAPIError:交互已经被确认。我试图获取回复,但似乎不起作用。代码如下:

const { SlashCommandBuilder } = require('@discordjs/builders');

module.exports = {
    data: new SlashCommandBuilder()
        .setName('poll')
        .setDescription('Make a poll, (and you get to choose the options) ;)')
        .addStringOption((option) =>
            option
                .setName('title')
                .setDescription('The title of the poll embed.')
                .setRequired(true)
        )
        .addStringOption((option) => 
            option
                .setName('option1')
                .setDescription('1st option for the poll.')
                .setRequired(true)
        )
        .addStringOption((option) => 
            option
                .setName('option2')
                .setDescription('2nd option for the poll.')
                .setRequired(true)
        )
        .addStringOption((option) =>
            option
                .setName('option3')
                .setDescription('3rd option for the poll.')
                .setRequired(false)
        )
        .addStringOption((option) =>
            option
                .setName('option4')
                .setDescription('4th option for the poll.')
                .setRequired(false)
        )

    async execute(client, interaction, Discord) {
        let pollEmbed;

        if (interaction.options.get('option3') && interaction.options.get('option4')) {
            pollEmbed = new Discord.MessageEmbed()
                .setColor('RANDOM')
                .setTitle(interaction.options.get('title').value)
                .setAuthor(`Poll by: ${interaction.user.username}`)
                .setDescription(
                    `:regional_indicator_a: - ${interaction.options.get('option1').value}\n
                    :regional_indicator_b: - ${interaction.options.get('option2').value}\n
                    :regional_indicator_c: - ${interaction.options.get('option3').value}\n
                    :regional_indicator_d: - ${interaction.options.get('option4').value}`
                )
                .setTimestamp();
        }

        if (!interaction.options.get('option3') && !interaction.options.get('option4')) {
            pollEmbed = new Discord.MessageEmbed()
                .setColor('RANDOM')
                .setTitle(interaction.options.get('title').value)
                .setAuthor(`Poll by: ${interaction.user.username}`)
                .setDescription(
                    `:regional_indicator_a: - ${interaction.options.get('option1').value}\n
                    :regional_indicator_b: - ${interaction.options.get('option2').value}\n`
                )
                .setTimestamp();
        }

        if (interaction.options.get('option3') && !interaction.options.get('option4')) {
            pollEmbed = new Discord.MessageEmbed()
                .setColor('RANDOM')
                .setTitle(interaction.options.get('title').value)
                .setAuthor(`Poll by: ${interaction.user.username}`)
                .setDescription(
                    `:regional_indicator_a: - ${interaction.options.get('option1').value}\n
                    :regional_indicator_b: - ${interaction.options.get('option2').value}\n
                    :regional_indicator_c: - ${interaction.options.get('option3').value}\n`
                )
                .setTimestamp();
        }

        if (!interaction.options.get('option3') && interaction.options.get('option4'))
            return interaction.reply('You have to put option 3 before option 4!');

        message = interaction.reply({ embeds: [pollEmbed], fetchReply: true });

        await message.react(':regional_indicator_a:');
        await message.react(':regional_indicator_b:');
        await message.react(':regional_indicator_c:');
        await message.react(':regional_indicator_d:');
    }
};

非常感谢。

共有2个答案

鲁钱明
2023-03-14

你忘了等待你的互动。回复。

应该是这样的

js prettyprint-override">message = await interaction.reply({ embeds: [pollEmbed], fetchReply: true });
司徒修能
2023-03-14

把这个回复留在这里供将来参考,另一个可能导致不一致错误的问题是:交互已经被确认,如果你有两个机器人实例同时运行,例如在某处的远程服务器和本地开发服务器上。

 类似资料:
  • 我做了一个bot,如果你输入一个命令,它会发送一个消息,如果你对那个消息做出反应,它会发送另一个消息,但是如果我再次运行这个命令,并对第一个消息做出反应,它会发送两次消息,我该如何修复它呢? null null

  • jd.showToast(OBJECT) 显示消息提示框 OBJECT 参数说明: 参数 类型 必填 说明 title String 是 提示的内容 icon String 否 图标,有效值 "success", "loading", "none" image String 否 自定义图标的本地路径,image 的优先级高于 icon duration Number 否 提示的延迟时间,单位毫秒,

  • 时间线 8.14 投递 —— 8.19 笔试(行测) —— 8.23 一面 —— 8.25 二面 —— 9.1 三面 —— 9.8 offer意向 一面 / 业务面:40min 为什么选择双修这个方向? 期望自己3年后成为一个怎样的设计师? 你觉得一个好的交互设计师应该是什么样子的?...可以总结一下上述应该具备的3个特征 你觉得你过往的经历当中,你见过的你认为很优秀的交互设计师,或者说你认为可以

  • 我是个新来的反应者,不懂什么。我有两个组件:父函数组件和子类组件。假设,从FC我需要从useState钩子传递非常简单的数组。当构造函数中的类内组件尝试注销道具时,结果是空数组。但在组件中成功渲染数组项。如果我不使用-useState钩子并将现有的array-console.log(props)结果传递给该数组。为什么会这样?我认为它与异步操作有关,但如果需要在基于props的构造函数中定义初始状

  • 我的react组件的构造函数被调用了两次,但我不知道为什么。我正在使用react redux存储我的应用程序的语言。我有一个基于浏览器语言设置默认语言的函数。LoginPage是第一个获得render的组件,因此我在其构造函数中调用了我的函数。基本上,它所做的就是比较并分派一个动作。当我用redux开发工具检查我的状态时,我看到它被调度了两次。我在构造函数中打印了虚拟数据,它也打印了两次。 登录页

  • 所以我在让我的自动角色发挥作用方面遇到了一个小问题,我一直在尝试通过消息对其进行排序。js和在reactionrole中。js,但它仍然给出了同样的问题,想知道是否有人可以帮助将不胜感激,因为我已经通过教程查看了它,除了一些差异,由于不同的文本/细节,它没有帮助 此外,如果这有助于避免错误,我将使用命令处理程序V2 反应角色。js message.js