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