0

I've been trying to built a Embed on discordjs 14.11.0 but whenever I had added star emoji I got this weird error.

node:events:491
      throw er; // Unhandled 'error' event
      ^

ValidationError: Expected the value to be an object, but received string instead
    at ObjectValidator.handle (C:\Users\bgang\Desktop\New folder (3)\node_modules\@sapphire\shapeshift\dist\index.js:1207:25)
    at ObjectValidator.parse (C:\Users\bgang\Desktop\New folder (3)\node_modules\@sapphire\shapeshift\dist\index.js:212:88)
    at EmbedBuilder.setAuthor (C:\Users\bgang\Desktop\New folder (3)\node_modules\@discordjs\builders\dist\index.js:291:26)
    at Client.<anonymous> (C:\Users\bgang\Desktop\New folder (3)\index.js:26:12)
    at Client.emit (node:events:513:28)
    at MessageReactionAdd.handle (C:\Users\bgang\Desktop\New folder (3)\node_modules\discord.js\src\client\actions\MessageReactionAdd.js:49:17)
    at module.exports [as MESSAGE_REACTION_ADD] (C:\Users\bgang\Desktop\New folder (3)\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_REACTION_ADD.js:4:37)
    at WebSocketManager.handlePacket (C:\Users\bgang\Desktop\New folder (3)\node_modules\discord.js\src\client\websocket\WebSocketManager.js:354:31)
    at WebSocketManager.<anonymous> (C:\Users\bgang\Desktop\New folder (3)\node_modules\discord.js\src\client\websocket\WebSocketManager.js:238:12)
    at WebSocketManager.emit (C:\Users\bgang\Desktop\New folder (3)\node_modules\@vladfrangu\async_event_emitter\dist\index.js:282:31)
Emitted 'error' event on Client instance at:
    at emitUnhandledRejectionOrErr (node:events:394:10)
    at process.processTicksAndRejections (node:internal/process/task_queues:84:21) {
  validator: 's.object(T)',
  given: 'eddieafk#0'
}

What deals with it exactly? Message cant be sent as everytime i tried. I couldnt understand, error dont say why it couldnt be sent? New Embed constructor really bad tho whoever wrote this.

client.on('messageReactionAdd', async (reaction, user) => {
  if (reaction.emoji.name === '⭐' && reaction.count > 1) {
    const message = reaction.message;
    const channel = message.guild.channels.cache.get(starboardChannelId);  
        const { EmbedBuilder } = require("discord.js")
        const embed = new EmbedBuilder()
          .setColor('#FFAC33')        
          .setAuthor(message.author.tag, message.author.displayAvatarURL())
          .setDescription(`${message.content}`)
          .setFooter(`⭐ 1 • ${message.id}`)
          .setTimestamp();

        if (message.attachments.size > 0) {
          const attachment = message.attachments.first();
          if (attachment) {
            embed.setImage(attachment.url);
          }
        }
        await channel.send({ embeds: [embed] });
        
        if (channel) {
          const fetchMessages = await channel.messages.fetch({ limit: 100 });
          const starboardMessage = fetchMessages.find(m => m.embeds.length && m.embeds[0].footer.text.startsWith('⭐') && m.embeds[0].footer.text.endsWith(message.id));
    
          if (starboardMessage) {
            const embed = starboardMessage.embeds[0];
            const starCount = embed.footer.text.match(/⭐ (\d+)/)[1];
    
            const newEmbed = embed.setFooter(`⭐ ${parseInt(starCount) + 1} • ${message.id}`);
            await starboardMessage.edit({ embeds: [newEmbed] });
          } else {
      }
    }
   }
   });

1 Answers1

0

There have been changes within embeds in the newer versions of discord.js.

.setAuthor() and .setFooter() expect to receive an object instead of a string.

const embed = new EmbedBuilder()
.setColor('#FFAC33')        
.setAuthor({ name: message.author.tag, iconURL: message.author.displayAvatarURL() })
.setDescription(`${message.content}`)
.setFooter({ text: `⭐ 1 • ${message.id}` })
.setTimestamp();
Crytek1012
  • 658
  • 1
  • 2
  • 9
  • I think i solve it but i dont know how to fix it, bot cant receive any message from ".setDescription" form but everything is OK on code for receive message. Could you please review it for me? @Crytek1012 – Eddie Kaspbrak Jun 14 '23 at 15:45
  • Try changing the `${message.content}` with some other random text and see if the embed displays properly. If that's the case, then it means that you're missing the MessageContent Intent, so `${message.content}` will be empty. To enable it, follow this post: https://stackoverflow.com/questions/73036854/message-content-doesnt-have-any-value-in-discord-js – Crytek1012 Jun 15 '23 at 16:23