TypeError: message.guild.channels.forEach is not a function

本小妞迷上赌 提交于 2020-08-10 19:47:50

问题


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

(The messages are in French)

const Discord = require('discord.js');
const fs = require('fs');
const ms = require('ms');

module.exports.run = async(client, message, args) => {
    if(!message.guild.member(message.author).hasPermission("MUTE_MEMBERS")) return message.channel.send("❌ Vous n'avez pas la permission d'utiliser cette commande !");
    if(message.mentions.users.size === 0) {
        return message.channel.send("❌ Vous devez mentionner un utilisateur !");
    }
    let mute = message.guild.member(message.mentions.users.first());
    if(!mute) {
        return message.channel.send("❌ L'utilisateur est introuvable !");
    }
    let muteRole = message.guild.roles.cache.find(role => role.name === "Mute")
    if(!muteRole) return message.channel.send("❌ Le rôle Mute n'existe pas")
    muteRole.permissions.remove('SEND_MESSAGES', 'ADD_REACTIONS');
    let mutetime = args[1];
    if(!mutetime) return message.channel.send("❌ Vous devez spécifier un temps !");
    message.guild.channels.forEach(async (channel, id) => {
        await channel.overwritePermissions(muteRole, {
            SEND_MESSAGES: false,
            SEND_TTS_MESSAGES: false,
            ATTACH_FILES: false,
            ADD_REACTIONS: false
        })
    })
    await(mute.roles.add(muteRole.id));
    message.delete();
    message.channel.send("✅ <@" + mute + "> a bien été muté pendant " + mutetime);

    setTimeout(function() {
        mute.roles.remove(muteRole.id);
        message.channel.send()
    }, ms(mutetime));
};

module.exports.help = {
    name: "mute"
}

回答1:


I don't how to explain it, but it doesn't pass on an ID.

 message.guild.channels.forEach(async (channel, id) => {
        await channel.overwritePermissions(muteRole, {
            SEND_MESSAGES: false,
            SEND_TTS_MESSAGES: false,
            ATTACH_FILES: false,
            ADD_REACTIONS: false
        })
    })

Should work if you just do

.forEach(async (channel, id) => { 
});

Hope this works!




回答2:


As of Discord.js v12, it is message.guild.channels.cache. Also, get rid of the id parameter, I don't know what you need that for. Should look like this:

 message.guild.channels.cache.forEach(async channel => {
        await channel.overwritePermissions(muteRole, {
            SEND_MESSAGES: false,
            SEND_TTS_MESSAGES: false,
            ATTACH_FILES: false,
            ADD_REACTIONS: false
        });
    });


来源:https://stackoverflow.com/questions/60852093/typeerror-message-guild-channels-foreach-is-not-a-function

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!