From 9e93adde34f9ba561675584a79c04d21f2ef571e Mon Sep 17 00:00:00 2001 From: allison <67673392+Allybe@users.noreply.github.com> Date: Fri, 28 Aug 2026 13:33:04 -0500 Subject: [PATCH] qol --- src/main/java/tech/allydoes/Constants.java | 4 ++ .../java/tech/allydoes/discord/Command.java | 1 - .../tech/allydoes/discord/DiscordManager.java | 47 ++------------- .../discord/commands/SaveChannelCommand.java | 7 +-- .../java/tech/allydoes/door/DoorStatus.java | 57 +++++++++++++++++++ .../tech/allydoes/web/POST/PostStatus.java | 7 ++- 6 files changed, 71 insertions(+), 52 deletions(-) create mode 100644 src/main/java/tech/allydoes/door/DoorStatus.java diff --git a/src/main/java/tech/allydoes/Constants.java b/src/main/java/tech/allydoes/Constants.java index 5803e8a..df6543b 100644 --- a/src/main/java/tech/allydoes/Constants.java +++ b/src/main/java/tech/allydoes/Constants.java @@ -1,5 +1,8 @@ package tech.allydoes; +import java.util.ArrayList; +import java.util.Arrays; + public class Constants { public static final boolean PRODUCTION = true; public static final String TESTING_GUILD = "926369143186403329"; @@ -12,4 +15,5 @@ public class Constants { public static final String DB_HOST = "localhost"; public static final String DB_PORT = "5432"; + public static final ArrayList statusMessages = new ArrayList<>(Arrays.asList("building stuff... ", "robots!", "beep boop", "thinking....", "hiiii!", "*hammer noises*", "*drill noises*", "volunteer at first robotics!", "join robotics!", "join cosplay club!")); } diff --git a/src/main/java/tech/allydoes/discord/Command.java b/src/main/java/tech/allydoes/discord/Command.java index 52f9d2d..7de1b57 100644 --- a/src/main/java/tech/allydoes/discord/Command.java +++ b/src/main/java/tech/allydoes/discord/Command.java @@ -6,7 +6,6 @@ import net.dv8tion.jda.api.interactions.commands.build.SlashCommandData; public interface Command { SlashCommandData getCommandData(); - boolean isPrivateCommand(); void processSlashCommandInteractionEvent(SlashCommandInteractionEvent event); void processButtonInteractionEvent(ButtonInteractionEvent event); } diff --git a/src/main/java/tech/allydoes/discord/DiscordManager.java b/src/main/java/tech/allydoes/discord/DiscordManager.java index b1252dc..2ca6513 100644 --- a/src/main/java/tech/allydoes/discord/DiscordManager.java +++ b/src/main/java/tech/allydoes/discord/DiscordManager.java @@ -10,13 +10,11 @@ import net.dv8tion.jda.api.requests.restaction.CommandListUpdateAction; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import tech.allydoes.Constants; -import tech.allydoes.Main; -import tech.allydoes.database.DatabaseManager; import tech.allydoes.discord.commands.SaveChannelCommand; import tech.allydoes.discord.listener.SlashCommandInteractionListener; -import java.util.ArrayList; import java.util.HashMap; +import java.util.Random; public class DiscordManager { public final Logger LOGGER; @@ -35,7 +33,8 @@ public class DiscordManager { .build() .awaitReady(); registerSlashCommands(); - jda.getPresence().setActivity(Activity.competing("robots!")); + Random random = new Random(); + jda.getPresence().setActivity(Activity.customStatus(Constants.statusMessages.get(random.nextInt(Constants.statusMessages.size())))); LOGGER.info("Logged in as {}", jda.getSelfUser().getName()); } @@ -50,7 +49,6 @@ public class DiscordManager { private void registerSlashCommandsGlobal() { CommandListUpdateAction commandListUpdateAction = jda.updateCommands(); for (Command command : commands.values()) { - if (command.isPrivateCommand()) continue; commandListUpdateAction = commandListUpdateAction.addCommands(command.getCommandData()); LOGGER.debug("Registered global command: {}", command.getCommandData().getName()); } @@ -69,31 +67,7 @@ public class DiscordManager { updateAction.queue(); } - public void setDoorStatus(Status status) { - ArrayList notified = Main.getDatabaseManager().getAllNotifiers(); - - for (DatabaseManager.Notified notifiedEntry : notified) { - try { - Message message = getMessage(notifiedEntry.channelId(), notifiedEntry.messageId()); - switch (status) { - case OPEN: - message.editMessageEmbeds(Embeds.createOpenLabStatus()).queue(); - break; - case CLOSED: - message.editMessageEmbeds(Embeds.createClosedLabStatus()).queue(); - break; - case UNKNOWN: - message.editMessageEmbeds(Embeds.createUnknownLabStatus()).queue(); - break; - } - } catch (Exception e) { - LOGGER.error("setDoorStatus: Failed to edit message: {}", e.getMessage()); - Main.getDatabaseManager().deleteNotifier(notifiedEntry.guildId()); - } - } - } - - private Message getMessage(String channelID, String messageID) { + public Message getMessage(String channelID, String messageID) { return jda.getTextChannelById(channelID).retrieveMessageById(messageID).complete(); } @@ -104,17 +78,4 @@ public class DiscordManager { public JDA getJDA() { return jda; } - - public enum Status { - OPEN(0), CLOSED(1), UNKNOWN(2); - - private final int code; - Status(int code) { this.code = code; } - public static Status fromCode(int code) { - for (Status s : Status.values()) { - if (s.code == code) return s; - } - throw new IllegalArgumentException("Invalid code: " + code); - } - } } diff --git a/src/main/java/tech/allydoes/discord/commands/SaveChannelCommand.java b/src/main/java/tech/allydoes/discord/commands/SaveChannelCommand.java index 7d865c2..e7216c6 100644 --- a/src/main/java/tech/allydoes/discord/commands/SaveChannelCommand.java +++ b/src/main/java/tech/allydoes/discord/commands/SaveChannelCommand.java @@ -9,6 +9,7 @@ import net.dv8tion.jda.api.interactions.commands.build.SlashCommandData; import tech.allydoes.Main; import tech.allydoes.discord.Command; import tech.allydoes.discord.Embeds; +import tech.allydoes.door.DoorStatus; public class SaveChannelCommand implements Command { @Override @@ -17,11 +18,6 @@ public class SaveChannelCommand implements Command { .setDefaultPermissions(DefaultMemberPermissions.enabledFor(Permission.BAN_MEMBERS)); } - @Override - public boolean isPrivateCommand() { - return false; - } - @Override public void processSlashCommandInteractionEvent(SlashCommandInteractionEvent event) { event.deferReply(true).queue((interactionHook) -> { @@ -30,6 +26,7 @@ public class SaveChannelCommand implements Command { String channelId = event.getChannel().getId(); String messageId = embedMessage.getId(); Main.getDatabaseManager().putNotifier(guildId, channelId, messageId); + DoorStatus.setDoorStatus(DoorStatus.getCurrentStatus()); }); event.getHook().editOriginal("Channel saved!").queue(); }); diff --git a/src/main/java/tech/allydoes/door/DoorStatus.java b/src/main/java/tech/allydoes/door/DoorStatus.java new file mode 100644 index 0000000..5ab64ec --- /dev/null +++ b/src/main/java/tech/allydoes/door/DoorStatus.java @@ -0,0 +1,57 @@ +package tech.allydoes.door; + +import net.dv8tion.jda.api.entities.Message; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import tech.allydoes.Main; +import tech.allydoes.database.DatabaseManager; +import tech.allydoes.discord.Embeds; + +import java.util.ArrayList; + +public class DoorStatus { + public static final Logger LOGGER = LogManager.getLogger(DoorStatus.class); + private static Status currentStatus; + + public static void setDoorStatus(DoorStatus.Status status) { + currentStatus = status; + ArrayList notified = Main.getDatabaseManager().getAllNotifiers(); + + for (DatabaseManager.Notified notifiedEntry : notified) { + try { + Message message = Main.getDiscordManager().getMessage(notifiedEntry.channelId(), notifiedEntry.messageId()); + switch (status) { + case OPEN: + message.editMessageEmbeds(Embeds.createOpenLabStatus()).queue(); + break; + case CLOSED: + message.editMessageEmbeds(Embeds.createClosedLabStatus()).queue(); + break; + case UNKNOWN: + message.editMessageEmbeds(Embeds.createUnknownLabStatus()).queue(); + break; + } + } catch (Exception e) { + LOGGER.error("setDoorStatus: Failed to edit message: {}", e.getMessage()); + Main.getDatabaseManager().deleteNotifier(notifiedEntry.guildId()); + } + } + } + + public static Status getCurrentStatus() { + return currentStatus; + } + + public enum Status { + OPEN(0), CLOSED(1), UNKNOWN(2); + + private final int code; + Status(int code) { this.code = code; } + public static Status fromCode(int code) { + for (Status s : Status.values()) { + if (s.code == code) return s; + } + throw new IllegalArgumentException("Invalid code: " + code); + } + } +} diff --git a/src/main/java/tech/allydoes/web/POST/PostStatus.java b/src/main/java/tech/allydoes/web/POST/PostStatus.java index 87024eb..48a4d70 100644 --- a/src/main/java/tech/allydoes/web/POST/PostStatus.java +++ b/src/main/java/tech/allydoes/web/POST/PostStatus.java @@ -7,20 +7,21 @@ import io.netty.handler.codec.http.FullHttpRequest; import io.netty.handler.codec.http.HttpResponseStatus; import tech.allydoes.Main; import tech.allydoes.discord.DiscordManager; +import tech.allydoes.door.DoorStatus; import tech.allydoes.web.RequestHandler; import java.util.List; import java.util.Map; public class PostStatus implements RequestHandler { - public static String STATUS = "status"; + public static final String STATUS = "status"; @Override public ChannelFuture processRequest(ChannelHandlerContext channelHandlerContext, FullHttpRequest request, Map> parameters) { int statusInt = Integer.parseInt(parameters.get(STATUS).getFirst()); - DiscordManager.Status status = DiscordManager.Status.fromCode(statusInt); + DoorStatus.Status status = DoorStatus.Status.fromCode(statusInt); - Main.getDiscordManager().setDoorStatus(status); + DoorStatus.setDoorStatus(status); return channelHandlerContext.writeAndFlush(new DefaultFullHttpResponse(request.protocolVersion(), HttpResponseStatus.OK)); }