机器人询问用户他们希望加入啥角色,机器人根据回复将他们添加到角色

Posted

技术标签:

【中文标题】机器人询问用户他们希望加入啥角色,机器人根据回复将他们添加到角色【英文标题】:Bot asks user what role they wish to join, bot adds them to role based on the reply机器人询问用户他们希望加入什么角色,机器人根据回复将他们添加到角色 【发布时间】:2019-02-01 11:31:02 【问题描述】:

我在业余时间慢慢学习 javascript,但我还没有完全掌握。但是一个朋友让我做一个简单的机器人,一个给每个加入服务器的新用户发私信,问他们希望他们的用户名是哪种颜色,并将他们添加到他们回复的角色中。服务器上的角色没有权限意义。它纯粹是用户名的颜色(discord 服务器是基于 DeviantArt 的社区聊天)。

在下面的摘录中,它工作得很好,直到用户回复颜色“蓝色”并回复“请选择一种颜色或确保您输入的颜色与显示的完全一致”。发送而不是将用户添加到正确的角色并回复颜色是什么。我相当确定这部分的问题:

user.addTo(server.roles.get("name", `$collected.first().content`));
newmsg.channel.send(`Your name is now: **$collected.first().content** Thank you and enjoy the server!`)

我只是不确定我缺少什么或应该如何构建它以使其工作。列出的颜色确实在角色区域中以小写形式显示,并且角色存在。

bot.on('guildMemberAdd', member => 
   member.send("Welcome to RebornWings! Please select a color for your username! **Choices: orange-red, red, blue, blue-green, or purple** Please type exactly how they appear in the list of choices.")
   .then((newmsg) =>  //Now newmsg is the message you sent
     newmsg.channel.awaitMessages(response => response.content, 
       max: 1,
       time: 300000,
       errors: ['time'],
    ).then((collected) => 
     user.addTo(server.roles.get("name", `$collected.first().content`))
     newmsg.channel.send(`Your name is now: **$collected.first().content** Thank you and enjoy the server!`)
).catch(() => 
newmsg.channel.send('Please choose a color or be sure you typed the color exactly as shown.');
      );
    );
);

bot.login(config.token);

我想我已经很接近通过尝试来获得它了,只是不确定我缺少什么。

在我自己慢慢学习的过程中提前感谢您的帮助。

【问题讨论】:

“列出的颜色确实出现了”:是的,但是您自己为发送的消息键入了它们,它们不直接反映服务器尝试匹配的内容(可能在 server.roles.get() 内部)另外,确实您检查collected.first().content 是否包含您期望的内容?最后(实际上,首先),被调用的.catch() 收到一个错误作为其第一个参数,描述问题:尝试.catch((err) => ... 并显示err 以更好地了解发生了什么。 【参考方案1】:

角色添加过程后的 Catch 语句被触发,因为您试图不正确地获取角色并将其添加到不存在的变量中。

如果您将 user 替换为 member 并将 addTo 替换为 addRole 将是正确的。 也 get 不用于此目的。您将 Collection#get 与 Snowflake ID 一起使用(服务器的角色保存在集合中)。 出于您的目的,您只需将 get 替换为 find 即可。 但正如Stock Overflaw 已经说过的,我会首先检查用户是否输入正确。您从不盲目相信用户的输入。

【讨论】:

以上是关于机器人询问用户他们希望加入啥角色,机器人根据回复将他们添加到角色的主要内容,如果未能解决你的问题,请参考以下文章

向对机器人消息问题作出反应的用户添加角色

允许用户“装备”拥有的角色

如果我将他们的 ID 作为字符串,如何在 java 中使用不和谐机器人向用户添加角色?

我正在尝试让不和谐的机器人根据某人加入服务器后的时间赋予角色

根据 args 为成员分配角色

检查我的机器人是不是有权管理角色