продолжайте получать ошибку DiscordAPIError: Неизвестное взаимодействие при использовании пагинации reconlx для моей команды очереди в моем музыкальном боте в Discord.js

#javascript #npm #pagination #discord #discord.js

Вопрос:

Итак, у меня есть музыкальный бот, написанный с использованием discord.js , и я решил использовать разбиение на страницы для своей команды очереди, чтобы я мог аккуратно отображать всю очередь. Тем не менее, я продолжаю получать неизвестную ошибку API discord взаимодействия большую часть времени, когда я нажимаю на кнопку для переключения страниц. Я использую 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,    
        })
 

Фрагмент(ЧИСЛА) — это позиции песен, которые отображаются, и поэтому я установил новую вставку для каждой страницы, я знаю, что это беспорядок, но я не мог придумать способ сделать его более аккуратным, так как я еще не знаком с программированием. Спасибо за любую помощь, я очень ценю это.

Ответ №1:

разбиение на страницы чаще используется на веб-сайтах или веб-страницах разработчиков, попытка использовать его на боте возможна, но намного сложнее и сложнее. Я предлагаю вам использовать discord-slider . Это намного проще в использовании и лучше справляется с проблемами, с которыми сталкивается api discord в вашем случае. Вы можете использовать его так :

 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 : Похоже, вы постоянно создаете одну и ту же вставку с небольшими изменениями. Попробуйте создать цикл, поверьте мне, это намного эффективнее, и вы даже можете выбрать, сколько встраиваний вы хотели бы, просто изменив 5 на 3-й строке !

 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')
                    ))
}