Entonces, como dije en el título, en algunos gremios, el permissionOverwrites de sobreescritura del canal no funciona, lo que lleva a bloquear el bot.
Aquí está el código:
const qu = message.guild.roles.cache.find( (role) => role.name.toLowerCase() === '', ); if (!qu) { try { let qu = await message.guild.roles.create({ name: '', color: '#', }); try { await message.guild.channels.cache.forEach(async (channel) => { await channel.permissionOverwrites .edit(qu, { VIEW_CHANNEL: false, }) .then(console.log) .catch(console.error); }); } catch (e) { await console.log(e); } } catch (e) { await console.log(e); } }Aquí está el error que me sale en la consola:
TypeError: Cannot read properties of undefined (reading 'edit') channel.permissionOverwrites.edit , .create y .set devuelven el mismo error. No sé qué hay detrás de este error, si tienes alguna idea de por qué, házmelo saber.
No todos los canales tienen permissionOverwrites de sobrescritura. ThreadChannel s y DirectoryChannel s , por ejemplo, no los tienen. Si un gremio tiene estos canales almacenados en caché, recibirá un error en su bucle forEach . Registraría y channel.type para ver qué tipos causan estos errores.
Para resolver esto, debe filtrar estos:
await message.guild.channels.cache .filter( (channel) => ![ 'GUILD_DIRECTORY', 'GUILD_NEWS_THREAD', 'GUILD_PRIVATE_THREAD', 'GUILD_PUBLIC_THREAD', ].includes(channel.type), ) .forEach(async (channel) => { await channel.permissionOverwrites .edit(qu, { VIEW_CHANNEL: false, }) .then(console.log) .catch(console.error); }); ... o solo incluya los que necesita (por ejemplo, TextChannel y CategoryChannel ):
await message.guild.channels.cache .filter((channel) => [ 'GUILD_CATEGORY', 'GUILD_TEXT', 'GUILD_VOICE', ].includes(channel.type), ) .forEach(async (channel) => { await channel.permissionOverwrites .edit(qu, { VIEW_CHANNEL: false, }) .then(console.log) .catch(console.error); });