我正试着做一个封锁命令,就我所知,这没问题,但有些地方不对劲。
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**发布于 2020-07-05 01:13:43
在主文件中,您将参数作为:(client,msg)进行传递,因此在命令文件中,您需要以正确的顺序获取参数,
所以出自:
module.exports = async (msg, client, args) => {
}要这样做:
module.exports = async (client, msg, args) => {
}此外,您没有在主文件中传递args,因此请从:
if (commands[args[0]]) commands[args[0]](client,msg);
else if(args[0].split("")[0] == config.prefix) unknownCommand(client,msg);至:
const first = args[0];
if(commands[first]) {
commands[first](client, msg, args);
} else if(first[0] === config.prefix) {
unknownCommand(client, msg, args);
}下一个改进是在foreach语句中:
roles.forEach((roles) => {
//code
});在这里你有一个角色数组,然后你传递的变量也被称为角色,你应该将它称为角色或其他什么,
在v12 <Message>.guild.roles中还有一个Manager,而不是一个集合,因此您需要添加`.cache
您还需要更改channel.overwritePermission中的参数或切换到channel.updateOverwrite
roles.cache.forEach(role => {
channel.updateOverwrite(role, {
SEND_MESSSAGES: false,
ADD_REACTIONS: false
})
})或
roles.cache.forEach(role => {
channel.overwritePermissions([
{
id: role.id,
deny: ["SEND_MESSAGE", "ADD_REACTIONS"]
}
]);
})您可能还想研究一些更好的命令处理程序,据我所知,您的命令处理程序目前没有任何命令配置选项
https://stackoverflow.com/questions/62731610
复制相似问题