Discord.js ReactionCollector 帮助菜单 - 重置表情符号
Discord.js ReactionCollector Help Menu - reset emojis
我正在使用以下代码为 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)
})
})
})
}
除了我必须在表情符号上单击两次才能移至 next/previous 页面外,它可以正常工作。我想我需要删除表情符号,然后在默认设置中重新加载它们。
有人知道这样做的最佳方法吗?或者如果我需要做其他事情?
https://discord.js.org/#/docs/main/stable/class/MessageReaction?scrollTo=remove
r.remove(r.users.filter(u => u === message.author).first());
里面两个收集器都应该做一个工作。
编辑
如果你想让每个用户都能使用这个菜单,最好改用这个过滤器:
.filter(u => !u.bot)
以防万一有人偶然发现并尝试在当前版本的 DJS 上使用此代码并出错,这里是如何在当前版本的 Discord.JS (v12.2.0) 中编写整个函数:
注意:这假定您已经传递了客户端、消息和可选的任何参数
编辑:如果用户选择后退按钮但已在第一页,或前进按钮但已在最后一页,机器人将删除反应
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())
})
})
})
希望这对任何人都有帮助:)
我正在使用以下代码为 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)
})
})
})
}
除了我必须在表情符号上单击两次才能移至 next/previous 页面外,它可以正常工作。我想我需要删除表情符号,然后在默认设置中重新加载它们。
有人知道这样做的最佳方法吗?或者如果我需要做其他事情?
https://discord.js.org/#/docs/main/stable/class/MessageReaction?scrollTo=remove
r.remove(r.users.filter(u => u === message.author).first());
里面两个收集器都应该做一个工作。
编辑
如果你想让每个用户都能使用这个菜单,最好改用这个过滤器:
.filter(u => !u.bot)
以防万一有人偶然发现并尝试在当前版本的 DJS 上使用此代码并出错,这里是如何在当前版本的 Discord.JS (v12.2.0) 中编写整个函数:
注意:这假定您已经传递了客户端、消息和可选的任何参数
编辑:如果用户选择后退按钮但已在第一页,或前进按钮但已在最后一页,机器人将删除反应
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())
})
})
})
希望这对任何人都有帮助:)