javascript - 使用反应制作验证系统
问题描述
我发现了一些关于同一主题的帖子,但不是确切的问题。我还提到了 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 通话,请给我发消息,那将是最简单和最快的。
问候,马吕斯。
解决方案
如果您的问题出现在这里:
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);
});
推荐阅读
- angular - 如何将角度表单验证与 ngFor 绑定
- java - Java日期到没有时区的postgres时间戳
- azure - 使用 powershell 部署 EventGrid
- python-3.x - 将句子中的表情符号转换为单词或文本
- php - 将隐藏数据发送到 URL 并在 Laravel 中获得响应
- iis - IIS 选项“不允许未列出的文件扩展名”过滤对 WebSphere 的所有 servlet 调用
- ios - 我正在使用 almofire 5 beta 版本进行 api 调用。在传递正确的参数后,我得到了无效的参数作为响应
- java - 如何重新安排 Quartz 触发器?
- c++ - iOS原生sdk中导入的QT库
- c# - 在数据库中保存非常繁忙的计数器的最佳实践