From 0fa9ceef8e7cd1d884ea8e9ab40ed078c697af63 Mon Sep 17 00:00:00 2001 From: Reperak Date: Sun, 7 Nov 2021 20:50:56 -0600 Subject: [PATCH 1/3] Clean up static abuse, use traditional OOP style --- .../codes/ztereohype/ztereomusic/Bot.java | 66 ++++++++++++------- .../ztereomusic/audio/GuildMusicPlayers.java | 12 ++-- .../ztereomusic/command/commands/Play.java | 2 +- .../listeners/CommandListener.java | 6 +- 4 files changed, 51 insertions(+), 35 deletions(-) diff --git a/src/main/java/codes/ztereohype/ztereomusic/Bot.java b/src/main/java/codes/ztereohype/ztereomusic/Bot.java index c5ed82b..2447097 100644 --- a/src/main/java/codes/ztereohype/ztereomusic/Bot.java +++ b/src/main/java/codes/ztereohype/ztereomusic/Bot.java @@ -10,7 +10,9 @@ 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 net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.JDABuilder; @@ -20,49 +22,63 @@ 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 Bot { - private static @Getter Config config; - private static @Getter JDA bot; + public static final Bot INSTANCE = new Bot(); - private static @Getter final Map commandMap = new HashMap<>(); - private static @Getter final Map commandAliases = new HashMap<>(); + private final Map commandMap = new HashMap<>(); + private final Map commandAliases = new HashMap<>(); - public static AudioPlayerManager playerManager; - public static Map guildMusicPlayerMap = new HashMap<>(); + private Config config; + private JDA jda; - 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(); + private AudioPlayerManager playerManager; + private Map guildMusicPlayerMap = new HashMap<>(); - setupAudio(); - setCommands(); - setListeners(); + private Bot() { } - public static void setCommands() { + public static Bot getInstance() { + return Bot.INSTANCE; + } + + public static void main(String[] args) throws Exception { + Bot bot = Bot.getInstance(); + + bot.setConfig(new Config("./config.json5")); + bot.setJda(JDABuilder.createDefault(bot.getConfig().getPropreties().get("token"), GUILD_MESSAGES, + GUILD_VOICE_STATES).build().awaitReady()); + + bot.setupAudio(); + bot.setCommands(); + bot.setListeners(); + } + + private void setCommands() { Ping ping = new Ping(); - commandMap.put(ping.getMeta().getName(), ping); + this.getCommandMap().put(ping.getMeta().getName(), ping); Play play = new Play(); - commandMap.put(play.getMeta().getName(), play); + this.getCommandMap().put(play.getMeta().getName(), play); Skip skip = new Skip(); - commandMap.put(skip.getMeta().getName(), skip); + this.getCommandMap().put(skip.getMeta().getName(), skip); - for (String commandName : commandMap.keySet()) { - for (String aliasName : commandMap.get(commandName).getMeta().getAliases()) { - commandAliases.put(aliasName, commandName); + for (String commandName : this.getCommandAliases().keySet()) { + for (String aliasName : this.getCommandMap().get(commandName).getMeta().getAliases()) { + this.getCommandAliases().put(aliasName, commandName); } } } - public static void setupAudio() { - playerManager = new DefaultAudioPlayerManager(); - AudioSourceManagers.registerRemoteSources(playerManager); - AudioSourceManagers.registerLocalSource(playerManager); + private void setupAudio() { + this.setPlayerManager(new DefaultAudioPlayerManager()); + AudioSourceManagers.registerRemoteSources(this.getPlayerManager()); + AudioSourceManagers.registerLocalSource(this.getPlayerManager()); } - public static void setListeners() { - bot.addEventListener(new CommandListener()); + 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..9db3cdf 100644 --- a/src/main/java/codes/ztereohype/ztereomusic/audio/GuildMusicPlayers.java +++ b/src/main/java/codes/ztereohype/ztereomusic/audio/GuildMusicPlayers.java @@ -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); + Bot.getInstance().getGuildMusicPlayerMap().remove(guildId); } - GuildMusicPlayer musicPlayer = Bot.guildMusicPlayerMap.get(guildId); + GuildMusicPlayer musicPlayer = Bot.getInstance().getGuildMusicPlayerMap().get(guildId); if (musicPlayer == null) { - musicPlayer = new GuildMusicPlayer(Bot.playerManager, infoChannel); - Bot.guildMusicPlayerMap.put(guildId, musicPlayer); + musicPlayer = new GuildMusicPlayer(Bot.getInstance().getPlayerManager(), infoChannel); + Bot.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 = Bot.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); + Bot.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..4c83261 100644 --- a/src/main/java/codes/ztereohype/ztereomusic/command/commands/Play.java +++ b/src/main/java/codes/ztereohype/ztereomusic/command/commands/Play.java @@ -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 = Bot.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/listeners/CommandListener.java b/src/main/java/codes/ztereohype/ztereomusic/listeners/CommandListener.java index 292dc7c..e9f2407 100644 --- a/src/main/java/codes/ztereohype/ztereomusic/listeners/CommandListener.java +++ b/src/main/java/codes/ztereohype/ztereomusic/listeners/CommandListener.java @@ -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 = Bot.getInstance().getConfig().getPropreties().get("prefix"); + private static final Map COMMAND_MAP = Bot.getInstance().getCommandMap(); + private static final Map COMMAND_ALIASES = Bot.getInstance().getCommandAliases(); @Override public void onMessageReceived(@Nonnull MessageReceivedEvent event) { From d11b9a97a4f81ba17993638266bef5844a30879f Mon Sep 17 00:00:00 2001 From: Reperak Date: Sun, 7 Nov 2021 20:57:50 -0600 Subject: [PATCH 2/3] Use dedicated method for loading Config, clean exception types and handling --- .../codes/ztereohype/ztereomusic/Bot.java | 10 ++++++++-- .../ztereomusic/database/Config.java | 19 +++++++++++++------ 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/main/java/codes/ztereohype/ztereomusic/Bot.java b/src/main/java/codes/ztereohype/ztereomusic/Bot.java index 2447097..5b21cdc 100644 --- a/src/main/java/codes/ztereohype/ztereomusic/Bot.java +++ b/src/main/java/codes/ztereohype/ztereomusic/Bot.java @@ -13,9 +13,13 @@ 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; @@ -43,10 +47,12 @@ public class Bot { return Bot.INSTANCE; } - public static void main(String[] args) throws Exception { + @SneakyThrows({ JsonSyntaxException.class, FileNotFoundException.class, LoginException.class, + InterruptedException.class }) + public static void main(String[] args) { Bot bot = Bot.getInstance(); - bot.setConfig(new Config("./config.json5")); + bot.setConfig(Config.loadFrom("./config.json5")); bot.setJda(JDABuilder.createDefault(bot.getConfig().getPropreties().get("token"), GUILD_MESSAGES, GUILD_VOICE_STATES).build().awaitReady()); 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 From 087fa0f612e476d32ae47129463454f1dac5e480 Mon Sep 17 00:00:00 2001 From: Reperak Date: Sun, 7 Nov 2021 20:59:26 -0600 Subject: [PATCH 3/3] Rename 'Bot' -> 'ZtereoMUSIC' --- build.gradle | 2 +- .../{Bot.java => ZtereoMUSIC.java} | 24 +++++++++---------- .../ztereomusic/audio/GuildMusicPlayers.java | 14 +++++------ .../ztereomusic/command/commands/Play.java | 4 ++-- .../listeners/CommandListener.java | 8 +++---- 5 files changed, 26 insertions(+), 26 deletions(-) rename src/main/java/codes/ztereohype/ztereomusic/{Bot.java => ZtereoMUSIC.java} (80%) 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/ZtereoMUSIC.java similarity index 80% rename from src/main/java/codes/ztereohype/ztereomusic/Bot.java rename to src/main/java/codes/ztereohype/ztereomusic/ZtereoMUSIC.java index 5b21cdc..3b4d3c4 100644 --- a/src/main/java/codes/ztereohype/ztereomusic/Bot.java +++ b/src/main/java/codes/ztereohype/ztereomusic/ZtereoMUSIC.java @@ -28,8 +28,8 @@ import static net.dv8tion.jda.api.requests.GatewayIntent.GUILD_VOICE_STATES; @Getter @Setter(AccessLevel.PRIVATE) -public class Bot { - public static final Bot INSTANCE = new Bot(); +public class ZtereoMUSIC { + public static final ZtereoMUSIC INSTANCE = new ZtereoMUSIC(); private final Map commandMap = new HashMap<>(); private final Map commandAliases = new HashMap<>(); @@ -40,25 +40,25 @@ public class Bot { private AudioPlayerManager playerManager; private Map guildMusicPlayerMap = new HashMap<>(); - private Bot() { + private ZtereoMUSIC() { } - public static Bot getInstance() { - return Bot.INSTANCE; + public static ZtereoMUSIC getInstance() { + return ZtereoMUSIC.INSTANCE; } @SneakyThrows({ JsonSyntaxException.class, FileNotFoundException.class, LoginException.class, InterruptedException.class }) public static void main(String[] args) { - Bot bot = Bot.getInstance(); + ZtereoMUSIC ztereoMUSIC = ZtereoMUSIC.getInstance(); - bot.setConfig(Config.loadFrom("./config.json5")); - bot.setJda(JDABuilder.createDefault(bot.getConfig().getPropreties().get("token"), GUILD_MESSAGES, - GUILD_VOICE_STATES).build().awaitReady()); + ztereoMUSIC.setConfig(Config.loadFrom("./config.json5")); + ztereoMUSIC.setJda(JDABuilder.createDefault(ztereoMUSIC.getConfig().getPropreties().get("token"), GUILD_MESSAGES, + GUILD_VOICE_STATES).build().awaitReady()); - bot.setupAudio(); - bot.setCommands(); - bot.setListeners(); + ztereoMUSIC.setupAudio(); + ztereoMUSIC.setCommands(); + ztereoMUSIC.setListeners(); } private void setCommands() { diff --git a/src/main/java/codes/ztereohype/ztereomusic/audio/GuildMusicPlayers.java b/src/main/java/codes/ztereohype/ztereomusic/audio/GuildMusicPlayers.java index 9db3cdf..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.getInstance().getGuildMusicPlayerMap().remove(guildId); + ZtereoMUSIC.getInstance().getGuildMusicPlayerMap().remove(guildId); } - GuildMusicPlayer musicPlayer = Bot.getInstance().getGuildMusicPlayerMap().get(guildId); + GuildMusicPlayer musicPlayer = ZtereoMUSIC.getInstance().getGuildMusicPlayerMap().get(guildId); if (musicPlayer == null) { - musicPlayer = new GuildMusicPlayer(Bot.getInstance().getPlayerManager(), infoChannel); - Bot.getInstance().getGuildMusicPlayerMap().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.getInstance().getGuildMusicPlayerMap().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.getInstance().getGuildMusicPlayerMap().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 4c83261..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.getInstance().getPlayerManager(); + 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/listeners/CommandListener.java b/src/main/java/codes/ztereohype/ztereomusic/listeners/CommandListener.java index e9f2407..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.getInstance().getConfig().getPropreties().get("prefix"); - private static final Map COMMAND_MAP = Bot.getInstance().getCommandMap(); - private static final Map COMMAND_ALIASES = Bot.getInstance().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) {