diff --git a/pom.xml b/pom.xml index 88c2f64..a22d680 100644 --- a/pom.xml +++ b/pom.xml @@ -39,6 +39,17 @@ lavaplayer 1.3.77 + + com.fasterxml.jackson.core + jackson-core + 2.14.0 + + + com.fasterxml.jackson.core + jackson-databind + 2.14.0 + + org.slf4j diff --git a/src/main/java/com/bensherriff/siren/Config.java b/src/main/java/com/bensherriff/siren/Config.java new file mode 100644 index 0000000..1296ffd --- /dev/null +++ b/src/main/java/com/bensherriff/siren/Config.java @@ -0,0 +1,42 @@ +package com.bensherriff.siren; + +public class Config { + + private String token; + private String owner; + + private String prefix; + private int volume; + + public String getToken() { + return token; + } + + public void setToken(String token) { + this.token = token; + } + + public String getOwner() { + return owner; + } + + public void setOwner(String owner) { + this.owner = owner; + } + + public String getPrefix() { + return prefix; + } + + public void setPrefix(String prefix) { + this.prefix = prefix; + } + + public int getVolume() { + return volume; + } + + public void setVolume(int volume) { + this.volume = volume; + } +} diff --git a/src/main/java/com/bensherriff/siren/ConfigManager.java b/src/main/java/com/bensherriff/siren/ConfigManager.java new file mode 100644 index 0000000..62f5298 --- /dev/null +++ b/src/main/java/com/bensherriff/siren/ConfigManager.java @@ -0,0 +1,19 @@ +package com.bensherriff.siren; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.io.IOException; +import java.io.InputStream; + +public class ConfigManager { + private static final Logger LOGGER = LogManager.getLogger(ConfigManager.class); + private final ObjectMapper mapper = new ObjectMapper(); + + public Config load() throws IOException { + try(InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("config.json")) { + return mapper.readValue(inputStream, Config.class); + } + } +} diff --git a/src/main/java/com/bensherriff/siren/MusicBot.java b/src/main/java/com/bensherriff/siren/MusicBot.java index 6a137ea..5eb91ff 100644 --- a/src/main/java/com/bensherriff/siren/MusicBot.java +++ b/src/main/java/com/bensherriff/siren/MusicBot.java @@ -14,26 +14,44 @@ import net.dv8tion.jda.api.entities.VoiceChannel; import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; import net.dv8tion.jda.api.managers.AudioManager; +import net.dv8tion.jda.api.requests.GatewayIntent; +import net.dv8tion.jda.api.utils.cache.CacheFlag; +import javax.security.auth.login.LoginException; +import java.io.IOException; +import java.util.Arrays; 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 MusicBot extends ListenerAdapter { - public static void main(String[] args) throws Exception { + private final static GatewayIntent[] INTENTS = { + GatewayIntent.DIRECT_MESSAGES, GatewayIntent.GUILD_MESSAGES, GatewayIntent.GUILD_MESSAGE_REACTIONS, + GatewayIntent.GUILD_VOICE_STATES + }; + private final AudioPlayerManager playerManager; + private final Map musicManagers; + private final Config config; - JDABuilder.create("OTMyMzAxMjQ4NTQ2MzYxMzQ2.YeQ_Mg.n4H8Cl3dQ1u5aFL1ZvTmfcGwpEY", GUILD_MESSAGES, GUILD_VOICE_STATES) - .addEventListeners(new MusicBot()) + public static void main(String[] args) throws Exception { + start(); + } + + private static void start() throws IOException, LoginException { + ConfigManager configManager = new ConfigManager(); + Config config = configManager.load(); + MusicBot musicBot = new MusicBot(config); + + JDABuilder.create(config.getToken(), Arrays.asList(INTENTS)) + .enableCache(CacheFlag.MEMBER_OVERRIDES, CacheFlag.VOICE_STATE) + .disableCache(CacheFlag.ACTIVITY, CacheFlag.CLIENT_STATUS, CacheFlag.EMOTE) + .addEventListeners(musicBot) + .setBulkDeleteSplittingEnabled(true) .build(); } - private final AudioPlayerManager playerManager; - private final Map musicManagers; - - private MusicBot() { + private MusicBot(Config config) { this.musicManagers = new HashMap<>(); + this.config = config; this.playerManager = new DefaultAudioPlayerManager(); AudioSourceManagers.registerRemoteSources(playerManager); @@ -66,7 +84,9 @@ public class MusicBot extends ListenerAdapter { } else if ("!skip".equals(command[0])) { skipTrack(channel); } else if ("!stop".equals(command[0])) { - + stop(channel); + } else if ("!volume".equals(command[0])) { + changeVolume(channel, command[1]); } super.onGuildMessageReceived(event); @@ -110,10 +130,16 @@ public class MusicBot extends ListenerAdapter { private void play(Guild guild, MusicManager musicManager, AudioTrack track) { connectToFirstVoiceChannel(guild.getAudioManager()); - musicManager.scheduler.queue(track); } + private void stop(TextChannel channel) { + MusicManager musicManager = getGuildAudioPlayer(channel.getGuild()); + musicManager.player.stopTrack(); + channel.getGuild().getAudioManager().closeAudioConnection(); + channel.sendMessage("Stopping music").queue(); + } + private void skipTrack(TextChannel channel) { MusicManager musicManager = getGuildAudioPlayer(channel.getGuild()); musicManager.scheduler.nextTrack(); @@ -121,6 +147,14 @@ public class MusicBot extends ListenerAdapter { channel.sendMessage("Skipped to next track.").queue(); } + private void changeVolume(TextChannel channel, String vol) { + MusicManager musicManager = getGuildAudioPlayer(channel.getGuild()); + int volume = Integer.parseInt(vol); + config.setVolume(volume); + musicManager.player.setVolume(volume); + channel.sendMessage("Set volume to " + volume).queue(); + } + private static void connectToFirstVoiceChannel(AudioManager audioManager) { if (!audioManager.isConnected()) { for (VoiceChannel voiceChannel : audioManager.getGuild().getVoiceChannels()) { diff --git a/src/main/resources/config.json b/src/main/resources/config.json new file mode 100644 index 0000000..03c592b --- /dev/null +++ b/src/main/resources/config.json @@ -0,0 +1,6 @@ +{ + "token": "OTMyMzAxMjQ4NTQ2MzYxMzQ2.YeQ_Mg.n4H8Cl3dQ1u5aFL1ZvTmfcGwpEY", + "owner": "250842261221277697", + "prefix": "!", + "volume": 50 +} \ No newline at end of file