如何跟踪对邮件的反应数量?

时间:2019-08-03 18:32:54

标签: javascript node.js discord.js

因此,我想实施报告和禁令系统,因此决定使用嵌入了消息并添加了响应的消息。主持人可以同意也可以不同意。例如,一旦有10位主持人同意投诉,则该消息中提到的用户应被禁止或踢踢。

我曾考虑使用client.on('messageReactionAdd', (messageReaction, user) => {}),但它只检查已缓存消息。然后,我找到了关于反应的discordjs.guide,他们展示了如何使用client.on('raw', (event) => {}),但是很早以前它就被放弃了,我什至没有发现有关此Discord.js官方文档的任何提及。邮件具有.awaitReactions(filter, [options]),但是我必须以某种方式标记投票邮件,然后以某种client的方法进行搜索,这非常复杂。

这就是我所拥有的:

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 个答案:

答案 0 :(得分:1)

1。数据库

您应该使用message.awaitReactions();client.on('messageReactionAdd', ...);并在机器人ready事件上获取消息。

这是一个非常简单的过程。您需要一个数据库来存储消息ID,通道ID,当然还要存储服务器ID。之后,在您准备好的事件中创建一个小型算法,以遍历从数据库收集的所有消息,并对它们使用message.awaitReactions();client.on('messageReactionAdd', ...);

如果您决定使用数据库方法,我建议使用message.awaitReactions();

2。全局阵列(不推荐)

如果您有一个非常简单的漫游器并且不能使用数据库,那么我建议您使用一个全局数组来存储所有消息ID,并将其用于client.on('messageReactionAdd', ...);事件。

您必须检查消息数组中的ID是否与事件中收集的消息的ID相匹配,然后采取相应措施。

此方法对于较小的机器人很有效,但是,如果您有更大的多服务器机器人,那么我强烈建议您使用数据库版本,因为该版本在机器人重启后将无法使用。