Estoy tratando de envolver mi encabezado alrededor de la API discord.js. Es mi primera API/proyecto. Estoy tratando de registrar el nombre de un canal. La documentación de discord ofrece este código de ejemplo.
// Fetch a channel by its id client.channels.fetch('actualIdHere') .then(channel => console.log(channel.name)) .catch(console.error);Esto arroja un error de acceso faltante. Tengo los permisos habilitados. Aquí está mi configuración.
// Require the necessary discord.js classes const { Client, Intents } = require('discord.js'); const { token } = require('./config.json'); // declare intents const myIntents = new Intents(); myIntents.add( [ Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_INTEGRATIONS, Intents.FLAGS.GUILD_MESSAGES, ], ); // Create a new client instance const client = new Client({ intents: myIntents }); client.login(token);Aquí está el cierre de sesión (nota, ¿de dónde vienen estas promesas?)
AsyncQueue { promises: [] } AsyncQueue { promises: [] } DiscordAPIError: Missing Access at RequestHandler.execute (C:\Users\name\discord-greed-game-bot\node_modules\discord.js\src\rest\RequestHandler.js:351:13) at processTicksAndRejections (node:internal/process/task_queues:96:5) at async RequestHandler.push (C:\Users\name\discord-greed-game-bot\node_modules\discord.js\src\rest\RequestHandler.js:52:14) at async ChannelManager.fetch (C:\Users\name\discord-greed-game-bot\node_modules\discord.js\src\managers\ChannelManager.js:115:18) { method: 'get', path: '/channels/actualIdHere', code: 50001, httpStatus: 403, requestData: { json: undefined, files: [] } }Después de conversar un poco con OP, parece que el problema provino de que estas líneas de código se ejecutaron antes de que <Discord>.Client estuviera listo para ejecutar comandos. Esa es la razón por la cual cualquier código que deba ser ejecutado por el bot debe colocarse dentro de un evento, y después de que se haya emitido el ready . Como sugirió @Wheelwright, una solución alternativa podría ser setTimeout() en ese código para que el bot tenga tiempo de conectarse, pero no se recomienda debido a la latencia de la API que, a veces, requiere más tiempo para iniciar sesión.
client.once('ready', bot => { console.log(`Ready! Logged in as ${bot.user.tag}.`); client.channels.fetch('idOfTheChannel') .then(channel => console.log(channel.name)) .catch(console.error); });