Discord Bot js 反应

时间:2021-03-06 00:37:46

标签: javascript discord.js

编写一个不和谐的机器人,试图让它对添加反应的用户做出反应,然后删除该用户的反应,我设法让它工作,但如果有多个带有反应的消息,它会运行反应也是如此。作为参考,我正在尝试制作一个骰子滚动机器人,它可以对用户的反应做出反应,然后重新掷出之前输入的掷骰子。如果已经有这样的问题,但我在查找时找不到它,我深表歉意。

这是一个例子: example of bot in action

这是代码 获取命令

Client.on('message', message=> {
if(!message.content.startsWith(PREFIX) || message.author.bot) return;
let args = message.content.substring(PREFIX.length).split(" ");

switch (args[0].toLowerCase())
{
  case "roll": case "r":
          if(!args[1] || args[1].indexOf("d") == -1) return message.channel.send('Invalid Roll');
          Client.commands.get('torg').RollDice(message, args, Client);
          break;
}});

这就是它得到的代码。

运行命令

module.exports = {
name: 'torg',
description: 'Die roller for Trog',
async RollDice(message, args, client)
{
    const channel = 'XXXXXXXXXXXXXXXXXXXXX';
    const reRoll = '?';

    if(!args[2])//untrained
    {
        var roll = DieRoller(args[1]);
    }
    else if (args[2] == "t" || args[2] == "T")
    {
        var roll = DieRoller(args[1], true);
    }
    
    let rollEmbed = await message.channel.send(roll);
    rollEmbed.react(reRoll);

    client.on('messageReactionAdd', async (reaction, user) => 
    {
        if(reaction.message.partial) await reaction.message.fetch();
        if(reaction.partial) await reaction.fetch();
        if(user.bot) return;
        if(!reaction.message.guild) return;

        if(reaction.message.channel.id == channel)
        {
            if(reaction.emoji.name === reRoll)
            {
                var newRoll  = DieRoller(args[1]);
                await message.channel.send(newRoll);
                await reaction.users.remove(user);
            }
            else
            {
                return;
            }
        }
    });
}

当机器人看到两条有反应的消息时,我应该怎么做才能确保它不会做出两次反应?

在此先感谢阅读本文并能提供帮助的任何人,我最近才尝试过自己的手并编写了不和谐的机器人。

0 个答案:

没有答案