Home > Back-end >  "Jump to Message" Button
"Jump to Message" Button

Time:05-29

Hi so basically I'm making a suggestion command. Once the user ran the command it will reply "Suggestion Submitted" with "Jump to Suggestion" url button but I'm getting error with the button. Here's my code


const { MessageActionRow, MessageButton, MessageEmbed, MessageSelectMenu } = require("discord.js");

const db = require("quick.db")


module.exports = {
    name: "suggestion",
    description: "Create or reply to a suggestion",
    userPermissions: "",
            options: [{
            name: "create",
            type: 1,
            description: "Create a suggestion",
            options: [{
                name: "suggestion",
                type: 3,
                required: true,
                description: "The suggesiton you want to give"
            }],       
            }, {
            name: 'set-channel',
            type: 1,
            description: "Select the suggestion channel",
            options: [{
                name: "channel",
                type: 7,
                required: true,
                description: "The channel where I should send the suggestions"
            }]
        }],
                      
                      
      /**
     *
     * @param {Client} client
     * @param {CommandInteraction} interaction
     * @param {String[]} args
     */

    run: async (client, interaction, args) => {
      await interaction.deferReply(); 

       const option = interaction.options.getSubcommand()
             
             const suggestion = interaction.options.getString("suggestion")
             
        const channel = interaction.options.getChannel("channel")

           const id = interaction.options.getString("id")

          const status = interaction.options.getString("status")

          const response = interaction.options.getString("response")
            
      const guildId = interaction.guild.id

      let c = await db.fetch(`suggestion_${guildId}`);

     if (option === "create") { 
         if (!c) { return interaction.editReply("<:pollno:979743680124555286> No suggestion channel were found!") 
          } else {
    
       const suggestembed = new MessageEmbed()
       .setTitle("New Suggestion!")
       .setColor("2F3136")
       .setDescription(suggestion)
       .setFooter(interaction.user.username)
       
       const url = suggestembed.url
       
       const row = new MessageActionRow()
       .addComponents(
             new MessageButton()                    .setLabel('Jump to Message')
            .setStyle('LINK')
            .setURL(url)
           )
        const doneembed = new MessageEmbed()
        .setTitle("Suggestion Submitted!")
        .setDescription("Your Suggestion was submitted")
        .setColor("2F3136")
        
        interaction.editReply({ embeds: [doneembed], components: [row] })
        
      c.send({ embeds: [suggestembed] })
         }
         } else if (option === "set-channel") {
            if (!interaction.member.permissions.has("MANAGE_GUILD")) return interaction.editReply({ content: "<:pollno:979743680124555286> You don't have enough power to execute this command", ephemeral: true })
                

            if (channel.type !== "GUILD_TEXT") return interaction.editReply({ content: "<:pollno:979743680124555286> Invalid Channel Type!", ephemeral: true })

            await db.set(`suggestion_${guildId}`, channel.id);
             const last = new MessageEmbed()
             .setTitle("Suggestion Setup!")
             .setDescription("Suggestion channel have been setup")
             .setColor("2F3136")
             
             interaction.editReply({ embeds: [last] })
             }
       }  
}

The Error

Error: MessageButton must be a String

Hope to get the some help with this as this have become the issue for me that make my development stopped! Thanks

CodePudding user response:

You're currently using MessageEmbed().url as a variable for the message url, but it returned undefined.

You have to post the message before picking up his URL. Here's an example :

const suggestembed = new MessageEmbed()
.setTitle("New Suggestion!")
.setColor("2F3136")
.setDescription(suggestion)
.setFooter(interaction.user.username)

const msg = await interaction.channel.send({embeds:[suggestembed]})
const url = msg.url

const row = new MessageActionRow()
.addComponents(
new MessageButton()
.setLabel('Jump to Message')
.setStyle('LINK')
.setURL(url)
)
  • Related