Acabo de hacer una pregunta por algo similar hoy, sin embargo, obtuve la respuesta y me encontré con un nuevo problema. Estoy creando un comando de información de usuario para un bot de discordia, y si el usuario no está jugando, el bot fallará.
este enlace contiene imágenes del registro de la consola cuando un usuario está en el juego y cuando un usuario no está en el juego. Solo tienes que leer las descripciones de las imágenes. https://imgur.com/a/ZLL24FY
código:
const Discord = require('discord.js'); const moment = require('moment'); module.exports = { name: "userinfo", aliases: ['ui', 'user', 'uinfo'], category: "info", description: "shows information of the user you mentioned", usage: "[command | alias]", run: async (client, message, args) => { const user = message.mentions.users.first() || message.author; const member = message.mentions.members.first() || message.member; const joinDiscord = moment(user.createdAt).format('llll'); const joinServer = moment(user.joinedAt).format('llll'); var presence = user.presence.activities.filter(x=>x.type === "PLAYING") console.log(presence); const embed = new Discord.MessageEmbed() .setColor('#724e72') .setTitle(`**Information for** ${user.tag}`) .setAuthor(`${message.author.tag}`, message.author.displayAvatarURL()) .setDescription('Shows information for mentioned user') .setThumbnail(user.displayAvatarURL()) .addField(`${user.tag}`, `${user}`, true) //.addField("ID:", `${user.id}`, true) .addField("Nickname:", `${member.displayName}`, true) .addField("Status:", `${user.presence.status}`, true) //.addField("In Server", message.guild.name, true) .addField("Game:", `${presence}`, true) .addField("Bot:", `${user.bot}`, true) .addField("Joined The Server On:", `${moment.utc(message.member.joinedAt).format("dddd, MMMM Do YYYY")}`) .addField("Account Created On:", `${moment.utc(user.createdAt).format("dddd, MMMM Do YYYY")}`, true) .addField("Roles:", member.roles.cache.map(r => '`'+r.name+'`').slice(0,-1)) .setTimestamp() .setFooter('a') message.channel.send(embed); } }Si alguien puede ayudar, gracias. No he usado discord.js o JavaScript en al menos un año, por lo que se agradece cualquier ayuda.
Cuando el usuario no está en un juego, la presence es una matriz vacía. Cuando una matriz vacía se convierte en cadena, se convierte en una cadena vacía. Esto significa que cuando haces esto
.addField("Game:", `${presence}`, true)está agregando un campo con un valor vacío a la inserción como se indica en el error. Puedes hacer algo como esto:
/* ... */ .addField("Game:", `${presence}`||'None', true) o simplemente verifique si la presence está vacía antes de agregarla a la inserción de esta manera
/* ... */ const embed = new Discord.MessageEmbed() .setColor('#724e72') .setTitle(`**Information for** ${user.tag}`) .setAuthor(`${message.author.tag}`, message.author.displayAvatarURL()) .setDescription('Shows information for mentioned user') .setThumbnail(user.displayAvatarURL()) .addField(`${user.tag}`, `${user}`, true) //.addField("ID:", `${user.id}`, true) .addField("Nickname:", `${member.displayName}`, true) .addField("Status:", `${user.presence.status}`, true) //.addField("In Server", message.guild.name, true) if (presence) embed.addField("Game:", `${presence}`, true) embed.addField("Bot:", `${user.bot}`, true) .addField("Joined The Server On:", `${moment.utc(message.member.joinedAt).format("dddd, MMMM Do YYYY")}`) .addField("Account Created On:", `${moment.utc(user.createdAt).format("dddd, MMMM Do YYYY")}`, true) .addField("Roles:", member.roles.cache.map(r => '`'+r.name+'`').slice(0,-1)) .setTimestamp() .setFooter('a') /* ... */