【问题标题】:How to check if user has a specific role from a specific server then give them a badge in an embed如何检查用户是否具有来自特定服务器的特定角色,然后在嵌入中给他们一个徽章
【发布时间】:2020-07-30 10:42:08
【问题描述】:

所以我的机器人中有一个经济系统,我希望我的支持服务器中的工作人员、beta 测试人员等在他们的个人资料(嵌入)命令中获得这个特殊徽章!

到目前为止,这是我的想法:

let badge = '';

if(message.member.roles.has(<role>.id)) badge = "badge here"

我正在使用 discord.js v11.5.1

【问题讨论】:

  • 您可能想要添加更多解释来说明您正在尝试做什么。在我看到上面的标签之前,这并不明显与不和谐有关。如果您提出的问题能够表明您尝试过什么以及失败的原因,您将获得更多答案。

标签: discord.js


【解决方案1】:

创建徽章图像后,只需使用 .setThumbnail() 方法指向该图像或该图像的链接,以便您可以在其嵌入中显示徽章。

const member = client.guilds.get(GUILD_ID).members.get(message.author.id);
if (member.roles.has(role)) embed.setThumbnail('link_to_badge_img')

但是,如果您希望在嵌入说明中包含一个徽章列表,那么您可以像这样列出它们:

const member = client.guilds.get(GUILD_ID).members.get(message.author.id);
if (member.roles.has(role)) embed.setDescription('BadgeTitle')

或者,如果用户有多个徽章,您可以创建一个 badges 数组并将他们拥有的徽章推送到它,然后最终将其添加到嵌入描述中,如下所示:

const member = client.guilds.get(GUILD_ID).members.get(message.author.id);
if (member.roles.has(role)) badges.push('BadgeTitle') //Do this for each badge

if (badges.length) embed.setDescription(`**Badges**\n${badges.join('\n')}`)

【讨论】:

  • 好吧,看起来不错,但我想把它放在我的 .setDescription() 中
  • 我用 2 个针对您的问题的新解决方案编辑了我的答案
  • let badges = ''; if(message.member.roles.has('Head Developer'.id)) badges.push('&lt;:botdev:700525418775576606&gt;') if(badges.length) profile.setDescription(`**Your Badges**\n${badges.join('\n')}`) 这似乎不起作用!只需使用一个徽章进行测试。
  • 这不是您检查成员是否有角色的方式,您必须这样做:const headDevRole = message.guild.roles.find((role) =&gt; role.name === 'Head Developer') 然后您可以在 if 语句中使用它,如下所示:if (message.member.roles.has(headDevRole)
  • 我如何让这个全球化?所以无论他们在哪里运行命令,只要他们在我的服务器中有角色,他们仍然可以看到他们的徽章?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-22
  • 2019-06-16
  • 2021-10-25
  • 2019-09-22
  • 2021-10-10
  • 1970-01-01
相关资源
最近更新 更多