Tengo un problema cuando intento crear un rol y un canal de texto. El rol creado establecerá permisos para el canal de texto.
if (id === '4') { message.guild.roles.create({ name: `Owner`, color: `${color.white}`, permissions: ['ADD_REACTIONS'], hoist: true, }); let owner = message.guild.roles.cache.find((role) => role.name === 'Owner'); name = `${names.name}`, message.guild.channels .create(name, { type: 'GUILD_TEXT', permissionOverwrites: [ { id: owner, allow: ['ADD_REACTIONS'], deny: ['VIEW_CHANNEL'], }, ], }) .catch((err) => console.log(err)); }
Aunque crea el rol, cuando se trata del canal de texto, no puede encontrar el rol realizado y arroja un error:
TypeError [INVALID_TYPE]: Supplied parameter is not a User nor a Role.
No estoy seguro de cómo solucionar esto.
Parece que no ha esperado que el rol cree una función. Intenta usar este código:
if(id === '4'){ await message.guild.roles.create({ name: `Owner`, color: `${color.white}`, permissions: ["ADD_REACTIONS"], hoist: true }); let owner = message.guild.roles.cache.find(role => role.name === "Owner"); name = `${names.name}`, await message.guild.channels.create(name, { type: "GUILD_TEXT", permissionOverwrites: [{ id: owner, allow: ['ADD_REACTIONS'], deny: ['VIEW_CHANNEL'] }] }).catch(err => console.log(err)); }
roles.create()
es un método asíncrono, lo que significa que devuelve una promesa y permite que el resto del código se ejecute sin bloquear nada. También significa que cuando intente encontrar el rol recién creado en la línea siguiente, no estará allí porque ni siquiera se creó, por lo que no estará undefined
. Como undefined
no es un Role
o User
válido, recibe un TypeError
.
Sin embargo, roles.create()
se resuelve en el rol recién creado, por lo que puede esperar a que se cree (usando await
por ejemplo) y obtener su valor. De esta manera ni siquiera necesita encontrarlo más tarde. Echa un vistazo al código a continuación:
let owner = await message.guild.roles.create({ name: `Owner`, color: color.white, permissions: ['ADD_REACTIONS'], hoist: true, }); message.guild.channels .create(names.name, { type: 'GUILD_TEXT', permissionOverwrites: [ { // now owner is a valid role id: owner, allow: ['ADD_REACTIONS'], deny: ['VIEW_CHANNEL'], }, ], }) .catch((err) => console.log(err));