用反应制作验证系统
Posted
技术标签:
【中文标题】用反应制作验证系统【英文标题】:Making a verification system with reactions 【发布时间】:2019-04-27 12:45:19 【问题描述】:我发现了一些关于同一主题的帖子,但不是确切的问题。 我还提到了 javascript discords,他们无法帮助我解决我的问题。
所以通知你, 此验证系统的目的是确保用户理解规则并在添加复选标记反应后继续解锁其余的不和谐。
我已经制作了一个具有命令 |message 的机器人,它工作正常,但我希望机器人在发送后对其自己的消息做出反应,然后等待用户也添加一个反应,这将触发一个函数,在这种情况下。触发机器人向用户发送 PM 并给他一个排名。
机器人添加他的反应很好,并以我的反应为例,它向我发送了一个 PM,但在我和机器人之间的 PM 中,机器人再次对他的消息作出反应。这可能是因为代码检查消息作者是否是机器人。
我在 JS Discord 中被告知 messageReactionAdd 函数有一个 Message 属性,但是在搜索时我找不到将其实现到我的代码中的方法。我该怎么做?还试图给用户一个排名也会吐出一个错误,我只是在理解和使东西工作之间陷入困境。我对自己的代码感到困惑,而且我对自己正在做的事情知之甚少,因此有人可以帮助我进行此更改,以便我可以将其记在脑海中吗?给我 discord.js 文档的链接只会让我更加困惑,而我学习的唯一方法就是创建并成功地使其工作。当然,任何帮助都会受到赞赏。
所以,这里是 messageReactionAdd 的代码:
bot.on('messageReactionAdd', (reaction, user) =>
if(reaction.emoji.name === "✅")
if(user === bot.user) return;
// if(bot.channel === "dm") return;
// let role = bot.guild.roles.find("name", "C - Verified");
// let role1 = bot.guild.roles.find("name", "C - Unverified");
//if(user.roles.has(role.id));
//await(user.addRole(role.id) && user.removeRole(role1.id));
user.send("Thank you for being apart of the community! As a thanks for accepting the rules, you have been awarded the verified role!");
return;
);
这里是 react 函数本身的代码:
513769507907567628 是机器人的 ID。
bot.on("message", async message =>
if(message.author.id != "513769507907567628") return;
message.react("✅");
);
所以,如果您有任何意见,那就太好了!如果您可以加入 Discord 通话,请给我发消息,那将是最简单和最快的。
问候,马吕斯。
【问题讨论】:
【参考方案1】:如果您的问题发生在这里:
await(user.addRole(role.id) && user.removeRole(role1.id));
那是因为:
1) await
仅存在于 async
函数中。
2) 你不能只用&&
链接承诺,a && b
将导致b
然后等待,所以在你的情况下你只等待删除。
bot.on('messageReactionAdd', async (reaction, user) =>
if(reaction.emoji.name === "✅") return;
if(user === bot.user) return;
let role = bot.guild.roles.find("name", "C - Verified");
let role1 = bot.guild.roles.find("name", "C - Unverified");
await user.addRole(role.id);
await user.removeRole(role1.id);
);
【讨论】:
好的,谢谢你告诉我我不能把它们锁起来。我给了我一个错误,说它无法读取未定义的角色。我显然无法抓住用户。有什么想法吗? @marius 我似乎在文档中找不到bot.guild
,只有bot.guilds
doc以上是关于用反应制作验证系统的主要内容,如果未能解决你的问题,请参考以下文章