不断收到 DiscordAPIError:在 Discord.js 中的音乐机器人上使用 reconlx 的分页执行队列命令时出现未知交互

Posted

技术标签:

【中文标题】不断收到 DiscordAPIError:在 Discord.js 中的音乐机器人上使用 reconlx 的分页执行队列命令时出现未知交互【英文标题】:keep getting DiscordAPIError: Unknown Interaction when using reconlx's pagination for my queue command on my music bot in Discord.js 【发布时间】:2021-11-29 12:59:15 【问题描述】:

所以我有一个使用discord.js 编写的音乐机器人,我决定为我的队列命令使用分页,这样我就可以整齐地显示整个队列。但是,大多数在单击按钮切换页面时,我不断收到 Unknown interaction discord API 错误。我正在使用reconlx npm package,这是我的队列命令代码:

            const queue = distube.getQueue(message)

        // embeds
        const nothingPlaying = new MessageEmbed()
        .setDescription('Nothing playing right now!');

        if(!queue) return message.channel.send( embeds: [nothingPlaying] );

        const queueEmbed1 = new MessageEmbed()
        .setTitle('Current Queue:')
        .setDescription(`$queue.songs
                            .map(
                                (song, id) =>
                                    `**$id ? id : 'Playing'**. $song.name - \`$
                                        song.formattedDuration
                                    \``,
                        )
                        .slice(0, 20)
                        .join('\n')`
                    )
        const queueEmbed2 = new MessageEmbed()
        .setTitle('Current Queue:')
        .setDescription(`$queue.songs
                            .map(
                                (song, id) =>
                                    `**$id ? id : 'Playing'**. $song.name - \`$
                                        song.formattedDuration
                                    \``,
                        )
                        .slice(20, 40)
                        .join('\n')`
                    )
        const queueEmbed3 = new MessageEmbed()
        .setTitle('Current Queue:')
        .setDescription(`$queue.songs
                            .map(
                                (song, id) =>
                                    `**$id ? id : 'Playing'**. $song.name - \`$
                                        song.formattedDuration
                                    \``,
                        )
                        .slice(40, 60)
                        .join('\n')`
                    )
        const queueEmbed4 = new MessageEmbed()
        .setTitle('Current Queue:')
        .setDescription(`$queue.songs
                            .map(
                                (song, id) =>
                                    `**$id ? id : 'Playing'**. $song.name - \`$
                                        song.formattedDuration
                                    \``,
                        )
                        .slice(60, 80)
                        .join('\n')`
                    )
        const queueEmbed5 = new MessageEmbed()
        .setTitle('Current Queue:')
        .setDescription(`$queue.songs
                            .map(
                                (song, id) =>
                                    `**$id ? id : 'Playing'**. $song.name - \`$
                                        song.formattedDuration
                                    \``,
                        )
                        .slice(80, 100)
                        .join('\n')`
                    )
                    


        const embeds = [
            queueEmbed1,
            queueEmbed2,
            queueEmbed3,
            queueEmbed4,
            queueEmbed5,
        ]

        
        pagination(
            embeds: embeds,
            channel: message.channel,
            author:message.author,
            fastSkip: true,    
        )

切片(NUMBERS)是显示的歌曲位置,因此我为每个页面设置了一个新的嵌入,我知道这是一团糟但我想不出办法它更整洁,因为我对编程还不太熟悉。感谢您的帮助,我非常感谢。

【问题讨论】:

【参考方案1】:

分页更多地用在网站或开发者网页上,尝试在机器人上使用它是可能的,但更加困难和复杂。我建议你使用discord-slider。在您的情况下,使用和处理面对不和谐 api 的更好问题要简单得多。你可以这样使用它:

const Discord = require('discord.js')
const client = new Discord.Client()


require("discord-buttons")(client);
require('discord-slider')(client);

// On a command :

channel.createSlider(userID, embedsArray, emojiNext, emojiBack)

例如,您可以使用

channel.createSlider(message.author.id,embeds, "Next", "Back")

了解更多here

--

PS :您似乎重复地创建了相同的嵌入,只需稍作更改。尝试创建一个循环,相信我这样更有效,您甚至可以通过更改第 3 行的 5 来选择您想要的嵌入数量!

let embeds = []

for (i = 0; i < 5; i++)

 embeds.push(new Discord.MessageEmbed()
        .setTitle('Current Queue:')
        .setDescription(queue.songs
                            .map(
                                (song, id) =>
                                    `**$id ? id : 'Playing'**. $song.name - \`$
                                        song.formattedDuration
                                    \``,
                        )
                        .slice((i*20), (i+1)*20)
                        .join('\n')
                    ))

【讨论】:

以上是关于不断收到 DiscordAPIError:在 Discord.js 中的音乐机器人上使用 reconlx 的分页执行队列命令时出现未知交互的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在尝试编辑离开语音频道的用户时会收到 DiscordAPIError?

如何修复 DiscordAPIError:未知成员?

discord.js 如何编辑/更新嵌入?

DiscordAPIError:无效的表单正文

向用户添加角色(DiscordAPIError: Missing Permissions)

DiscordAPIError:createOverwrite 上缺少访问权限