删除消息命令,仅适用于所有者、管理员和版主
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"
,请再次检查。如果您的问题得到解决,请支持我的回答以上是关于删除消息命令,仅适用于所有者、管理员和版主的主要内容,如果未能解决你的问题,请参考以下文章