首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lockdown命令,使用guild.roles指定

Lockdown命令,使用guild.roles指定
EN

Stack Overflow用户
提问于 2020-07-05 00:26:14
回答 1查看 293关注 0票数 0

我正试着做一个封锁命令,就我所知,这没问题,但有些地方不对劲。

代码语言:javascript
复制
const Discord = require('discord.js');
const client  = new Discord.Client();

module.exports = async (msg,client,args) => {
    const channel = msg.channel;
    const roles = msg.guild.roles;

    if(!msg.guild) return;

    if(!msg.member.hasPermission("MANAGE_CHANNELS"))
    msg.channel.send("Você não tem permissão para executar esse comando.")
    else{
        roles.forEach((roles) => {
            channel.overwritePermissions (roles ,{
                SEND_MESSSAGES: false,
                ADD_REACTIONS: false
            })
        })
        msg.channel.send("Canal bloqueado com sucesso.")
    }

}```


**error recived: TypeError: Cannot read property 'roles' of undefined**
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-05 01:13:43

在主文件中,您将参数作为:(client,msg)进行传递,因此在命令文件中,您需要以正确的顺序获取参数,

所以出自:

代码语言:javascript
复制
module.exports = async (msg, client, args) => {
}

要这样做:

代码语言:javascript
复制
module.exports = async (client, msg, args) => {
}

此外,您没有在主文件中传递args,因此请从:

代码语言:javascript
复制
if (commands[args[0]]) commands[args[0]](client,msg);
else if(args[0].split("")[0] == config.prefix) unknownCommand(client,msg);

至:

代码语言:javascript
复制
const first = args[0];
if(commands[first]) {
   commands[first](client, msg, args);
} else if(first[0] === config.prefix) {
   unknownCommand(client, msg, args);
}

下一个改进是在foreach语句中:

代码语言:javascript
复制
roles.forEach((roles) => {
  //code
});

在这里你有一个角色数组,然后你传递的变量也被称为角色,你应该将它称为角色或其他什么,

在v12 <Message>.guild.roles中还有一个Manager,而不是一个集合,因此您需要添加`.cache

您还需要更改channel.overwritePermission中的参数或切换到channel.updateOverwrite

代码语言:javascript
复制
roles.cache.forEach(role => {
   channel.updateOverwrite(role, {
      SEND_MESSSAGES: false,
      ADD_REACTIONS: false
   })
})

代码语言:javascript
复制
roles.cache.forEach(role => {
   channel.overwritePermissions([
    {
        id: role.id,
        deny: ["SEND_MESSAGE", "ADD_REACTIONS"]
    }  
   ]);
})

您可能还想研究一些更好的命令处理程序,据我所知,您的命令处理程序目前没有任何命令配置选项

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62731610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档