如何在 DiscordJS v13 上向用户添加角色?

Posted

技术标签:

【中文标题】如何在 DiscordJS v13 上向用户添加角色?【英文标题】:How can I add a role to a user on DiscordJS v13? 【发布时间】:2021-12-21 19:20:24 【问题描述】:

我在使用 DiscordJS v13 向用户添加角色时遇到问题。有什么办法吗?每当我添加它们时,它们都没有定义。这是我要添加添加角色的代码。我是 discord.js 的初学者,所以请耐心等待。谢谢!

     else if (commandName === 'verification')
        let code1 = 'A96B2UUH'
        const code = options.getString('code')

        if(code === code1)
            interaction.reply(
                content: 'The code has been accepted. Welcome to the hub!',
                ephemeral: true,
            )
            let role = message.guild.roles.cache.some(role => role.name === 'Equitability')
            message.member.roles.add(role)
        else
            interaction.reply(
                content: 'You entered the wrong code. Please contact the administrators to gain access.',
                ephemeral: true,
            )
        
    
)

编辑:我修好了!我改变了一些东西,不知何故它起作用了。这是代码。

bot.on('interactionCreate', async interaction => 
    if(!interaction.isCommand()) return

    const  options  = interaction

    if(interaction.commandName === 'verification')
        let code1 = 'A96B2UUH'
        const code = options.getString('code')

        if(code === code1)
            await interaction.reply(
                content: 'You entered the correct code. Welcome to the hub!',
                ephemeral: true,
            )
            var guild = bot.guilds.cache.get('907259574342537236')
            const member = await guild.members.fetch(interaction.user.id)
            const role = await guild.roles.fetch('907261775622328352')
            member.roles.add(role)
        else
            await interaction.reply(
                content: 'The code you entered is incorrect. Contact the administrators to gain access the server.',
                ephemeral: true,
            )
        
    
)

【问题讨论】:

【参考方案1】:

在 Discord.js v13 中获取角色需要缓存它们,因此添加已知角色的最佳方法就是通过 ID。

要获取角色的 ID,请打开“服务器设置”>“角色”>“右键单击”>“复制 ID”

那么你可以简单地做 message.member.roles.add("roleId");

如果您不能完全确定某个角色是否存在(即通过用户输入),您可以获取所有服务器角色(不同于.cache.get),然后是用户.filter,但这似乎不是您的'这样做我不会包含它

【讨论】:

【参考方案2】:

您正在使用.some(),它返回Boolean (true/false)。您需要角色对象,因此您使用.find(),它采用相同的参数,但返回角色对象。另外,如果角色没有被缓存,可以使用RoleManager.fetch()从API中获取

await message.guild.roles.fetch() //optional - put it if the role is valid, but is not cached
let role = message.guild.roles.cache.find(role => role.name === 'Equitability')
message.member.roles.add(role)

【讨论】:

感谢您提供的信息,但我已经修复了! :) 如果这有帮助,您可以考虑投票/接受

以上是关于如何在 DiscordJS v13 上向用户添加角色?的主要内容,如果未能解决你的问题,请参考以下文章

无法通过 Discordjs v13 获取所有公会成员

尝试从 youtube 视频流式传输音频时,DiscordJS v13 AudioPlayer 卡在缓冲上

在新的 discordjs 中从 DM 向用户添加角色

如何在我的网站上向 Google 地图小部件添加用户输入标记,并从中获取纬度和经度数据?

如何将斜杠命令隐藏到特定用户或频道 Discord.js v13

DiscordJS 13用户嵌入显示在特定频道发送的最后一条消息