diff --git a/.classpath b/.classpath
index 7159d62..0bd885b 100644
--- a/.classpath
+++ b/.classpath
@@ -1,7 +1,11 @@
-
+
+
+
+
+
@@ -20,5 +24,6 @@
+
diff --git a/assets/config.csv b/assets/config.csv
index 76a991d..ec05d59 100644
--- a/assets/config.csv
+++ b/assets/config.csv
@@ -38,6 +38,7 @@
"Localized Commands","leaderboard",""
"Localized Commands","map",""
"Localized Commands","mod",""
+"Localized Commands","music",""
"Localized Commands","perish, thenperish",""
"Localized Commands","ping",""
"Localized Commands","poll",""
@@ -191,6 +192,7 @@
"Localized Strings","MapSeed","Seed"
"Localized Strings","MapVersion","Using mapgen v0.1"
"Localized Strings","MapWidth",""
+"Localized Strings","MusicInfo",""
"Localized Strings","PerishInfo","Adds a red, 'a n g e r y' overlay to your icon or the icon of a friend you mentioned"
"Localized Strings","PingInfo","Will respond with Pong!"
"Localized Strings","PingResponse","Pong!"
@@ -296,6 +298,7 @@
"Command Enabler","leaderboard","1"
"Command Enabler","map","1"
"Command Enabler","mod","1"
+"Command Enabler","music","1"
"Command Enabler","perish, thenperish","1"
"Command Enabler","ping","1"
"Command Enabler","poll","1"
diff --git a/lib/google-api-services-youtube-v3-rev212-1.25.0.jar b/lib/google-api-services-youtube-v3-rev212-1.25.0.jar
new file mode 100644
index 0000000..c267f90
Binary files /dev/null and b/lib/google-api-services-youtube-v3-rev212-1.25.0.jar differ
diff --git a/src/commands/mod/SubCommandBan.java b/src/commands/mod/SubCommandBan.java
index 2741885..b9b61e6 100644
--- a/src/commands/mod/SubCommandBan.java
+++ b/src/commands/mod/SubCommandBan.java
@@ -11,7 +11,7 @@ import dataStructures.UserInput;
public class SubCommandBan extends SubCommand
{
-public SubCommandBan(KittyRole level, KittyRating rating) { super(level, rating); }
+ public SubCommandBan(KittyRole level, KittyRating rating) { super(level, rating); }
@Override
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
diff --git a/src/commands/music/CommandMusicMain.java b/src/commands/music/CommandMusicMain.java
new file mode 100644
index 0000000..7eb3318
--- /dev/null
+++ b/src/commands/music/CommandMusicMain.java
@@ -0,0 +1,26 @@
+package commands.music;
+
+import core.Command;
+import core.LocStrings;
+import core.SubCommandFramework;
+import dataStructures.*;
+
+public class CommandMusicMain extends Command
+{
+ SubCommandFramework framework = new SubCommandFramework();
+ public CommandMusicMain(KittyRole level, KittyRating rating)
+ {
+ super(level, rating);
+ framework.addCommand("join", new SubCommandJoin(KittyRole.General, KittyRating.Safe));
+ framework.addCommand("leave", new SubCommandLeave(KittyRole.General, KittyRating.Safe));
+ }
+
+ @Override
+ public String getHelpText() { return LocStrings.stub("MusicInfo"); }
+
+ @Override
+ public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
+ {
+ framework.run(guild, channel, user, input).Call(res);
+ }
+}
diff --git a/src/commands/music/SubCommandJoin.java b/src/commands/music/SubCommandJoin.java
new file mode 100644
index 0000000..d6eeb8c
--- /dev/null
+++ b/src/commands/music/SubCommandJoin.java
@@ -0,0 +1,21 @@
+package commands.music;
+
+import core.SubCommand;
+import core.SubCommandFormattable;
+import dataStructures.KittyChannel;
+import dataStructures.KittyGuild;
+import dataStructures.KittyRating;
+import dataStructures.KittyRole;
+import dataStructures.KittyUser;
+import dataStructures.UserInput;
+
+public class SubCommandJoin extends SubCommand
+{
+ public SubCommandJoin(KittyRole level, KittyRating rating) { super(level, rating); }
+
+ @Override
+ public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
+ {
+ return new SubCommandFormattable("" + guild.audio.joinChannel(input.args));
+ }
+}
diff --git a/src/commands/music/SubCommandLeave.java b/src/commands/music/SubCommandLeave.java
new file mode 100644
index 0000000..e7078aa
--- /dev/null
+++ b/src/commands/music/SubCommandLeave.java
@@ -0,0 +1,21 @@
+package commands.music;
+
+import core.SubCommand;
+import core.SubCommandFormattable;
+import dataStructures.KittyChannel;
+import dataStructures.KittyGuild;
+import dataStructures.KittyRating;
+import dataStructures.KittyRole;
+import dataStructures.KittyUser;
+import dataStructures.UserInput;
+
+public class SubCommandLeave extends SubCommand
+{
+ public SubCommandLeave(KittyRole level, KittyRating rating) { super(level, rating); }
+
+ @Override
+ public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
+ {
+ return new SubCommandFormattable("" + guild.audio.leaveChannel());
+ }
+}
\ No newline at end of file
diff --git a/src/core/CommandManager.java b/src/core/CommandManager.java
index 61ca7d3..c1441c4 100644
--- a/src/core/CommandManager.java
+++ b/src/core/CommandManager.java
@@ -48,6 +48,7 @@ import commands.general.CommandWolfram;
import commands.general.CommandYeet;
import commands.guildrole.CommandGuildRoleMain;
import commands.mod.CommandModMain;
+import commands.music.CommandMusicMain;
import commands.poll.CommandPollMain;
import commands.raffle.CommandRaffleMain;
import dataStructures.KittyChannel;
@@ -152,7 +153,7 @@ public class CommandManager
this.register(LocCommands.stub("character"), new CommandCharacterMain(KittyRole.General, KittyRating.Safe));
this.register(LocCommands.stub("raffle"), new CommandRaffleMain(KittyRole.General, KittyRating.Safe));
this.register(LocCommands.stub("poll"), new CommandPollMain(KittyRole.General, KittyRating.Safe));
-
+ this.register(LocCommands.stub("music"), new CommandMusicMain(KittyRole.General, KittyRating.Safe));
}
// Allows the command manager to keep track of a command. Takes a pair (the un-localized and localzied commands)
diff --git a/src/core/ObjectBuilderFactory.java b/src/core/ObjectBuilderFactory.java
index db66cc3..376e06a 100644
--- a/src/core/ObjectBuilderFactory.java
+++ b/src/core/ObjectBuilderFactory.java
@@ -17,6 +17,7 @@ import net.dv8tion.jda.core.entities.*;
import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent;
import offline.Ref;
import utils.AdminControl;
+import utils.AudioUtils;
import utils.GlobalLog;
import utils.LogFilter;
@@ -140,7 +141,7 @@ public class ObjectBuilderFactory
else
{
// Construct a new guild with defaults
- guild = new KittyGuild(uid, new AdminControl(event.getGuild()), emotesString);
+ guild = new KittyGuild(uid, new AdminControl(event.getGuild()), emotesString, new AudioUtils(event.getGuild()));
DatabaseManager.instance.globalRegister(guild);
guildCache.put(uid, guild);
}
diff --git a/src/dataStructures/KittyGuild.java b/src/dataStructures/KittyGuild.java
index 155679e..209c69a 100644
--- a/src/dataStructures/KittyGuild.java
+++ b/src/dataStructures/KittyGuild.java
@@ -5,6 +5,7 @@ import java.util.ArrayList;
import core.DatabaseManager;
import core.DatabaseTrackedObject;
import utils.AdminControl;
+import utils.AudioUtils;
// Context for a given guild for kittybot. Primarily designed to hold guild-specific settings.
public class KittyGuild extends DatabaseTrackedObject
@@ -21,6 +22,7 @@ public class KittyGuild extends DatabaseTrackedObject
public ArrayList emoji = new ArrayList();
public ArrayList choices = new ArrayList();
public AdminControl control;
+ public AudioUtils audio;
public ArrayList raffleUsersUnchosen = new ArrayList();
public ArrayList raffleUsersChosen = new ArrayList();
@@ -40,7 +42,7 @@ public class KittyGuild extends DatabaseTrackedObject
}
// Default content for a guild
- public KittyGuild(String uniqueID, AdminControl adminControl, ArrayList emoji)
+ public KittyGuild(String uniqueID, AdminControl adminControl, ArrayList emoji, AudioUtils audio)
{
super(uniqueID);
this.uniqueID = uniqueID;
@@ -52,6 +54,7 @@ public class KittyGuild extends DatabaseTrackedObject
this.contentRating = KittyRating.Safe;
this.polling = false;
this.emoji = emoji;
+ this.audio = audio;
setCommandIndicator("!");
}
diff --git a/src/utils/AudioUtils.java b/src/utils/AudioUtils.java
new file mode 100644
index 0000000..02e3b6d
--- /dev/null
+++ b/src/utils/AudioUtils.java
@@ -0,0 +1,38 @@
+package utils;
+
+import net.dv8tion.jda.core.entities.Guild;
+import net.dv8tion.jda.core.entities.VoiceChannel;
+import net.dv8tion.jda.core.managers.AudioManager;
+
+public class AudioUtils
+{
+ private Guild guild;
+ AudioManager audio;
+ public AudioUtils(Guild guild)
+ {
+ this.guild = guild;
+ audio = guild.getAudioManager();
+ }
+
+ public boolean joinChannel(String channelName)
+ {
+ VoiceChannel channel = null;
+ channel = guild.getVoiceChannelsByName(channelName, true).get(0);
+ if(channel != null)
+ {
+ audio.openAudioConnection(channel);
+ return true;
+ }
+ return false;
+ }
+
+ public boolean leaveChannel()
+ {
+ if(audio.isConnected())
+ {
+ audio.closeAudioConnection();
+ return true;
+ }
+ return false;
+ }
+}