编写一个不和谐的机器人,试图让它对添加反应的用户做出反应,然后删除该用户的反应,我设法让它工作,但如果有多个带有反应的消息,它会运行反应也是如此。作为参考,我正在尝试制作一个骰子滚动机器人,它可以对用户的反应做出反应,然后重新掷出之前输入的掷骰子。如果已经有这样的问题,但我在查找时找不到它,我深表歉意。
这是一个例子: 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;
}
}
});
}
当机器人看到两条有反应的消息时,我应该怎么做才能确保它不会做出两次反应?
在此先感谢阅读本文并能提供帮助的任何人,我最近才尝试过自己的手并编写了不和谐的机器人。