diff options
| author | Yukai Shan <yukais6@uci.edu> | 2023-04-13 11:39:09 -0700 |
|---|---|---|
| committer | Yukai Shan <yukais6@uci.edu> | 2023-04-13 11:39:09 -0700 |
| commit | a98b31ae191dddf4fea26702365b8540dfa12b7b (patch) | |
| tree | 5609db7705dd2ccb1a5ecd590a83ea624a4d54fb | |
| parent | 5093c8a64bb77c0940f026023cbae878d9af53de (diff) | |
Implemented configuring channel feeds using /commands
| -rw-r--r-- | src/main/java/commands/CommandManager.java | 35 | ||||
| -rw-r--r-- | src/main/java/commands/StatusHandler.java | 30 | ||||
| -rw-r--r-- | src/main/java/fileutils/UpcomingChannelsManager.java | 20 |
3 files changed, 71 insertions, 14 deletions
diff --git a/src/main/java/commands/CommandManager.java b/src/main/java/commands/CommandManager.java index 03de1f5..34896bb 100644 --- a/src/main/java/commands/CommandManager.java +++ b/src/main/java/commands/CommandManager.java @@ -1,6 +1,7 @@ package commands; import builders.ScheduleMessageBuilder; +import fileutils.UpcomingChannelsManager; import net.dv8tion.jda.api.entities.MessageEmbed; import net.dv8tion.jda.api.events.interaction.SlashCommandEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; @@ -11,9 +12,11 @@ import java.util.ArrayList; public class CommandManager extends ListenerAdapter { ScheduleHandler scheduleHandler; ScheduleMessageBuilder scb; + UpcomingChannelsManager ucm; public CommandManager(String holodexAPIKey) { scheduleHandler = new ScheduleHandler(holodexAPIKey); scb = new ScheduleMessageBuilder(); + ucm = new UpcomingChannelsManager(); System.out.println("CommandManager initialized"); } @Override @@ -21,10 +24,21 @@ public class CommandManager extends ListenerAdapter { String command = e.getName(); MessageEmbed scheduleMessage; switch (command) { + case "configure": + String type = e.getOption("type").getAsString(); + String id = e.getOption("id").getAsString(); + long discordChannelId = e.getChannel().getIdLong(); + if (checkValidConfig(type, id) == false){ + e.reply("Sorry, I couldn't find any information on that channel. Please check the ID you provided").queue(); + return; + } + ucm.addNewEntry(type, id, Long.toString(discordChannelId)); + e.reply("Successfully added " + type + " " + id + " feed to this channel. Please restart the bot for this to take effect").queue(); + break; case "schedule-channel": String channelId = e.getOption("channel-id").getAsString(); if (scheduleHandler.channelExists(channelId) == false) { - e.reply("Sorry, I couldn't find any information on that channel. Please ensure it matches Holodex's spelling").queue(); + e.reply("Sorry, I couldn't find any information on that channel. Please check the ID you provided").queue(); return; } scheduleMessage = scb.buildLiveAndUpcomingMessage(scheduleHandler.getScheduleChannelId(channelId, 10)); @@ -64,4 +78,23 @@ public class CommandManager extends ListenerAdapter { return messageEmbeds; } + public boolean checkValidConfig(String type, String id){ + switch (type) { + case "org": + if (scheduleHandler.organizationExists(id) == false) { + return false; + } + break; + case "channel": + if (scheduleHandler.channelExists(id) == false) { + return false; + } + break; + default: + System.out.println("Unknown type"); + throw new IllegalArgumentException("Unknown type"); + } + return true; + } + } diff --git a/src/main/java/commands/StatusHandler.java b/src/main/java/commands/StatusHandler.java index 814f71f..f6631d2 100644 --- a/src/main/java/commands/StatusHandler.java +++ b/src/main/java/commands/StatusHandler.java @@ -1,37 +1,41 @@ package commands; + import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.interactions.commands.OptionType; import net.dv8tion.jda.api.interactions.commands.build.CommandData; +import net.dv8tion.jda.api.interactions.commands.build.OptionData; public class StatusHandler { JDA jda; + public StatusHandler(JDA jda) { this.jda = jda; } - public void updateSlashCommands(){ + + public void updateSlashCommands() { System.out.println("Adding slash commands"); jda.upsertCommand(new CommandData("schedule", "Shows upcoming streams and events for a given organization") - .addOption(OptionType.STRING, "organization", - "Holodex Organization Name (e.g Hololive, Nijisanji, Phase Connect, PRISM, Production Kawaii)", - true)) + .addOption(OptionType.STRING, "organization", + "Holodex Organization Name (e.g Hololive, Nijisanji, Phase Connect, PRISM, Production Kawaii)", + true)) .queue(); jda.upsertCommand(new CommandData("schedule-channel", "Shows upcoming streams and events for a given channel ID") - .addOption(OptionType.STRING, "channel-id", - "YouTube Channel ID (e.g UCp6993wxpyDPHUpavwDFqgg)", - true)) - .queue(); - jda.upsertCommand(new CommandData("configure-stream-channel", "Sets channel to be updated with live and upcoming streams for the channel ID provided") - .addOption(OptionType.STRING,"channel-id", "YouTube Channel ID (e.g UCp6993wxpyDPHUpavwDFqgg)", true)) + .addOption(OptionType.STRING, "channel-id", + "YouTube Channel ID (e.g UCp6993wxpyDPHUpavwDFqgg)", + true)) .queue(); - jda.upsertCommand(new CommandData("configure-org-channel", "Sets channel to be updated with live and upcoming streams for the organization provided") - .addOption(OptionType.STRING,"organization", "Holodex Organization Name (e.g Hololive, Nijisanji, Phase Connect, PRISM, Production Kawaii)", true)) + jda.upsertCommand(new CommandData("configure", "Sets channel to be updated with live and upcoming streams for the organization provided") + .addOptions(new OptionData(OptionType.STRING, "type", "Individual Channel or Organization", true) + .addChoice("Channel", "channel") + .addChoice("Organization", "org")) + .addOption(OptionType.STRING, "id", "The name of the organization or the channel ID", true)) .queue(); } - public void purgeSlashCommands(){ + public void purgeSlashCommands() { System.out.println("Purging all slash commands"); jda.retrieveCommands().queue(commands -> { for (int i = 0; i < commands.size(); i++) { diff --git a/src/main/java/fileutils/UpcomingChannelsManager.java b/src/main/java/fileutils/UpcomingChannelsManager.java new file mode 100644 index 0000000..7c8ade7 --- /dev/null +++ b/src/main/java/fileutils/UpcomingChannelsManager.java @@ -0,0 +1,20 @@ +package fileutils; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; + +public class UpcomingChannelsManager { + public void addNewEntry(String type, String information, String discordChannelID){ + File f = new File("settings//upcomingChannels.txt"); + try { + System.out.printf("Written data to upcomingChannels.txt"); + FileWriter fw = new FileWriter(f, true); + fw.write(type + ":" + information + ":" + discordChannelID+"\n"); + fw.close(); + } + catch(IOException e){ + System.out.println("Unable to open upcomingChannels.txt for writing"); + } + } +} |
