删除消息命令,仅对所有者、管理员和版主有效

时间:2021-01-23 12:45:33

标签: discord discord.js bots

我正在为我的服务器编写 Discord 机器人。我想为我的机器人添加一个命令,该命令将清除一个文本频道,并且只允许拥有所有者、管理员、版主角色的人。

在代码中,它有if(!message.member.roles.cache.some(r => r.name === "**Owner**"),我有这个角色,但我不能删除消息。但是当我为我提供 3 个角色(所有者、管理员和版主)时,我可以使用它。

所以我需要修正:3 个角色中有 1 个仍然可以使用它。

代码在这里:

case 'clear': 
    if(!args[1]) 
        return message.reply('Please specify the number of messages to clear `e.g. !clear 10`')
            .then(message => message.delete({timeout: 3500}));

    if(!message.member.roles.cache.some(r => r.name === "Owner") || 
            !message.member.roles.cache.some(r => r.name === "Admin") || 
            !message.member.roles.cache.some(r => r.name === "Moderator")) 
        return message.reply('You do not have permissions to clear!')
            .then(message => message.delete({timeout: 3500}));

    message.channel.bulkDelete(args[1]);
    break;

1 个答案:

答案 0 :(得分:0)

您需要检查用户是否没有这三个角色。 由于您在 || 语句之间提供了 if 而不是 &&,因此它将检查用户是否没有三个角色中的一个或多个。如果用户没有其中一个或多个,它将​​输出 message.reply

如果您提供 &&,它将检查用户是否不具有这三个角色中的任何一个。

P.S:您提供的代码中存在一些括号错误和引用错误。

更新:"**Owner**" 已更改为 "Owner"

这是更新后的代码:

case 'clear': 
            if(!args[1]) return message.reply('Please specify the number of messages to clear `e.g. !clear 10`')
            .then(message => message.delete({timeout: 3500}));
            if(!message.member.roles.cache.some(r => r.name === "Owner") && (!message.member.roles.cache.some(r => r.name === "Admin")) && (!message.member.roles.cache.some(r => r.name === "Moderator")) 
               {
                 return message.reply('You do not have permissions to clear!')
                 .then(message => message.delete({timeout: 3500}));
               }
            message.channel.bulkDelete(args[1]);
            break;
相关问题