【问题标题】: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'
    }
]

【问题讨论】:

    标签: javascript discord discord.js


    【解决方案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!
    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 2021-11-15
    • 2021-05-31
    • 2021-10-25
    • 2022-01-19
    • 2020-09-21
    • 1970-01-01
    • 2020-06-25
    相关资源
    最近更新 更多