检查提到的用户是不是在 discord.js 中具有角色

Posted

技术标签:

【中文标题】检查提到的用户是不是在 discord.js 中具有角色【英文标题】:To check if a mentioned user has the role or not in discord.js检查提到的用户是否在 discord.js 中具有角色 【发布时间】:2021-11-15 14:23:11 【问题描述】:

我正在制作一个与 discord.js 不和谐的管理机器人。我正在尝试创建一个赋予用户特定角色的命令。因此,我想先检查该用户是否事先具有该特定角色,以避免错误。问题在于检查用户是否具有角色的 if 语句,它给了我一个错误“TypeError:无法读取未定义的属性(读取'has')”。请建议我如何解决这个问题。

const 
    Role,
    ThreadManager
 = require("discord.js");
const ms = require('ms');

module.exports = 
    name: 'gulag',
    description: "gulag",
    execute(message, args) 

        if (message.member.permissions.has("ADMINISTRATORS")) 
            const target = message.mentions.users.first();
            const check = message.mentions.users.first();
            if (target) 

                let gulagRole = message.guild.roles.cache.find(role => role.name === 'gulag');
                let memberTarget = message.guild.members.cache.get(target.id);


                if (check.roles.has(gulagRole.id)) 
                    message.reply(`<@$memberTarget.user.id> is already in gulag.`)
                 else 
                    memberTarget.roles.add(gulagRole.id);
                    message.channel.send(`<@$memberTarget.user.id>`);
                    message.channel.send('https://tenor.com/view/gulag-warzone-call-of-duty-cod-battle-royale-gif-16853559');
                


            

        

    

【问题讨论】:

你在使用 Discord.js v13吗? 【参考方案1】:

我会直接选择message.mentions.members.first(),因为这将返回GuildMember,因此检查角色会更容易

const target = message.mentions.members.first()
if(target)
      if(target.roles.cache.find(r => r.name === 'gulag'))
            //REST OF THE STUFF
      

如果您使用的是 v13,请记住也要为您的客户声明 Intent。

【讨论】:

好的,谢谢! 伟大的@Bolt 记得将其标记为已解决,(在答案上打勾)

以上是关于检查提到的用户是不是在 discord.js 中具有角色的主要内容,如果未能解决你的问题,请参考以下文章

Discord JS V12 问题检查用户是不是已经拥有角色

如何使用此 discord.js 代码检查提到的用户邀请?

Discord.js - 检查用户是不是静音/静音更改

检查用户是不是在新的 discord.js 版本中具有角色

如何检查用户是不是有任何角色 discord.js

Discord.js 如何检查用户是不是不接受私信