diff --git a/backend/src/main/java/com/alttd/altitudeweb/services/discord/AppealDiscord.java b/backend/src/main/java/com/alttd/altitudeweb/services/discord/AppealDiscord.java index 3301b10..937e067 100644 --- a/backend/src/main/java/com/alttd/altitudeweb/services/discord/AppealDiscord.java +++ b/backend/src/main/java/com/alttd/altitudeweb/services/discord/AppealDiscord.java @@ -12,6 +12,7 @@ import com.alttd.altitudeweb.database.litebans.UserType; import com.alttd.altitudeweb.database.web_db.forms.Appeal; import com.alttd.altitudeweb.database.web_db.forms.AppealMapper; import com.alttd.altitudeweb.setup.Connection; +import com.alttd.webinterface.appeals.AppealSender; import com.alttd.webinterface.objects.MessageForEmbed; import com.alttd.webinterface.send_message.DiscordSender; import lombok.extern.slf4j.Slf4j; @@ -120,7 +121,7 @@ public class AppealDiscord { Instant timestamp = appeal.createdAt() != null ? appeal.createdAt() : Instant.now(); MessageForEmbed newAppealSubmitted = new MessageForEmbed( "New Appeal Submitted", description, fields, null, timestamp, null); - DiscordSender.getInstance().sendEmbedWithThreadToChannels(channelIds, newAppealSubmitted, "Appeal"); + AppealSender.getInstance().sendAppeal(channelIds, newAppealSubmitted, optionalAssignedTo.orElse(0L)); } private void assignAppealTo(UUID appealId, Long assignedTo) { diff --git a/discord/src/main/java/com/alttd/webinterface/appeals/AppealSender.java b/discord/src/main/java/com/alttd/webinterface/appeals/AppealSender.java new file mode 100644 index 0000000..de8f641 --- /dev/null +++ b/discord/src/main/java/com/alttd/webinterface/appeals/AppealSender.java @@ -0,0 +1,61 @@ +package com.alttd.webinterface.appeals; + +import com.alttd.webinterface.objects.MessageForEmbed; +import com.alttd.webinterface.send_message.DiscordSender; +import lombok.extern.slf4j.Slf4j; +import net.dv8tion.jda.api.components.actionrow.ActionRow; +import net.dv8tion.jda.api.components.buttons.Button; +import net.dv8tion.jda.api.entities.Message; + +import java.util.List; +import java.util.Optional; +import java.util.concurrent.CompletableFuture; + +@Slf4j +public class AppealSender { + + private static final AppealSender INSTANCE = new AppealSender(); + + public static AppealSender getInstance() { + return INSTANCE; + } + + public void sendAppeal(List channelIds, MessageForEmbed messageForEmbed, long assignedTo) { + DiscordSender.getInstance() + .sendEmbedToChannels(channelIds, messageForEmbed) + .whenCompleteAsync((result, error) -> { + if (error != null) { + log.error("Failed sending embed to channels", error); + return; + } + List list = result.stream() + .filter(Optional::isPresent) + .map(Optional::get) + .toList(); + + + list.forEach(message -> { + message.createThreadChannel("Appeal") + .queue(channel -> { + if (assignedTo == 0L) { + return; + } + String assignedUserMessage = "<@" + assignedTo + "> you have a new appeal!"; + channel.sendMessage(assignedUserMessage).queue(); + }); + }); + + addButtons(list); + }); + } + + public void addButtons(List messages) { + Button reminderAccepted = Button.primary("reminder_accepted", "Accepted"); + Button reminderInProgress = Button.secondary("reminder_in_progress", "In Progress"); + Button reminderDenied = Button.danger("reminder_denied", "Denied"); + messages.forEach(message -> { + message.editMessageComponents(ActionRow.of(reminderAccepted, reminderInProgress, reminderDenied)).queue(); + }); + } + +}