Actualmente estoy haciendo un comando de verificación del servidor de Minecraft usando minecraft-server-util pero cada vez que ingreso el número de puerto en la opción de puerto, aparece el error AssertionError [ERR_ASSERTION]: Expected 'port' to be a 'number', got 'object' afuera. Actualmente estoy usando la nueva cosa de interacción en discord.js v13.
Código:
const { SlashCommandBuilder } = require('@discordjs/builders'); const { MessageAttachment } = require('discord.js'); const util = require('minecraft-server-util'); module.exports = { data: new SlashCommandBuilder() .setName('minecraft') .setDescription('Checks the status of a minecraft server.') .addStringOption(option => option.setName('address').setDescription('Enter the server address.').setRequired(true)) .addNumberOption(option => option.setName('port').setDescription('Enter the server port. (25565 IS THE DEFAULT PORT)').setRequired(true)), async execute(interaction, client, MessageEmbed) { let server = interaction.options.getString('address'); let serverPort = interaction.options.getNumber('port'); if(serverPort == NaN) return interaction.reply({ content: 'The server port you provided is not a number.', ephemeral: true }); util.status(server, { port: parseInt(serverPort)}).then((response) => { var fav = response.favicon.split(",").slice(1).join(","); var imageStream = Buffer.from(fav, "base64"); var attachment = new MessageAttachment(imageStream, "favicon.png"); const embed = new MessageEmbed() .setColor('#008000') .setTitle('Minecraft Server Status') .attachFiles([attachment]) .addFields( {name: 'Server IP', value: response.host}, {name: 'Online Players', value: response.onlinePlayers}, {name: 'Player Threshold', value: response.maxPlayers}, {name: 'MOTD', value: response.motd.clean}, {name: 'Version', value: response.version}, ) .setThumbnail("attachment://favicon.png") interaction.reply({ embeds: [embed] }) }) .catch ((error) => { interaction.reply({ content: 'There was an error finding this server.', ephemeral: true }); throw error; }) }, }; Todavía no funcionará incluso si cambio .addNumberOption en .addStringOption y serverPort en un número entero usando parseInt(serverPort) .
El error es que pasas un objeto como segundo parámetro aquí: util.status(server, { port: serverPort }) mientras que debería ser el número de puerto :
return util.status(server, serverPort) Otra cosa, serverPort == NaN siempre es false . Incluso NaN == NaN es false . Deberías usar isNaN en su lugar:
let serverPort = NaN console.log(serverPort == NaN) console.log(serverPort === NaN) console.log(isNaN(serverPort)) Aunque no estoy seguro de si alguna vez es NaN , ya que getNumber() devuelve el valor de la opción, o null si no está configurado y no es necesario.
Parece que tiene algo que ver con mi PC porque cuando lo alojé en Heroku, parece haber funcionado. util.status(server, serverPort) parece funcionar mejor que { port: parseInt(serverPort) }