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)
)