【问题标题】:How to only allow certian roles ot use this command如何只允许某些角色使用此命令
【发布时间】:2021-03-08 21:09:13
【问题描述】:

我试图只允许具有 Staff 角色的人运行此命令。 基本上该命令的作用是允许机器人 DM 用户 命令是<prefix>send @RandomUserName <message>

我正在尝试防止随机用户滥用此命令来淹没其他玩家的 DM。

client.on('message', message => {
    if (!message.content.startsWith(prefix) || message.author.bot) return;

    const args = message.content.slice(prefix.length).trim().split(/ +/);
    const command = args.shift().toLowerCase();
    if (message.member.roles.cache.some(role => role.name === 'Staff')) return;
    if (command === 'send'){
        function getUserFromMention(mention) {
            if (!mention) return;
            if (mention.startsWith('<@') && mention.endsWith('>')) {
                mention = mention.slice(2, -1);
                if (mention.startsWith('!')) {
                    mention = mention.slice(1);
                }
                return mention;
            }
        }
        const user = getUserFromMention(args[0])
        let MessageDM = args[1]
        client.users.cache.get(user).send(MessageDM);
    }
    // ...
});

【问题讨论】:

  • 您缺少!if (!message.member.roles.cache.some(role =&gt; role.name === 'Staff')) return; - 当员工角色存在时,您拥有它的方式不允许使用。此外,在 if 中包含函数绝不是一个好主意。
  • 嗯,我在哪里放 cahe 角色名称
  • 哦,等一下,让我对我的代码做一个快速测试
  • 好吧,我明白你的意思了。另外我应该把函数 instedt 放在哪里?
  • 在上限范围内的某处。如果确实解决了您的问题,我会将其发布为答案

标签: node.js discord.js


【解决方案1】:

您在角色检查中遗漏了一个否定 (!)。当角色存在时,您当前的if 仅评估为真。但是如果角色在场,你想return

换行

if (message.member.roles.cache.some(role => role.name === 'Staff')) return;

if (!message.member.roles.cache.some(role => role.name === 'Staff')) return;

另外,正如我在评论中提到的,将 function 放入 if 绝不是一个好主意。我只是把它放在上层范围内:

function getUserFromMention(mention) {
    if (!mention) return;
    if (mention.startsWith('<@') && mention.endsWith('>')) {
        mention = mention.slice(2, -1);
        if (mention.startsWith('!')) {
            mention = mention.slice(1);
        }
        return mention;
    }
}

client.on('message', message => {
    if (!message.content.startsWith(prefix) || message.author.bot) return;

    const args = message.content.slice(prefix.length).trim().split(/ +/);
    const command = args.shift().toLowerCase();
    if (!message.member.roles.cache.some(role => role.name === 'Staff')) return;
    if (command === 'send'){
        const user = getUserFromMention(args[0]);
        let MessageDM = args[1];
        client.users.cache.get(user).send(MessageDM);
    }
    // ...
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 2021-03-20
    • 2013-04-01
    • 2020-07-07
    • 2015-05-17
    • 2011-02-16
    相关资源
    最近更新 更多