Сейчас я работаю над музыкальным ботом. Я сделал команду очереди, которая показывает, сколько песен в данный момент находится в очереди. Я хотел, чтобы это выглядело так, будто песен в очереди больше 10, бот нарежет их и покажет остальные на следующей «странице». Для прокрутки между страницами я хотел использовать реакции. Мой код работает, но Бот автоматически удаляет свою реакцию. Почему это?
const Discord = require("discord.js");
module.exports.run = async (client, message, args, queue, searcher) => {
const serverQueue = queue.get(message.guild.id);
if (!serverQueue)
return message.channel.send("**Jelenleg nincs zene lejátszás alatt!**");
if (message.member.voice.channel != message.guild.me.voice.channel)
return message.channel.send("**Előbb lépj be a hang szobába!**")
let currentPage = 0;
if (serverQueue.songs.length <= 1) return message.channel.send(`**Lejátszás alatt:** [__${serverQueue.songs[0].title}__](${serverQueue.songs[0].url})`);
const embeds = embedGenerator(serverQueue)
//if (serverQueue.songs.length < 12) return message.channel.send(embeds);
const queueEmbed = await message.channel.send(`**Oldal:**: ${currentPage+1}/${embeds.length}`, embeds[currentPage])
await queueEmbed.react('⬅️');
await queueEmbed.react('➡️');
const reactionFilter = (reaction, user) => ['⬅️', '➡️'].includes(reaction.emoji.name) && (message.author.id === user.id)
const collector = queueEmbed.createReactionCollector(reactionFilter);
collector.on('collect', (reaction, user) => {
if (reaction.emoji.name === '➡️'){
if (currentPage < embeds.length-1){
currentPage+=1;
queueEmbed.edit(`**Oldal:**: ${currentPage+1}/${embeds.length}`, embeds[currentPage]);
message.reactions.resolve(reaction).users.remove(user)
}
}else if (reaction.emoji.name === '⬅️'){
if (currentPage !== 0){
currentPage -= 1;
queueEmbed.edit(`**Oldal:** ${currentPage+1}/${embeds.length}`, embeds[currentPage])
message.reactions.resolve(reaction).users.remove(user)
}
}
})
}
function embedGenerator(serverQueue){
const embeds = [];
let songs = 11;
for (let i = 1; i < serverQueue.songs.length; i += 10){
const current = serverQueue.songs.slice(i, songs)
songs += 10;
let j = i-1;
const info = current.map(song => `${++j}. [${song.title}](${song.url})`).join('\n')
const msg = new Discord.MessageEmbed()
.setDescription(`**Lejátszás alatt:** [${serverQueue.songs[0].title}](${serverQueue.songs[0].url}) \n ${info}`)
embeds.push(msg)
}
return embeds;
}
module.exports.config = {
name: "queue",
aliases: ['q']
}
Ну, это не решило проблему, может быть, это как-то связано с моей ролью бота, - я проверил везде реакции и до сих пор удаляет.
Есть ли в коде вашего бота такая строка: client.on("messageReactionAdd")
? Если да, то какая-то часть этой части кода вызывает проблему. Если нет, то я понятия не имею, в чем проблема.
У меня есть еще один reactCollector (такой же, как в этом коде, и он тоже не работает), но он находится в другом файле и не вызывается.
Итак, я нашел проблему. Оказалось, что у моего другого бота было событие реакции, которое удаляет реакции на сообщения примерно через 4 секунды. Я не добавлял возврат if (message.author.bot); линию к этому, поэтому он все время удалял реакцию.
Ну, я не совсем понимаю, почему он удаляет реакции вашего бота. Единственное место в этом коде, где удаляются реакции, находится в вашем
ReactionCollector
, поэтому подумайте о том, чтобы добавитьif (user.bot) return;
вверху вашего обратного вызоваcollector.on("collect")
(или добавить что-то подобное в сам фильтр коллектора). Если это не решает проблему, то, скорее всего, ваша проблема вызвана чем-то за пределами предоставленного кода.