diff --git a/build.gradle b/build.gradle index b5118c8..d548c0f 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { id "io.freefair.lombok" version "6.2.0" } -mainClassName = 'codes.ztereohype.ztereomusic.Bot' +mainClassName = 'codes.ztereohype.ztereomusic.ZtereoMUSIC' version '0.0.1' diff --git a/src/main/java/codes/ztereohype/ztereomusic/Bot.java b/src/main/java/codes/ztereohype/ztereomusic/Bot.java deleted file mode 100644 index c5ed82b..0000000 --- a/src/main/java/codes/ztereohype/ztereomusic/Bot.java +++ /dev/null @@ -1,68 +0,0 @@ -package codes.ztereohype.ztereomusic; - -import codes.ztereohype.ztereomusic.audio.GuildMusicPlayer; -import codes.ztereohype.ztereomusic.command.Command; -import codes.ztereohype.ztereomusic.command.commands.Ping; -import codes.ztereohype.ztereomusic.command.commands.Play; -import codes.ztereohype.ztereomusic.command.commands.Skip; -import codes.ztereohype.ztereomusic.database.Config; -import codes.ztereohype.ztereomusic.listeners.CommandListener; -import com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager; -import com.sedmelluq.discord.lavaplayer.player.DefaultAudioPlayerManager; -import com.sedmelluq.discord.lavaplayer.source.AudioSourceManagers; -import lombok.Getter; -import net.dv8tion.jda.api.JDA; -import net.dv8tion.jda.api.JDABuilder; - -import java.util.HashMap; -import java.util.Map; - -import static net.dv8tion.jda.api.requests.GatewayIntent.GUILD_MESSAGES; -import static net.dv8tion.jda.api.requests.GatewayIntent.GUILD_VOICE_STATES; - -public class Bot { - private static @Getter Config config; - private static @Getter JDA bot; - - private static @Getter final Map commandMap = new HashMap<>(); - private static @Getter final Map commandAliases = new HashMap<>(); - - public static AudioPlayerManager playerManager; - public static Map guildMusicPlayerMap = new HashMap<>(); - - public static void main(String[] args) throws Exception { - config = new Config("./config.json5"); - bot = JDABuilder.createDefault(config.getPropreties().get("token"), GUILD_MESSAGES, GUILD_VOICE_STATES).build().awaitReady(); - - setupAudio(); - setCommands(); - setListeners(); - } - - public static void setCommands() { - Ping ping = new Ping(); - commandMap.put(ping.getMeta().getName(), ping); - - Play play = new Play(); - commandMap.put(play.getMeta().getName(), play); - - Skip skip = new Skip(); - commandMap.put(skip.getMeta().getName(), skip); - - for (String commandName : commandMap.keySet()) { - for (String aliasName : commandMap.get(commandName).getMeta().getAliases()) { - commandAliases.put(aliasName, commandName); - } - } - } - - public static void setupAudio() { - playerManager = new DefaultAudioPlayerManager(); - AudioSourceManagers.registerRemoteSources(playerManager); - AudioSourceManagers.registerLocalSource(playerManager); - } - - public static void setListeners() { - bot.addEventListener(new CommandListener()); - } -} diff --git a/src/main/java/codes/ztereohype/ztereomusic/ZtereoMUSIC.java b/src/main/java/codes/ztereohype/ztereomusic/ZtereoMUSIC.java new file mode 100644 index 0000000..3b4d3c4 --- /dev/null +++ b/src/main/java/codes/ztereohype/ztereomusic/ZtereoMUSIC.java @@ -0,0 +1,90 @@ +package codes.ztereohype.ztereomusic; + +import codes.ztereohype.ztereomusic.audio.GuildMusicPlayer; +import codes.ztereohype.ztereomusic.command.Command; +import codes.ztereohype.ztereomusic.command.commands.Ping; +import codes.ztereohype.ztereomusic.command.commands.Play; +import codes.ztereohype.ztereomusic.command.commands.Skip; +import codes.ztereohype.ztereomusic.database.Config; +import codes.ztereohype.ztereomusic.listeners.CommandListener; +import com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager; +import com.sedmelluq.discord.lavaplayer.player.DefaultAudioPlayerManager; +import com.sedmelluq.discord.lavaplayer.source.AudioSourceManagers; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.Setter; +import lombok.SneakyThrows; +import net.dv8tion.jda.api.JDA; +import net.dv8tion.jda.api.JDABuilder; +import net.shadew.json.JsonSyntaxException; + +import javax.security.auth.login.LoginException; +import java.io.FileNotFoundException; +import java.util.HashMap; +import java.util.Map; + +import static net.dv8tion.jda.api.requests.GatewayIntent.GUILD_MESSAGES; +import static net.dv8tion.jda.api.requests.GatewayIntent.GUILD_VOICE_STATES; + +@Getter +@Setter(AccessLevel.PRIVATE) +public class ZtereoMUSIC { + public static final ZtereoMUSIC INSTANCE = new ZtereoMUSIC(); + + private final Map commandMap = new HashMap<>(); + private final Map commandAliases = new HashMap<>(); + + private Config config; + private JDA jda; + + private AudioPlayerManager playerManager; + private Map guildMusicPlayerMap = new HashMap<>(); + + private ZtereoMUSIC() { + } + + public static ZtereoMUSIC getInstance() { + return ZtereoMUSIC.INSTANCE; + } + + @SneakyThrows({ JsonSyntaxException.class, FileNotFoundException.class, LoginException.class, + InterruptedException.class }) + public static void main(String[] args) { + ZtereoMUSIC ztereoMUSIC = ZtereoMUSIC.getInstance(); + + ztereoMUSIC.setConfig(Config.loadFrom("./config.json5")); + ztereoMUSIC.setJda(JDABuilder.createDefault(ztereoMUSIC.getConfig().getPropreties().get("token"), GUILD_MESSAGES, + GUILD_VOICE_STATES).build().awaitReady()); + + ztereoMUSIC.setupAudio(); + ztereoMUSIC.setCommands(); + ztereoMUSIC.setListeners(); + } + + private void setCommands() { + Ping ping = new Ping(); + this.getCommandMap().put(ping.getMeta().getName(), ping); + + Play play = new Play(); + this.getCommandMap().put(play.getMeta().getName(), play); + + Skip skip = new Skip(); + this.getCommandMap().put(skip.getMeta().getName(), skip); + + for (String commandName : this.getCommandAliases().keySet()) { + for (String aliasName : this.getCommandMap().get(commandName).getMeta().getAliases()) { + this.getCommandAliases().put(aliasName, commandName); + } + } + } + + private void setupAudio() { + this.setPlayerManager(new DefaultAudioPlayerManager()); + AudioSourceManagers.registerRemoteSources(this.getPlayerManager()); + AudioSourceManagers.registerLocalSource(this.getPlayerManager()); + } + + private void setListeners() { + this.getJda().addEventListener(new CommandListener()); + } +} diff --git a/src/main/java/codes/ztereohype/ztereomusic/audio/GuildMusicPlayers.java b/src/main/java/codes/ztereohype/ztereomusic/audio/GuildMusicPlayers.java index 9dd24cb..f2906de 100644 --- a/src/main/java/codes/ztereohype/ztereomusic/audio/GuildMusicPlayers.java +++ b/src/main/java/codes/ztereohype/ztereomusic/audio/GuildMusicPlayers.java @@ -1,6 +1,6 @@ package codes.ztereohype.ztereomusic.audio; -import codes.ztereohype.ztereomusic.Bot; +import codes.ztereohype.ztereomusic.ZtereoMUSIC; import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.entities.MessageChannel; import net.dv8tion.jda.api.entities.VoiceChannel; @@ -14,14 +14,14 @@ public class GuildMusicPlayers { // If I get called in a different vc I delete the old manager if (!isInSameVC) { - Bot.guildMusicPlayerMap.remove(guildId); + ZtereoMUSIC.getInstance().getGuildMusicPlayerMap().remove(guildId); } - GuildMusicPlayer musicPlayer = Bot.guildMusicPlayerMap.get(guildId); + GuildMusicPlayer musicPlayer = ZtereoMUSIC.getInstance().getGuildMusicPlayerMap().get(guildId); if (musicPlayer == null) { - musicPlayer = new GuildMusicPlayer(Bot.playerManager, infoChannel); - Bot.guildMusicPlayerMap.put(guildId, musicPlayer); + musicPlayer = new GuildMusicPlayer(ZtereoMUSIC.getInstance().getPlayerManager(), infoChannel); + ZtereoMUSIC.getInstance().getGuildMusicPlayerMap().put(guildId, musicPlayer); guild.getAudioManager().openAudioConnection(requestedChannel); } @@ -33,7 +33,7 @@ public class GuildMusicPlayers { // stops player, disconnects from vc, and deletes the wrapper public static void removeGuildAudioPlayer(Guild guild) { long guildId = guild.getIdLong(); - GuildMusicPlayer musicPlayer = Bot.guildMusicPlayerMap.get(guildId); + GuildMusicPlayer musicPlayer = ZtereoMUSIC.getInstance().getGuildMusicPlayerMap().get(guildId); if (musicPlayer == null) return; @@ -41,6 +41,6 @@ public class GuildMusicPlayers { guild.getAudioManager().closeAudioConnection(); //todo: remove this when will be part of disconnection listener - Bot.guildMusicPlayerMap.remove(guildId); + ZtereoMUSIC.getInstance().getGuildMusicPlayerMap().remove(guildId); } } diff --git a/src/main/java/codes/ztereohype/ztereomusic/command/commands/Play.java b/src/main/java/codes/ztereohype/ztereomusic/command/commands/Play.java index f1c194c..3bbf0eb 100644 --- a/src/main/java/codes/ztereohype/ztereomusic/command/commands/Play.java +++ b/src/main/java/codes/ztereohype/ztereomusic/command/commands/Play.java @@ -1,6 +1,6 @@ package codes.ztereohype.ztereomusic.command.commands; -import codes.ztereohype.ztereomusic.Bot; +import codes.ztereohype.ztereomusic.ZtereoMUSIC; import codes.ztereohype.ztereomusic.audio.GuildMusicPlayer; import codes.ztereohype.ztereomusic.audio.GuildMusicPlayers; import codes.ztereohype.ztereomusic.command.Command; @@ -43,7 +43,7 @@ public class Play implements Command { VoiceChannel voiceChannel = author.getVoiceState().getChannel(); MessageChannel messageChannel = messageEvent.getChannel(); AudioManager manager = guild.getAudioManager(); - AudioPlayerManager playerManager = Bot.playerManager; + AudioPlayerManager playerManager = ZtereoMUSIC.getInstance().getPlayerManager(); // check if args merged are/have url, if so try to feed it into lava, else try to youtube api the fuck out of it. String mergedArgs = String.join(" ", args); diff --git a/src/main/java/codes/ztereohype/ztereomusic/database/Config.java b/src/main/java/codes/ztereohype/ztereomusic/database/Config.java index ea44982..e8c891d 100644 --- a/src/main/java/codes/ztereohype/ztereomusic/database/Config.java +++ b/src/main/java/codes/ztereohype/ztereomusic/database/Config.java @@ -3,22 +3,29 @@ package codes.ztereohype.ztereomusic.database; import lombok.Getter; import net.shadew.json.Json; import net.shadew.json.JsonNode; +import net.shadew.json.JsonSyntaxException; import java.io.File; +import java.io.FileNotFoundException; import java.util.HashMap; import java.util.Map; public class Config { - private @Getter final Map propreties = new HashMap<>(); - private final String path; + private @Getter Map propreties = new HashMap<>(); + private String path; + + public static Config loadFrom(String path) throws JsonSyntaxException, FileNotFoundException { + Config config = new Config(); - public Config(String pathname) throws Exception { Json json5 = Json.json5(); - JsonNode tree = json5.parse(new File(pathname)); - this.path = pathname; + JsonNode tree = json5.parse(new File(path)); + + config.path = path; for (String key : tree.keys()) { - propreties.put(key, tree.get(key).asString()); + config.getPropreties().put(key, tree.get(key).asString()); } + + return config; } } \ No newline at end of file diff --git a/src/main/java/codes/ztereohype/ztereomusic/listeners/CommandListener.java b/src/main/java/codes/ztereohype/ztereomusic/listeners/CommandListener.java index 292dc7c..b6ab840 100644 --- a/src/main/java/codes/ztereohype/ztereomusic/listeners/CommandListener.java +++ b/src/main/java/codes/ztereohype/ztereomusic/listeners/CommandListener.java @@ -1,6 +1,6 @@ package codes.ztereohype.ztereomusic.listeners; -import codes.ztereohype.ztereomusic.Bot; +import codes.ztereohype.ztereomusic.ZtereoMUSIC; import codes.ztereohype.ztereomusic.command.Command; import net.dv8tion.jda.api.entities.Message; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; @@ -12,9 +12,9 @@ import java.util.Map; public class CommandListener extends ListenerAdapter { // TODO: load prefix from a config - private static final String PREFIX = Bot.getConfig().getPropreties().get("prefix"); - private static final Map COMMAND_MAP = Bot.getCommandMap(); - private static final Map COMMAND_ALIASES = Bot.getCommandAliases(); + private static final String PREFIX = ZtereoMUSIC.getInstance().getConfig().getPropreties().get("prefix"); + private static final Map COMMAND_MAP = ZtereoMUSIC.getInstance().getCommandMap(); + private static final Map COMMAND_ALIASES = ZtereoMUSIC.getInstance().getCommandAliases(); @Override public void onMessageReceived(@Nonnull MessageReceivedEvent event) {