Estaba codificando un comando de información de userInfo , pero cuando uso el comando, joinedAtTimeStamp muestra <t:NaN:R> en la inserción. Es el único problema en este código.
Mi código:
const { MessageEmbed, ContextMenuInteraction } = require("discord.js"); module.exports = { name: "userInfo", aliases: ["user"], permissions: ["SEND_MESSAGES", "ATTACH_FILES"], description: "user", async execute(message, args, cmd, client, Discord, profileData) { const target = message.mentions.users.first(); if(!args[0]) { const response2 = new MessageEmbed() .setColor("RANDOM") .setAuthor({name: message.author.tag, iconURL: message.author.displayAvatarURL({dynamic: true})}) .setThumbnail(message.author.displayAvatarURL({dynamic: true})) .addFields( {name: "ID", value: message.author.id}, {name: "Joined Server", value: `<t:${parseInt(message.author.joinedTimestamp / 1000)}:R>`, inline: true}, {name: "Account Created", value: `<t:${parseInt(message.author.createdTimestamp / 1000)}:R>`, inline: true}, ); message.reply({embeds:[response2]}); } const response = new MessageEmbed() .setColor("RANDOM") .setAuthor({name: target.tag, iconURL: target.displayAvatarURL({dynamic: true})}) .setThumbnail(target.displayAvatarURL({dynamic: true})) .addFields( {name: "ID", value: target.id}, {name: "Joined Server", value: `<t:${parseInt(target.joinedTimestamp / 1000)}:R>`, inline: true}, {name: "Account Created", value: `<t:${parseInt(target.createdTimestamp / 1000)}:R>`, inline: true}, ); message.reply({embeds: [response], ephemeral: true}) } }Estoy usando discord.js v13 y node 16.
message.author es un User y no tiene una propiedad joinedTimestamp , solo la tienen GuildMember . message.member representa al autor del mensaje como miembro del gremio, por lo que puede usarlo, ya que tendrá una propiedad joinedTimestamp .
La razón por la que ve NaN en lugar del valor correcto es porque parseInt devolverá NaN si intenta analizar undefined :
console.log('undefined:', parseInt(undefined / 1000, 10)); console.log('3459192421512:', parseInt(3459192421512 / 1000, 10));El siguiente código debería funcionar como se esperaba
.addFields( { name: 'ID', value: message.author.id }, { name: 'Joined Server', value: `<t:${parseInt(message.member.joinedTimestamp / 1000, 10)}:R>`, inline: true, }, { name: 'Account Created', value: `<t:${parseInt(message.author.createdTimestamp / 1000, 10)}:R>`, inline: true, }, ); En cuanto a target , es el mismo problema; message.mentions.users.first() es un User . Puede crear una nueva variable, por ejemplo, targetMember y asignar message.mentions.members.first() , por lo que será un GuildMember :
const target = message.mentions.users.first(); const targetMember = message.mentions.members.first(); Y luego, simplemente reemplace target :
.addFields( { name: 'ID', value: target.id }, { name: 'Joined Server', value: `<t:${parseInt(targetMember.joinedTimestamp / 1000, 10)}:R>`, inline: true, }, { name: 'Account Created', value: `<t:${parseInt(target.createdTimestamp / 1000, 10)}:R>`, inline: true, }, ); PD: es una buena idea usar el radix en parseInt . Es por eso que agregué 10 como segundo parámetro en parseInt .
¿Podría verificar el tipo de target.joinedTimestamp ?
Podría ser que la doble conversión que estás haciendo aquí:
parseInt(target.joinedTimestamp / 1000)destruyó tu número.
(Está convirtiendo lo que sea target.createdTimestamp en número, dividiéndolo por 100 (lo que lo convierte en un número de punto flotante) y luego descartando el punto flotante convirtiéndolo de nuevo a int).