【问题标题】:Discord.js Trouble comprehending members.role (Formatting)Discord.js 无法理解 members.role(格式)
【发布时间】:2020-07-04 10:48:44
【问题描述】:

问题:如果用户没有定义的角色,则无法返回此函数,而不是 BREAK。尝试了几种不同的格式,但这里很干净。每次我尝试 else if 时都会出现意外的符号,所以我认为我的格式不好。

目标:实现角色权限。

     bot.on('message', function(message) {
    /* If message content not start with prefix stop function. Better do negative check, because it will avoid nesting. */
if(!message.content.startsWith(PREFIX)) return 
    /* if message startsWiht prefix declarate a command */
let command = message.content.substring(message.content.indexOf(" ") + 1, message.content.length);
    /* Now we can check user role */
if (!message.member.roles.cache.has('691441168000483409')) { 
        /* if Message.member has no target role stop function, send error message, and delete after 5s */ 
        message.reply('You has no permission for this').then(msg => {
            msg.delete({ timeout: 2000 }); 
        });
        return;
    }

bot.on('message', message => {
    let args = message.content.substring(PREFIX.length).split(" ");

    switch(args[0].toLowerCase()) {
        case "aa1":
            bot.commands.get('aa1').execute(message, args);
        break;

        case "aa2":
            bot.commands.get('aa2').execute(message, args);
        break;




    }

});
});


bot.login(token);

更新:当用户没有角色时权限部分工作正常,但当用户有角色时它什么都不做。

【问题讨论】:

    标签: javascript discord.js message roles


    【解决方案1】:

    您确定您使用的是 discord v12 版本吗? 对于不和谐 v12,您可以使用:

    if (!message.member.roles.cache.has('ROLE ID')) return message.reply('You has no permission for this')
    
    if (!message.member.roles.cache.some(role => ['ID','ID2'].includes(role.id))) return message.reply('You has no permission for this')
    

    对于不和谐 v11,您可以使用:

    if (!message.member.roles.has('ROLE ID')) return message.reply('You has no permission for this')
    
    if (!message.member.roles.some(role => ['ID','ID2'].includes(role.id))) return message.reply('You has no permission for this')
    

    V2

    bot.on('message', function(message) {
        /* If message content not start with prefix stop function. Better do negative check, because it will avoid nesting. */
    if(!message.content.startsWith(PREFIX)) return 
        /* if message startsWiht prefix declarate a command */
    let command = message.content.substring(message.content.indexOf(" ") + 1, message.content.length);
        /* Now we can check user role */
    if (!message.member.roles.cache.has('691441168000483409')) { 
            /* if Message.member has no target role stop function, send error message, and delete after 5s */ 
            message.reply('You has no permission for this').then(msg => {
                msg.delete({ timeout: 2000 }); 
            });
            return;
        }
        /* Now you can enter code whats you need */
    
    
    });
    

    V3

    bot.on('message', message => {
        if (message.channel.type === 'dm') return
        let args = message.content.substring(PREFIX.length).split(" ");
            /* If message content not start with prefix stop function. Better do negative check, because it will avoid nesting. */
        if(!message.content.startsWith(PREFIX)) return 
        /* if message startsWiht prefix declarate a command */
        let command = message.content.substring(message.content.indexOf(" ") + 1, message.content.length);
        /* Now we can check user role */
        if (!message.member.roles.cache.has('691441168000483409')) { 
            /* if Message.member has no target role stop function, send error message, and delete after 5s */ 
            message.reply('You has no permission for this').then(msg => {
                msg.delete({ timeout: 2000 }); 
            });
            return;
        }
        switch(args[0].toLowerCase()) {
            case "aa1":
                bot.commands.get('aa1').execute(message, args);
            break;
            case "aa2":
                bot.commands.get('aa2').execute(message, args);
            break;
        }
    });
    

    【讨论】:

    • "TypeError: Cannot read property 'roles' of null" 我需要定义 user.id 吗?让 user.id = 'IDOFROLE'?我理解它在做什么的概念,但不确定它在执行时指的是什么。
    • 我做了一些修改,什么版本返回错误?您需要将此代码放入bot.on(message =>
    • 最终编辑:很抱歉编辑了这么多,却没有决定我到底想要什么。我做了最后一次编辑,接近工作。我所需要的只是实现 else if,我已经更改了标题以反映。感谢您到目前为止的帮助,非常感谢!
    • @BrianChambers,没问题 :),我要添加 v2 版本。这必须工作正常。您可以通过在某些if 检查上返回来停止代码执行。
    • 幸运的是,它比我拥有的要好得多!!!但是当用户具有角色时,它什么也不做。我认为结尾格式错误?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    • 2013-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多