所以我有一个使用discord.js
编写的音乐机器人,我决定对我的队列命令使用分页,这样我就可以整齐地显示整个队列。然而,当我点击按钮切换页面时,我一直得到未知的交互不和谐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,
})
数量片()是显示的歌曲位置,因此我为每个页面设置了一个新的嵌入,我知道这是一个烂摊子,但我想不出一种方法来使它更整洁,因为我还不熟悉编程。谢谢你的帮助,我非常感激。
分页在网站或开发人员网页上使用得更多,尝试在bot上使用它是可能的,但更困难和复杂。我建议你用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
,
p:你似乎在重复地创建相同的嵌入,只做了一点改变。试着创建一个循环,相信我,这是更有效的方式,你甚至可以选择多少嵌入你想通过改变第三行的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')
))
}