aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYukai Shan <yukais6@uci.edu>2023-04-13 11:39:09 -0700
committerYukai Shan <yukais6@uci.edu>2023-04-13 11:39:09 -0700
commita98b31ae191dddf4fea26702365b8540dfa12b7b (patch)
tree5609db7705dd2ccb1a5ecd590a83ea624a4d54fb
parent5093c8a64bb77c0940f026023cbae878d9af53de (diff)
Implemented configuring channel feeds using /commands
-rw-r--r--src/main/java/commands/CommandManager.java35
-rw-r--r--src/main/java/commands/StatusHandler.java30
-rw-r--r--src/main/java/fileutils/UpcomingChannelsManager.java20
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");
+ }
+ }
+}
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage