删除消息命令,仅适用于所有者、管理员和版主

Posted

技术标签:

【中文标题】删除消息命令,仅适用于所有者、管理员和版主【英文标题】:Delete message command, its work only for Owner, Admin and Moderator 【发布时间】:2021-04-27 18:12:03 【问题描述】:

我正在为我的服务器编写 Discord 机器人。我想为我的机器人添加一个命令,该命令将清除一个文本通道,并且只允许具有 Owner、Admin、Moderator 角色的人。

在代码中,它有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】:

您需要检查用户是否都没有三个角色。 由于您在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;

【讨论】:

谢谢!有用。我已经修复了一些关于括号错误和引用错误的错误。但是当我输入 !clear 10 时,它显示你没有权限清除!并消失几秒钟并删除 10 条最新消息。那么如何不显示“您没有权限清除!” ? 也许在 if 语句中检查您的角色名称是否相同。检查您的 Owner 角色是否确实有 **Owner** 我不小心添加了"**Owner**" 而不是"Owner",请再次检查。如果您的问题得到解决,请支持我的回答

以上是关于删除消息命令,仅适用于所有者、管理员和版主的主要内容,如果未能解决你的问题,请参考以下文章

gitlab管理员删除账户 怎么恢复

Rails:仅管理员维护模式

Wolkenkit:授权和用户角色的 ACL

php 管理员栏仅适用于管理员

phpmyadmin 权限仅适用于某些数据库

Facebook Messenger ID匹配API仅适用于管理员