AltitudeBot/src/main/java/com/alttd/buttonManager/buttons/eventButton/EventButton.java

102 lines
4.0 KiB
Java
Raw Normal View History

package com.alttd.buttonManager.buttons.eventButton;
import com.alttd.AltitudeBot;
import com.alttd.buttonManager.DiscordButton;
import com.alttd.database.queries.events.Event;
import com.alttd.util.Logger;
import com.alttd.util.Util;
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.entities.*;
import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent;
import net.dv8tion.jda.api.interactions.components.buttons.Button;
import java.time.Instant;
import java.util.List;
import java.util.Optional;
public class EventButton extends DiscordButton {
public EventButton() {
}
@Override
public String getButtonId() {
return "event_button";
}
@Override
public void execute(ButtonInteractionEvent event) {
Event eventForButton = Event.getEvent(event.getMessageIdLong());
if (eventForButton == null) {
event.replyEmbeds(Util.genericErrorEmbed("Error", "Event not found")).setEphemeral(true).queue();
return;
}
Member member = event.getMember();
if (member == null) {
event.replyEmbeds(Util.genericErrorEmbed("Error", "This button can only be used within a guild")).setEphemeral(true).queue();
return;
}
if (Instant.now().isAfter(eventForButton.getStartTime())) {
event.replyEmbeds(Util.genericErrorEmbed("Error", "Unable to process you joining" + eventForButton.getTitle() + ", the event might have ended!")).setEphemeral(true).queue();
return;
}
Optional<Role> any = member.getRoles().stream().filter(role -> role.getIdLong() == eventForButton.getRoleId()).findAny();
if (any.isPresent()) {
updateJoinedEventUsersInEmbed(eventForButton);
event.replyEmbeds(Util.genericSuccessEmbed("Success", "Removed you from " + eventForButton.getTitle() + "!")).setEphemeral(true).queue();
try {
eventForButton.getRole().getGuild().removeRoleFromMember(member, eventForButton.getRole()).queue();
} catch (Exception e) {
Logger.altitudeLogs.error(e);
}
return;
}
try {
eventForButton.getRole().getGuild().addRoleToMember(member, eventForButton.getRole()).queue();
} catch (Exception e) {
Logger.altitudeLogs.error(e);
}
if (updateJoinedEventUsersInEmbed(eventForButton)) {
event.replyEmbeds(Util.genericSuccessEmbed("Success", "You joined " + eventForButton.getTitle() + "!")).setEphemeral(true).queue();
} else {
event.replyEmbeds(Util.genericErrorEmbed("Error", "Failed to add you to the event, contact an admin for help if needed")).setEphemeral(true).queue();
}
}
@Override
public Button getButton() {
return Button.primary(getButtonId(), "Join Event");
}
private boolean updateJoinedEventUsersInEmbed(Event event) {
Optional<Message> optionalMessage = event.getMessage();
if (optionalMessage.isEmpty()) {
Logger.altitudeLogs.error("Unable to find event message");
return false;
}
Message message = optionalMessage.get();
List<MessageEmbed> embeds = message.getEmbeds();
if (embeds.isEmpty()) {
Logger.altitudeLogs.error("Unable to find event embed");
return false;
}
EmbedBuilder builder = new EmbedBuilder(embeds.get(0));
builder.clearFields()
.addField("Event Start", "<t:" + event.getStartTime().getEpochSecond() + ":F>", true);
Guild guildById = AltitudeBot.getInstance().getJDA().getGuildById(event.getGuildId());
if (guildById != null) {
List<Member> membersWithRole = guildById.getMembersWithRoles(event.getRole());
builder.addField("Participants", String.valueOf(membersWithRole.size()), true);
}
MessageEmbed updatedEmbed = builder.build();
message.editMessageEmbeds(updatedEmbed).queue();
return true;
}
}