Search code examples
javadiscordembeddiscord-jda

JDA Java, Embed in created Ticket by Selection Menu


Here's my Code, I wanted to send an Embed Message in the Created Ticket by the Selection Menu but it's not working because it's underlined in red. If I remove "final Textchannel channel" then it would work but with "final Textchannel channel" I can get the Channel mention to the event.reply, so thankful for help

package main;

import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
import net.dv8tion.jda.api.entities.emoji.Emoji;
import net.dv8tion.jda.api.events.interaction.component.SelectMenuInteractionEvent;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import net.dv8tion.jda.api.interactions.components.buttons.Button;
import net.dv8tion.jda.api.interactions.components.selections.SelectMenu;
import net.dv8tion.jda.api.interactions.components.selections.SelectMenuInteraction;

import java.awt.*;
import java.util.EnumSet;

public class ticketsystem extends ListenerAdapter {

    public void onMessageReceived (MessageReceivedEvent event) {

        if (event.getMessage().getContentStripped().equals("!setup ticket")) {

            EmbedBuilder buildplan = new EmbedBuilder();
            buildplan.setColor(Color.RED);
            buildplan.setTitle("Tickets");
            buildplan.setDescription("Klicke auf das Menü unter dieser Nachricht, um ein Ticket zu Erstellen!");
            buildplan.setFooter("Test");

            SelectMenu menu = SelectMenu.create("ticket")
                    .setPlaceholder("Wähle ein Ticket!")
                    .addOption("Support-Ticket","support", "Klicke hier rauf, solltest du Ingame ein Problem haben!")
                    .addOption("Fraktions-Ticket","fraktion", "Klicke hier rauf, solltest du eine Fraktions frage haben")
                    .addOption("Spende-Ticket","spende", "Klicke hier rauf, solltest du Spenden wollen!")
                    .addOption("Team-Bewerbungen-Ticket","team", "Klicke hier rauf, solltest du dich fürs Team Bewerben wollen!")
                    .addOption("Team-Beschwerde-Ticket","beschwerde", "Klicke hier rauf, solltest du eine Beschwerde ans Team haben!")
                    .addOption("Rückerstattungs-Ticket","rückerstattung", "Klicke hier rauf, solltest du eine Rückerstattung haben wollen!")
                    .addOption("Entbannungs-Ticket","entbannung", "Klicke hier rauf, solltest du Entbannt werden wollen!")
                    .build();

            event.getChannel().sendMessageEmbeds(buildplan.build()).setActionRow(menu).queue();

        }

    }

    @Override
    public void onSelectMenuInteraction (SelectMenuInteractionEvent event) {

        if (event.getSelectMenu().getId().equals("ticket")) {

            switch (event.getValues().get(0)) {

                case "support":

                    int min = 1000;
                    int max = 99999;
                    int random_int = (int) Math.floor(Math.random() * (max - min + 1) + min);

                    Guild guild = event.getGuild();
                    EmbedBuilder embed = new EmbedBuilder();
                    embed.setColor(Color.RED);
                    embed.setTitle(event.getUser().getName() + "'s Ticket");
                    embed.setDescription("Bitte schreibe deinen Grund hier rein!");

                    ///Underlined in Red
                    final TextChannel channel = guild.createTextChannel("ticket-" + random_int, guild.getCategoryById("1019620303934083074"))
                            .addPermissionOverride(event.getMember(), EnumSet.of(Permission.VIEW_CHANNEL), null)
                            .addPermissionOverride(guild.getPublicRole(), null, EnumSet.of(Permission.VIEW_CHANNEL))
                            .addPermissionOverride(guild.getRoleById("1019620301027418136"), EnumSet.of(Permission.VIEW_CHANNEL), null).complete()
                            .sendMessageEmbeds(embed.build()).setActionRow(closeButton()).queue();
                    ///Till here
                    event.reply("Du hast erfolgreich ein Ticket erstellt" + channel.getAsMention()).setEphemeral(true).queue();

                    break;
            }


        }

    }

    private Button closeButton() {
        return Button.danger("closeButton", "Schließen");
    }
}


Solution

  • You are using sendMessage with interaction, use

    event.reply("")
         .setEmbeds(yourEmbed.build())
    

    instead