#javascript #bots #discord #discord.js
#javascript #боты #Discord #discord.js
Вопрос:
Я использую приведенный ниже код для создания меню справки для бота Discord.
let pages = ['Page one!', 'Second page', 'Third page'];
let page = 1;
const embed = new Discord.RichEmbed() // Define a new embed
.setColor(0xffffff) // Set the color
.setFooter(`Page ${page} of ${pages.length}`)
.setDescription(pages[page-1])
message.channel.send(embed).then(msg => {
msg.react('⬅').then( r => {
msg.react('➡')
// Filters
const backwardsFilter = (reaction, user) => reaction.emoji.name === '⬅' amp;amp; user.id === message.author.id;
const forwardsFilter = (reaction, user) => reaction.emoji.name === '➡' amp;amp; user.id === message.author.id;
const backwards = msg.createReactionCollector(backwardsFilter, {timer: 6000});
const forwards = msg.createReactionCollector(forwardsFilter, {timer: 6000});
backwards.on('collect', r => {
if (page === 1) return;
page--;
embed.setDescription(pages[page-1]);
embed.setFooter(`Page ${page} of ${pages.length}`);
msg.edit(embed)
})
forwards.on('collect', r => {
if (page === pages.length) return;
page ;
embed.setDescription(pages[page-1]);
embed.setFooter(`Page ${page} of ${pages.length}`);
msg.edit(embed)
})
})
})
}
Это работает, за исключением того, что мне нужно дважды щелкнуть по эмодзи, чтобы перейти на следующую / предыдущую страницу. Я считаю, что мне нужно удалить эмодзи, а затем перезагрузить их с настройками по умолчанию.
Кто-нибудь знает лучший способ сделать это? или, если есть что-то еще, что мне нужно сделать вместо этого?
Комментарии:
1. Спасибо, DNLST, все сработало отлично!
Ответ №1:
На всякий случай, если кто-нибудь наткнется на это и попытается использовать этот код в текущей версии DJS и получит ошибки, вот как написать всю эту функцию в текущей версии Discord.JS (версия 12.2.0):
ПРИМЕЧАНИЕ: Предполагается, что вы уже передали клиент, сообщение и, при необходимости, любые аргументы
Редактировать: сделано так, что бот удалит реакцию, если пользователь выберет кнопку ie «Назад», но уже на 1-й странице, или кнопку «Вперед», но уже на последней странице
const Discord = require('discord.js')
let pages = ['Page one!', 'Second page', 'Third page']
let page = 1
const embed = new Discord.MessageEmbed() // Define a new embed
.setColor(0xffffff) // Set the color
.setFooter(`Page ${page} of ${pages.length}`)
.setDescription(pages[page-1])
message.channel.send({embed}).then(msg => {
msg.react('⬅').then( r => {
msg.react('➡')
// Filters
const backwardsFilter = (reaction, user) => reaction.emoji.name === '⬅' amp;amp; user.id === message.author.id
const forwardsFilter = (reaction, user) => reaction.emoji.name === '➡' amp;amp; user.id === message.author.id
const backwards = msg.createReactionCollector(backwardsFilter, {timer: 6000})
const forwards = msg.createReactionCollector(forwardsFilter, {timer: 6000})
backwards.on('collect', (r, u) => {
if (page === 1) return r.users.remove(r.users.cache.filter(u => u === message.author).first())
page--
embed.setDescription(pages[page-1])
embed.setFooter(`Page ${page} of ${pages.length}`)
msg.edit(embed)
r.users.remove(r.users.cache.filter(u => u === message.author).first())
})
forwards.on('collect', (r, u) => {
if (page === pages.length) return r.users.remove(r.users.cache.filter(u => u === message.author).first())
page
embed.setDescription(pages[page-1])
embed.setFooter(`Page ${page} of ${pages.length}`)
msg.edit(embed)
r.users.remove(r.users.cache.filter(u => u === message.author).first())
})
})
})
Надеюсь, это кому-нибудь поможет 🙂
Ответ №2:
https://discord.js.org/#/docs/main/stable/class/MessageReaction ?scrollTo = удалить
r.remove(r.users.filter(u => u === message.author).first());
Внутри обоих коллекторов должна выполняться работа.
Редактировать
Если вы хотите, чтобы каждый пользователь мог использовать это меню, лучше использовать этот фильтр вместо:
.filter(u => !u.bot)