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; + } +}