discord - 删除消息命令,仅适用于所有者、管理员和版主
问题描述
我正在为我的服务器编写 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;
解决方案
您需要检查用户是否没有这三个角色。由于您在语句和 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;
推荐阅读
- java - 如何在 Java 中到达堆栈底部(不丢失其他元素)
- python - Python 问题 Json 返回值是覆盖之前的值
- python - 编辑熊猫数据框中列中的文本
- kubernetes - 允许 helm hooks (jobs) 创建 k8s 资源
- php - Laravel Excel 不会分块和超时
- flutter - 如果我使用带有家庭属性的材料应用程序,如何使用导航器在颤动的屏幕之间导航?
- excel - 将动态范围添加到我的 VBA 到 Outlook 宏
- asp.net-mvc-5 - MVC 5 @Scripts.Render("~/bundles/bootstrap") 错误“对象引用未设置为对象的实例。”
- java - 为什么它说我的退货声明“无法访问”
- amazon-web-services - 如何配置访问点策略以列出文件夹中的对象