Actualmente estoy trabajando con Discord's Gateway y sockets para crear algo similar a discord.js
y para facilitar que un nuevo usuario use el paquete que estoy creando. Me gustaría que vieran los objetos y funciones de la clase Message
cuando se pasan como un parámetro He fracasado en todos mis intentos en esto.
Ejemplo de Discord.js
:
Ejemplo de My Package
:
Mi .on()
:
/** * client.on() [ when received certain operation from discord's gateway ] * @param {OPERATION} operation * @param {FUNCTION} func */ on(operation, func) { ws.on('message', (data) => { let payload = JSON.parse(data) const {t, event, op, d} = payload // OPERATION => operation operation = operation.toLowerCase(); // if op => message switch(operation) { case "message": { switch(t) { case "MESSAGE_CREATE": // message build let message = new Message().init(d, this.token) return func(message) // ^^^^^^^ this is where message is passed } } } }) }
Mi Message.init()
Código:
init(d, token) { this.content = d.content this.channel = { id: d.channel_id, send: (content) => { sendMessage(d.channel_id, token, content) } } this.author = { bot: d.author.bot ? d.author.bot : false, username: d.author.username, tag: `${d.author.username}#${d.author.discriminator}`, identifier: d.author.discriminator, id: d.author.id, avatar: `https://cdn.discordapp.com/avatars/${d.author.id}/${d.author.avatar}.gif` // avatar image } this.guild = { id: d.guild_id } this.timestamp = d.timestamp return this }
He buscado algo como esto y no pude encontrar nada específico para lo que estoy buscando.
Debe decirle a jsdoc qué argumentos acepta su función. Si bien FUNCTION
funciona de manera genérica, debe ser más específico:
/** * client.on() [ when received certain operation from discord's gateway ] * @param {OPERATION} operation * @param {(message:Message) => void} func */
Esto dice que el segundo argumento es una función que no devuelve nada ( void
) y tiene un objeto Message
como argumento. Presumiblemente, entonces tendrá una clase/constructor de Message
en algún lugar de su proyecto.
Documente su código usando jsdoc. probablemente querrá leer más sobre esto en https://jsdoc.app/
Una vez que tenga ese vscode (y otros IDE compatibles) hará el resto de la "magia"