问题
I'm creating a Discord Bot using Discord.js
I'm creating a mute command but when I want to disable speaking permission for the Mute role for each channel, I get this error:
TypeError: message.guild.channels.forEach is not a function
I have V12. And I looked at some other options but I couldn't find any working options.
if(!toMute) return message.reply('It looks like you didnt specify the user!');
if(toMute.hasPermission('MANAGE_MESSAGES')) return message.reply("can't mute them");
let muterole = message.guild.roles.cache.find(r => r.name === 'muted');
if(!muterole){
try{
muterole = await message.guild.roles.create({
name: "muted",
color: "#000000",
permissions: []
})
message.guild.channels.forEach(async (channel, id) => {
await channel.overwritePermission(muterole, {
SEND_MESSAGES: false,
ADD_REACTIONS: false
});
});
}catch(e){
console.log(e.stack);
}
} return message.channel.send('Cant')
let mutetime = args[1];
if(!mutetime) return message.reply('You didnt specify the time');
await(toMute.addRole(muterole.id));
message.reply(`Successfully muted <@${toMute.id}> for ${ms(mutetime)}`);
setTimeout(function(){
toMute.removeRole(muterole.id);
message.channel.send(`<@${toMute.id}> has been unmuted!`);
}, ms(mutetime));
}
回答1:
Please try
message.guild.channels.cache.forEach((channel)=>{
...
})
Reference: https://discord.js.org/#/docs/main/stable/class/GuildChannelManager?scrollTo=cache
回答2:
It's like the error says. message.guild.channels.forEach
is not a function!
You're probably using discord.js v12.
In this version, message.guild.channels
doesn't return a collection, it returns the ChannelManager. To get a collection of all channels, you use message.guild.channels.cache
.
And now you can use .forEach()
:
message.guild.channels.cache.forEach((channel) => {
// your code here
});
来源:https://stackoverflow.com/questions/61219425/discord-js-message-guild-channels-foreach-is-not-a-function