所以我想实现报告和禁止系统,我决定使用嵌入的消息并添加 react 。主持人可以同意也可以不同意。例如,一旦 10 位版主同意投诉,则此消息中提到的用户应被禁止或踢出。
我想过使用 client.on('messageReactionAdd', (messageReaction, user) => {})
,但它只检查缓存消息。然后我找到了关于 react 的discordjs.guide,他们展示了如何使用 client.on('raw', (event) => {})
,但它很久以前就被放弃了,我没有甚至发现任何有关此官方 Discord.js 文档的提及。消息有 .awaitReactions(filter, [options]) ,但我必须以某种方式标记投票消息,然后在某种 super 复杂的方法的客户端中搜索它们。
这是我所拥有的:
const service = client.channels.get('id');
let user = msg.mentions.users.first();
if (!user) {
msg.reply('Couldn\'t find the user!')
return 1;
}
args.shift();
let reason = args.join(' ').trim();
if (!reason) {
msg.reply('No reason to create a complaint!')
return 1;
}
msg.channel.send(`I've created and sent a user complaint about ${user.tag}!)`)
.catch((e) => console.log(e));
msg.delete();
const emb = new Discord.RichEmbed()
.setTitle('User complaint')
.addField('Who?', `**User: ${user.tag}**`)
.addField('Reason?', `**Reson: ${reason}**`)
.setColor('#ff7b00')
.setFooter('Please take action');
service.send(emb)
.then(async msg => {
await msg.react('✅')
msg.react('❌')
})
.catch(e => {
console.error()
msg.reply('Couldn\'t send a user complaint!');
return 1;
})
这可能吗?我之前已经解释过我之前的计划,但是有没有办法变得更简单?
最佳答案
<强>1。数据库
您应该使用 message.awaitReactions();
或 client.on('messageReactionAdd', ...);
并在机器人上获取消息 就绪
事件。
这是一个非常简单的过程。您需要一个数据库来存储消息 ID、 channel ID,当然还有服务器 ID。之后,在准备事件中创建一个小算法来遍历从数据库收集的所有消息,并使用 message.awaitReactions();
或 client.on('messageReactionAdd', ... );
在他们身上。
如果您决定使用数据库方法,我建议使用 message.awaitReactions();
。
<强>2。全局数组(不太推荐)
如果您有一个非常简单的机器人并且无法使用数据库,那么我建议您使用一个全局数组来存储所有消息 ID 并将其用于 client.on('messageReactionAdd', .. .);
事件。
您必须检查消息数组中的 ID 是否与事件中收集的消息的 ID 匹配,然后采取相应的操作。
此方法对于较小的机器人来说效果很好,但如果您有一个更大的多服务器机器人,那么我强烈建议使用数据库版本,因为该版本在机器人重新启动后将无法工作。
关于javascript - 如何跟踪消息的 react 数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57341133/