Javascript Discord.js ReactionCollector帮助菜单-重置表情

Javascript Discord.js ReactionCollector帮助菜单-重置表情,javascript,bots,discord,discord.js,Javascript,Bots,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.lengt

我正在使用下面的代码为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 === '⬅' && user.id === message.author.id;
        const forwardsFilter = (reaction, user) => reaction.emoji.name === '➡' && 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)
        })
    })
})
}

除了我必须点击表情符号两次才能进入下一页/上一页外,它还能工作。我认为我需要删除表情符号,然后在默认设置下重新加载它们

有人知道最好的方法吗?或者我还需要做些别的事情吗?

在内部,两个收集器都应该完成一项工作

编辑

如果希望每个用户都能使用此菜单,最好使用此过滤器:

.filter(u => !u.bot)

如果有人无意中发现了这一点,并尝试在当前版本的DJS上使用此代码并出现错误,下面介绍如何在当前版本的Discord.JS(v12.2.0)中编写整个函数:

注意:这假设您已经传递了客户端、消息和可选的任何参数

编辑:如果用户选择ie后退按钮但已在第一页,或前进按钮但已在最后一页,则机器人将删除该反应

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 === '⬅' && user.id === message.author.id
    const forwardsFilter = (reaction, user) => reaction.emoji.name === '➡' && 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())
    })
  })
})

希望这对任何人都有帮助:)

谢谢DNLST它工作得很好!
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 === '⬅' && user.id === message.author.id
    const forwardsFilter = (reaction, user) => reaction.emoji.name === '➡' && 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())
    })
  })
})