首页 > 解决方案 > 删除消息命令,仅适用于所有者、管理员和版主

问题描述

我正在为我的服务器编写 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;

标签: discorddiscord.jsbots

解决方案


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

如果你给&&它,它将检查用户是否没有这三个角色。

PS:您提供的代码中有一些括号错误和引用错误。

更新:"**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;

推荐阅读