Discord.js,通过数组中的 ID 查找用户是不是具有角色

Posted

技术标签:

【中文标题】Discord.js,通过数组中的 ID 查找用户是不是具有角色【英文标题】:Discord.js, Finding if user has a role by ID from an ArrayDiscord.js,通过数组中的 ID 查找用户是否具有角色 【发布时间】:2021-10-15 00:34:44 【问题描述】:

我正在为我的 Discord.js 机器人创建一个装备命令,我试图让它搜索用户的角色,删除所有当前装备的颜色角色,然后装备他们要求的那个。

我无法将过滤器集中在角色 ID 数组上,因为尽管用户具有该角色,但它只返回一个空白数组。

这是我正在尝试的代码:

hasRoles = []

for (const x of guildRoles)
    hasRoles.push(x.roleid)

console.log(hasRoles)

let user = interaction.options.getUser('youruseroption') || interaction.user
const guild = client.guilds.cache.get("646074330249429012");
let member = await guild.members.cache.get(user.id);
const memberRoles = member.roles.cache
  .filter((roles) => roles.id == `$hasRoles`)
  .map((role) => role.toString());

console.log(memberRoles)

// await interaction.followUp( ephemeral: true, embeds: [embed1] );

以下是角色数组的示例:

const guildRoles = [
    
        role: "turquoise",
        color: "#6ba8a8",
        price: 6000,
        roleid: '813152038346817597',
        id: `turquoise`,
        availAt: '10'
    ,
    
        role: 'clay',
        color: "#916d6d",
        price: 6000,
        roleid: '813152807720583180',
        id: `clay`,
        availAt: '10'
    ,
    
        role: 'light brown',
        color: "#c2a289",
        price: 6000,
        roleid: '813153670467944459',
        id: `lbrown`,
        availAt: '10'
    
]

【问题讨论】:

【参考方案1】:

您的 hasRoles 是一个 ID 数组,您无法将字符串化数组与字符串进行比较(即 roles.id == `$hasRoles 不起作用)。

不过,您可以使用Array#includes 方法检查hasRoles 数组是否包含当前role.id

// you can use map here to get an array of roleids
let hasRoles = guildRoles.map((r) => r.roleid);
let user = interaction.options.getUser('youruseroption') || interaction.user;
let guild = client.guilds.cache.get('646074330249429012');
// did you mean fetch?
let member = await guild.members.fetch(user.id);
let memberRoles = member.roles.cache
  .filter((role) => hasRoles.includes(role.id))
  .map((role) => role.toString());

console.log(memberRoles);

【讨论】:

非常感谢!这似乎起到了作用,console.log 现在显示颜色角色:) 你会碰巧知道如何从用户中删除角色吗?正确的格式是“member.roles.remove('id')”,(在这种情况下,'id' 我相信是 memberRoles)。我没有收到任何错误,只是没有删除角色。 编辑:得到它的工作,只需要 .replace 以便它注册纯 ID!

以上是关于Discord.js,通过数组中的 ID 查找用户是不是具有角色的主要内容,如果未能解决你的问题,请参考以下文章

Discord.js 将数组中的 ID 替换为与该 ID 匹配的用户的昵称?

在 discord.js 中创建一个用于从数组中查找和终止角色的 for 循环

如何在 discord.js 中通过 id 查找用户

如何将服务器中每个用户的 id 放入数组中? (Discord.js v12)

Discord.js - 通过 ID 或提及获取用户

尝试使用 mongdb 在 discord.js 中查找用户被静音的次数