diff --git a/build.gradle.kts b/build.gradle.kts index 1d93ca2..d9826b4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,10 +1,11 @@ plugins { java id("com.github.johnrengelman.shadow") version "7.1.2" + id("org.jetbrains.gradle.plugin.idea-ext") version "1.1.6" } group = "de.limited_dev" -version = "1.0.1" +version = "v1.2.1" repositories { mavenCentral() @@ -13,44 +14,81 @@ repositories { dependencies { implementation("net.dv8tion:JDA:5.0.0-alpha.20") - implementation("com.sedmelluq:lavaplayer:1.3.77") implementation("org.slf4j:slf4j-api:2.0.3") implementation("org.slf4j:slf4j-simple:2.0.3") } -tasks.getByName("test") { - useJUnitPlatform() -} +val templateSource = file("src/main/templates") +val templateDest = layout.buildDirectory.dir("generated/sources/templates") -tasks.withType { - manifest { - attributes["Main-Class"] = "de.limited_dev.lil_judd.Main" - } - // To add all of the dependencies - from(sourceSets.main.get().output) - - dependsOn(configurations.runtimeClasspath) - from({ - configurations.runtimeClasspath.get().filter { it.name.endsWith("jar") }.map { zipTree(it) } - }) -} - - -tasks.withType { - dependencies { - include(dependency("net.dv8tion:JDA:5.0.0-alpha.20")) - include(dependency("com.sedmelluq:lavaplayer:1.3.77")) - include(dependency("org.slf4j:slf4j-api:2.0.3")) - include(dependency("org.slf4j:slf4j-simple:2.0.3")) +tasks { + getByName("test") { + useJUnitPlatform() } + withType { + manifest { + attributes["Main-Class"] = "de.limited_dev.lil_judd.Main" + } + // To add all of the dependencies + from(sourceSets.main.get().output) + + dependsOn(configurations.runtimeClasspath) + from({ + configurations.runtimeClasspath.get().filter { it.name.endsWith("jar") }.map { zipTree(it) } + }) + dependsOn("generateTemplates", "processResources") + } + + withType { + dependencies { + include(dependency("net.dv8tion:JDA:5.0.0-alpha.20")) + include(dependency("org.slf4j:slf4j-api:2.0.3")) + include(dependency("org.slf4j:slf4j-simple:2.0.3")) + } + dependsOn("generateTemplates", "processResources") + } + + withType{ + options.encoding = "UTF-8" + dependsOn("generateTemplates") + } + + create("generateTemplates") { + filteringCharset = "UTF-8" + val props = mapOf( + "version" to version + ) + inputs.properties(props) + from(templateSource) + expand(props) + into(templateDest) + } } -tasks.withType{ - options.encoding = "UTF-8" +sourceSets.main { + java { + srcDir(templateDest) + } + + resources { + srcDir("src/main/generated") + } } java{ - sourceCompatibility = org.gradle.api.JavaVersion.VERSION_17 - targetCompatibility = org.gradle.api.JavaVersion.VERSION_17 -} \ No newline at end of file + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 +} + +rootProject.idea.project { + this as ExtensionAware + configure { + this as ExtensionAware + configure { + afterSync(tasks["generateTemplates"], tasks["processResources"]) + } + } +} +//fuck eclipse users amirite? +//rootProject.eclipse.synchronizationTasks("generateTemplates") \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index f4a2ebd..45a98dd 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,2 +1,2 @@ rootProject.name = "lil_Judd" - +include("templates") diff --git a/src/main/java/de/limited_dev/lil_judd/Main.java b/src/main/java/de/limited_dev/lil_judd/Main.java index cca55b5..f5208ba 100644 --- a/src/main/java/de/limited_dev/lil_judd/Main.java +++ b/src/main/java/de/limited_dev/lil_judd/Main.java @@ -1,5 +1,6 @@ package de.limited_dev.lil_judd; +import de.limited_dev.lil_judd.build.BuildConstants; import de.limited_dev.lil_judd.consolecommand.component.ConsoleCommandManager; import de.limited_dev.lil_judd.jdacommands.components.JDACommandManager; import de.limited_dev.lil_judd.features.maps.MapManager; @@ -24,7 +25,7 @@ public class Main { public static void main(String[] args){ lgr.info("li'l Judd is waking up ..."); - + lgr.info(BuildConstants.botVersion); launchTime = System.currentTimeMillis(); tokenManager.load(); diff --git a/src/main/java/de/limited_dev/lil_judd/consolecommand/component/ConsoleCommand.java b/src/main/java/de/limited_dev/lil_judd/consolecommand/component/ConsoleCommand.java index e17529f..d5f0bd4 100644 --- a/src/main/java/de/limited_dev/lil_judd/consolecommand/component/ConsoleCommand.java +++ b/src/main/java/de/limited_dev/lil_judd/consolecommand/component/ConsoleCommand.java @@ -21,6 +21,27 @@ public class ConsoleCommand { } + protected void sendUsage(String commandName){ + ConsoleCommand command = ConsoleCommandManager.getCommand(commandName); + if(command == null){ + sendUsage(this.getName()); + return; + } + String out = "Command: " + command.getName() + " = " + command.getDescription() + ""; + lgr.consoleOut(out); + + out = "Usage: " + commandName; + if(command.getArgs() == null){ + lgr.consoleOut(out); + return; + } + out = out + (command.getArgs().length == 0 ? "" : " "); + for(int i = 0; i < command.getArgs().length; ++i){ + out = out + "<" + command.getArgs()[i] + ">" + (command.getArgs().length - 1 == i ? "" : " "); + } + lgr.consoleOut(out); + } + public String getName() { return name; } diff --git a/src/main/java/de/limited_dev/lil_judd/consolecommand/component/ConsoleCommandManager.java b/src/main/java/de/limited_dev/lil_judd/consolecommand/component/ConsoleCommandManager.java index 2258091..37b6b6b 100644 --- a/src/main/java/de/limited_dev/lil_judd/consolecommand/component/ConsoleCommandManager.java +++ b/src/main/java/de/limited_dev/lil_judd/consolecommand/component/ConsoleCommandManager.java @@ -1,7 +1,9 @@ package de.limited_dev.lil_judd.consolecommand.component; import de.limited_dev.lil_judd.Main; +import de.limited_dev.lil_judd.consolecommand.system.BotVersionCommand; import de.limited_dev.lil_judd.consolecommand.system.ShutdownCommand; +import de.limited_dev.lil_judd.consolecommand.util.AnnounceCommand; import de.limited_dev.lil_judd.consolecommand.util.HelpConsoleCommand; import de.limited_dev.lil_judd.consolecommand.util.ManualCommand; import de.limited_dev.lil_judd.util.Logger; @@ -19,6 +21,8 @@ public class ConsoleCommandManager { commands.add(new ShutdownCommand()); commands.add(new HelpConsoleCommand()); commands.add(new ManualCommand()); + commands.add(new BotVersionCommand()); + commands.add(new AnnounceCommand()); } public static void registerListener(){ diff --git a/src/main/java/de/limited_dev/lil_judd/consolecommand/system/BotVersionCommand.java b/src/main/java/de/limited_dev/lil_judd/consolecommand/system/BotVersionCommand.java new file mode 100644 index 0000000..422ad6e --- /dev/null +++ b/src/main/java/de/limited_dev/lil_judd/consolecommand/system/BotVersionCommand.java @@ -0,0 +1,15 @@ +package de.limited_dev.lil_judd.consolecommand.system; + +import de.limited_dev.lil_judd.build.BuildConstants; +import de.limited_dev.lil_judd.consolecommand.component.ConsoleCommand; + +public class BotVersionCommand extends ConsoleCommand { + public BotVersionCommand() { + super("version", "Shows the bot version", null); + } + + @Override + public void onCommand(String[] args) { + lgr.consoleOut(jda.getSelfUser().getName() + " on " + BuildConstants.botVersion); + } +} diff --git a/src/main/java/de/limited_dev/lil_judd/consolecommand/system/ShutdownCommand.java b/src/main/java/de/limited_dev/lil_judd/consolecommand/system/ShutdownCommand.java index e6eb538..a038d0d 100644 --- a/src/main/java/de/limited_dev/lil_judd/consolecommand/system/ShutdownCommand.java +++ b/src/main/java/de/limited_dev/lil_judd/consolecommand/system/ShutdownCommand.java @@ -24,7 +24,6 @@ public class ShutdownCommand extends ConsoleCommand { audioManager.closeAudioConnection(); } } - TimePlanner.sceduThr.interrupt(); TimePlanner.schedulerFirstLesson.shutdown(); jda.shutdown(); } diff --git a/src/main/java/de/limited_dev/lil_judd/consolecommand/util/AnnounceCommand.java b/src/main/java/de/limited_dev/lil_judd/consolecommand/util/AnnounceCommand.java new file mode 100644 index 0000000..d3ff7d4 --- /dev/null +++ b/src/main/java/de/limited_dev/lil_judd/consolecommand/util/AnnounceCommand.java @@ -0,0 +1,25 @@ +package de.limited_dev.lil_judd.consolecommand.util; + +import de.limited_dev.lil_judd.Main; +import de.limited_dev.lil_judd.consolecommand.component.ConsoleCommand; +import de.limited_dev.lil_judd.util.EmbeddedMessageHelper; +import net.dv8tion.jda.api.entities.Guild; + +public class AnnounceCommand extends ConsoleCommand { + public AnnounceCommand() { + super("announce", "Announce something to the default channel", new String[]{"Message"}); + } + + @Override + public void onCommand(String[] args) { + String ar = ""; + for(int i = 0; i < args.length; ++i){ + ar = ar + " " + args[i]; + } + + for(Guild g : Main.getJda().getSelfUser().getMutualGuilds()){ + EmbeddedMessageHelper.sendSimpleOneLiner(g, g.getDefaultChannel().asTextChannel().getIdLong(), + "Announcement", ar, null); + } + } +} diff --git a/src/main/java/de/limited_dev/lil_judd/consolecommand/util/ManualCommand.java b/src/main/java/de/limited_dev/lil_judd/consolecommand/util/ManualCommand.java index 2d12b3b..10c237c 100644 --- a/src/main/java/de/limited_dev/lil_judd/consolecommand/util/ManualCommand.java +++ b/src/main/java/de/limited_dev/lil_judd/consolecommand/util/ManualCommand.java @@ -11,31 +11,10 @@ public class ManualCommand extends ConsoleCommand { @Override public void onCommand(String[] args) { if(args.length != 1){ - sendUsage(this.getName()); + this.sendUsage(this.getName()); return; } String commandName = args[0]; - sendUsage(commandName.toLowerCase()); - } - - private void sendUsage(String commandName){ - ConsoleCommand command = ConsoleCommandManager.getCommand(commandName); - if(command == null){ - sendUsage(this.getName()); - return; - } - String out = "Command: " + command.getName() + " = " + command.getDescription() + ""; - lgr.consoleOut(out); - - out = "Usage: " + commandName; - if(command.getArgs() == null){ - lgr.consoleOut(out); - return; - } - out = out + (command.getArgs().length == 0 ? "" : " "); - for(int i = 0; i < command.getArgs().length; ++i){ - out = out + "<" + command.getArgs()[i] + ">" + (command.getArgs().length - 1 == i ? "" : " "); - } - lgr.consoleOut(out); + this.sendUsage(commandName.toLowerCase()); } } diff --git a/src/main/java/de/limited_dev/lil_judd/features/maps/MapManager.java b/src/main/java/de/limited_dev/lil_judd/features/maps/MapManager.java index 98963d8..c20a1e9 100644 --- a/src/main/java/de/limited_dev/lil_judd/features/maps/MapManager.java +++ b/src/main/java/de/limited_dev/lil_judd/features/maps/MapManager.java @@ -29,6 +29,10 @@ public class MapManager { return md; if (md.startsWithENName(name)) return md; + if(md.equalsDEName(name)) + return md; + if(md.equalsENName(name)) + return md; } return null; } diff --git a/src/main/java/de/limited_dev/lil_judd/features/maps/components/MapData.java b/src/main/java/de/limited_dev/lil_judd/features/maps/components/MapData.java index e09c8f3..a9807e0 100644 --- a/src/main/java/de/limited_dev/lil_judd/features/maps/components/MapData.java +++ b/src/main/java/de/limited_dev/lil_judd/features/maps/components/MapData.java @@ -16,11 +16,11 @@ public class MapData { } public boolean startsWithDEName(String str){ - return this.nameDE.startsWith(str); + return this.nameDE.toLowerCase().startsWith(str); } public boolean startsWithENName(String str){ - return this.nameEN.startsWith(str); + return this.nameEN.toLowerCase().startsWith(str); } public boolean equalsENName(String str) { diff --git a/src/main/java/de/limited_dev/lil_judd/features/music/AudioPlayerSendHandler.java b/src/main/java/de/limited_dev/lil_judd/features/music/AudioPlayerSendHandler.java deleted file mode 100644 index d6f44aa..0000000 --- a/src/main/java/de/limited_dev/lil_judd/features/music/AudioPlayerSendHandler.java +++ /dev/null @@ -1,35 +0,0 @@ -package de.limited_dev.lil_judd.features.music; - -import com.sedmelluq.discord.lavaplayer.player.AudioPlayer; -import com.sedmelluq.discord.lavaplayer.track.playback.MutableAudioFrame; -import net.dv8tion.jda.api.audio.AudioSendHandler; - -import java.nio.ByteBuffer; - -public class AudioPlayerSendHandler implements AudioSendHandler { - private final AudioPlayer audioPlayer; - private final ByteBuffer buffer; - private final MutableAudioFrame frame; - - public AudioPlayerSendHandler(AudioPlayer audioPlayer) { - this.audioPlayer = audioPlayer; - this.buffer = ByteBuffer.allocate(1024); - this.frame = new MutableAudioFrame(); - this.frame.setBuffer(buffer); - } - - @Override - public boolean canProvide() { - return this.audioPlayer.provide(this.frame); - } - - @Override - public ByteBuffer provide20MsAudio() { - return this.buffer.flip(); - } - - @Override - public boolean isOpus() { - return true; - } -} diff --git a/src/main/java/de/limited_dev/lil_judd/features/music/GuildMusicManager.java b/src/main/java/de/limited_dev/lil_judd/features/music/GuildMusicManager.java deleted file mode 100644 index c10c360..0000000 --- a/src/main/java/de/limited_dev/lil_judd/features/music/GuildMusicManager.java +++ /dev/null @@ -1,20 +0,0 @@ -package de.limited_dev.lil_judd.features.music; - -import com.sedmelluq.discord.lavaplayer.player.AudioPlayer; -import com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager; - -public class GuildMusicManager { - public final AudioPlayer audioPlayer; - public final TrackScheduler scheduler; - private final AudioPlayerSendHandler sendHandler; - public GuildMusicManager(AudioPlayerManager manager){ - this.audioPlayer = manager.createPlayer(); - this.scheduler = new TrackScheduler(this.audioPlayer); - this.audioPlayer.addListener(this.scheduler); - this.sendHandler = new AudioPlayerSendHandler(this.audioPlayer); - } - - public AudioPlayerSendHandler getSendHandler() { - return sendHandler; - } -} diff --git a/src/main/java/de/limited_dev/lil_judd/features/music/MusicManager.java b/src/main/java/de/limited_dev/lil_judd/features/music/MusicManager.java deleted file mode 100644 index 5a0dba2..0000000 --- a/src/main/java/de/limited_dev/lil_judd/features/music/MusicManager.java +++ /dev/null @@ -1,97 +0,0 @@ -package de.limited_dev.lil_judd.features.music; - -import com.sedmelluq.discord.lavaplayer.player.AudioLoadResultHandler; -import com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager; -import com.sedmelluq.discord.lavaplayer.player.DefaultAudioPlayerManager; -import com.sedmelluq.discord.lavaplayer.source.AudioSourceManagers; -import com.sedmelluq.discord.lavaplayer.tools.FriendlyException; -import com.sedmelluq.discord.lavaplayer.track.AudioPlaylist; -import com.sedmelluq.discord.lavaplayer.track.AudioTrack; -import com.sedmelluq.discord.lavaplayer.track.AudioTrackInfo; -import de.limited_dev.lil_judd.util.EmbeddedMessageHelper; -import de.limited_dev.lil_judd.util.TimeUtil; -import net.dv8tion.jda.api.entities.Guild; -import net.dv8tion.jda.api.entities.channel.concrete.TextChannel; -import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; - -import java.util.HashMap; -import java.util.Map; - -public class MusicManager { - - private static MusicManager instance; - - private final AudioPlayerManager playerManager; - private final Map musicManagerMap; - public MusicManager(){ - this.playerManager = new DefaultAudioPlayerManager(); - this.musicManagerMap = new HashMap<>(); - - - AudioSourceManagers.registerRemoteSources(this.playerManager); - AudioSourceManagers.registerLocalSource(this.playerManager); - } - - public GuildMusicManager getGuildMusicManager(Guild guild) { - return this.musicManagerMap.computeIfAbsent(guild.getIdLong(), (guildId) -> { - final GuildMusicManager guildMusicManager = new GuildMusicManager(this.playerManager); - - guild.getAudioManager().setSendingHandler(guildMusicManager.getSendHandler()); - - return guildMusicManager; - }); - } - - public void loadAndPlay(SlashCommandInteractionEvent event, String trackUrl) { - final GuildMusicManager musicManager = this.getGuildMusicManager(event.getGuild()); - - this.playerManager.loadItemOrdered(musicManager, trackUrl, new AudioLoadResultHandler() { - @Override - public void trackLoaded(AudioTrack track) { - musicManager.scheduler.queue(track); - AudioTrackInfo info = track.getInfo(); - - EmbeddedMessageHelper.sendSimpleOneLiner(event, "Added to queue from link", - "**" + info.title + "**\n" + - "by " + info.author + "\n" + - TimeUtil.getTimeFormatedShortend(info.length) + "\n\n" + - ">>>" + info.uri, "https://img.youtube.com/vi/" + getImgURL(info.uri) + "/maxresdefault.jpg"); - } - - @Override - public void playlistLoaded(AudioPlaylist playlist) { - AudioTrack track = playlist.getTracks().get(0); - AudioTrackInfo info = track.getInfo(); - - EmbeddedMessageHelper.sendSimpleOneLiner(event, "Added to queue from query", - "**" + info.title + "**\n" + - "by " + info.author + "\n" + - TimeUtil.getTimeFormatedShortend(info.length) + "\n\n" + - ">>>" + info.uri, "https://img.youtube.com/vi/" + getImgURL(info.uri) + "/maxresdefault.jpg"); - - musicManager.scheduler.queue(track); - } - - @Override - public void noMatches() { - EmbeddedMessageHelper.sendSimpleOneLiner(event, "No Matches", "No Matches found", "https://media.discordapp.net/attachments/833442323160891452/1031591718149165128/unknown.png"); - } - - @Override - public void loadFailed(FriendlyException exception) { - EmbeddedMessageHelper.sendSimpleOneLiner(event, "Load failed", "Could not load song.", "https://media.discordapp.net/attachments/833442323160891452/1031656911147372585/unknown.png"); - } - }); - } - - private String getImgURL(String uri){ - return uri.split("=")[1]; - } - - public static MusicManager getInstance(){ - if(instance == null){ - instance = new MusicManager(); - } - return instance; - } -} diff --git a/src/main/java/de/limited_dev/lil_judd/features/music/TrackScheduler.java b/src/main/java/de/limited_dev/lil_judd/features/music/TrackScheduler.java deleted file mode 100644 index 4a9a22d..0000000 --- a/src/main/java/de/limited_dev/lil_judd/features/music/TrackScheduler.java +++ /dev/null @@ -1,53 +0,0 @@ -package de.limited_dev.lil_judd.features.music; - -import com.sedmelluq.discord.lavaplayer.player.AudioPlayer; -import com.sedmelluq.discord.lavaplayer.player.event.AudioEventAdapter; -import com.sedmelluq.discord.lavaplayer.tools.FriendlyException; -import com.sedmelluq.discord.lavaplayer.track.AudioTrack; -import com.sedmelluq.discord.lavaplayer.track.AudioTrackEndReason; - -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.LinkedBlockingQueue; - -public class TrackScheduler extends AudioEventAdapter { - public final AudioPlayer player; - public final BlockingQueue queue; - public boolean repeating = false; - - - public TrackScheduler(AudioPlayer player) { - this.player = player; - this.queue = new LinkedBlockingQueue<>(); - } - - public void queue(AudioTrack track) { - if (!this.player.startTrack(track, true)) { - this.queue.offer(track); - } - } - - public void nextTrack() { - this.player.startTrack(this.queue.poll(), false); - } - - @Override - public void onTrackException(AudioPlayer player, AudioTrack track, FriendlyException exception) { - this.player.startTrack(track.makeClone(), false); - } - @Override - public void onTrackEnd(AudioPlayer player, AudioTrack track, AudioTrackEndReason endReason) { - if (endReason.mayStartNext) { - if (this.repeating || endReason == AudioTrackEndReason.LOAD_FAILED) { - this.player.startTrack(track.makeClone(), false); - return; - } - - nextTrack(); - } - } - - @Override - public void onTrackStuck(AudioPlayer player, AudioTrack track, long thresholdMs) { - this.player.startTrack(track.makeClone(), false); - } -} diff --git a/src/main/java/de/limited_dev/lil_judd/features/planner/TimePlanner.java b/src/main/java/de/limited_dev/lil_judd/features/planner/TimePlanner.java index b6fa644..afa626e 100644 --- a/src/main/java/de/limited_dev/lil_judd/features/planner/TimePlanner.java +++ b/src/main/java/de/limited_dev/lil_judd/features/planner/TimePlanner.java @@ -29,7 +29,6 @@ public class TimePlanner { private static final int hour = 8; private static final int minute = 0; private static final int second = 0; - public static Thread sceduThr; public static ScheduledExecutorService schedulerFirstLesson; public static GuildTimePlannerStorage getGtps() { @@ -40,71 +39,6 @@ public class TimePlanner { // get the current ZonedDateTime of your TimeZone ZonedDateTime now = ZonedDateTime.now(ZoneId.of("Europe/Berlin")); - sceduThr = new Thread(){ - @Override - public void run() { - // send a message - JDA jda = Main.getJda(); - Set gs = gtps.guildsWithPlanner.keySet(); - lgr.info(gs.toString()); - sceduThr.start(); - lgr.info("Started sending Push Notifications for time Management"); - for(Long l : gs) { - ZonedDateTime then = ZonedDateTime.now(ZoneId.of("Europe/Berlin")).withHour(hour).withMinute(minute).withSecond(second); - EmbeddedMessageHelper.sendSimpleOneLiner(jda.getGuildById(l), gtps.guildsWithPlanner.get(l), "Timeplanning System", "Do you have time on the following Days?", null); - try { - Thread.sleep(4000); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - for(int i = 0; i < 7; ++i){ - if(i != 0) - then = then.plusDays(1).withHour(hour).withMinute(minute).withSecond(second); - MessageEmbed eb = EmbeddedMessageHelper.getEmbeddedMessageAutomated(false, null, then.getDayOfWeek() + ", " + then.getDayOfMonth() + "." + then.getMonthValue() + "." + then.getYear(), null, false).build(); - jda.getGuildById(l).getTextChannelById(gtps.guildsWithPlanner.get(l)).sendMessageEmbeds(eb).queue(message -> addReactions(message)); - lgr.info(gs + ": " + then.getDayOfWeek() + ", " + then.getDayOfMonth() + "." + then.getMonthValue() + "." + then.getYear()); - try { - Thread.sleep(5000); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - } - - lgr.info("Send to Server " + jda.getGuildById(l).getName()); - } - lgr.info("Terminating Thread..."); - Thread.currentThread().interrupt(); - return; - } - - private void addReactions(Message msg){ - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - msg.addReaction(Emoji.fromUnicode("✅")).queue(); - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - msg.addReaction(Emoji.fromFormatted("❌")).queue(); - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - msg.addReaction(Emoji.fromFormatted("❓")).queue(); - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - } - }; - - ZonedDateTime nextNotifyDay = now.plusDays(DayUtil.getDelay(now.getDayOfWeek().name())).withHour(hour).withMinute(minute).withSecond(second); //ZonedDateTime nextNotifyDay = now.plusSeconds(10); lgr.info(nextNotifyDay.getDayOfWeek() + ", " + nextNotifyDay.getDayOfMonth() + "." + nextNotifyDay.getMonth() + "." + nextNotifyDay.getYear() + " / " + nextNotifyDay.getHour() + ":" + nextNotifyDay.getMinute() + ":" + nextNotifyDay.getSecond()); @@ -125,12 +59,75 @@ public class TimePlanner { lgr.info("Duration: " + initialDelayUntilNextNotification); // schedules the reminder at a fixed rate of one day - schedulerFirstLesson = Executors.newScheduledThreadPool(1); + ScheduledExecutorService schedulerFirstLesson = Executors.newScheduledThreadPool(1); schedulerFirstLesson.scheduleAtFixedRate(() -> { - sceduThr.start(); - }, - initialDelayUntilNextNotification, - TimeUnit.DAYS.toSeconds(7), - TimeUnit.SECONDS); + // send a message + JDA jda = Main.getJda(); + Set gs = gtps.guildsWithPlanner.keySet(); + lgr.info(gs.toString()); + Thread thr = new Thread(){ + @Override + public void run() { + for(Long l : gs) { + ZonedDateTime then = ZonedDateTime.now(ZoneId.of("Europe/Berlin")).withHour(hour).withMinute(minute).withSecond(second); + EmbeddedMessageHelper.sendSimpleOneLiner(jda.getGuildById(l), gtps.guildsWithPlanner.get(l), "Timeplanning System", "Do you have time on the following Days?", null); + try { + Thread.sleep(4000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + for(int i = 0; i < 7; ++i){ + if(i != 0) + then = then.plusDays(1).withHour(hour).withMinute(minute).withSecond(second); + MessageEmbed eb = EmbeddedMessageHelper.getEmbeddedMessageAutomated(false, null, then.getDayOfWeek() + ", " + then.getDayOfMonth() + "." + then.getMonthValue() + "." + then.getYear(), null, false).build(); + jda.getGuildById(l).getTextChannelById(gtps.guildsWithPlanner.get(l)).sendMessageEmbeds(eb).queue(message -> addReactions(message)); + lgr.info(gs + ": " + then.getDayOfWeek() + ", " + then.getDayOfMonth() + "." + then.getMonthValue() + "." + then.getYear()); + try { + Thread.sleep(5000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + + lgr.info("Send to Server " + jda.getGuildById(l).getName()); + } + lgr.info("Terminating Thread..."); + Thread.currentThread().interrupt(); + return; + } + + private void addReactions(Message msg){ + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + msg.addReaction(Emoji.fromUnicode("✅")).queue(); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + msg.addReaction(Emoji.fromFormatted("❌")).queue(); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + msg.addReaction(Emoji.fromFormatted("❓")).queue(); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + }; + thr.start(); + lgr.info("Started sending Push Notifications for time Management"); + }, + initialDelayUntilNextNotification, + TimeUnit.DAYS.toSeconds(7), + TimeUnit.SECONDS); + } } diff --git a/src/main/java/de/limited_dev/lil_judd/jdacommands/components/JDACommandManager.java b/src/main/java/de/limited_dev/lil_judd/jdacommands/components/JDACommandManager.java index 3780da9..41b4d81 100644 --- a/src/main/java/de/limited_dev/lil_judd/jdacommands/components/JDACommandManager.java +++ b/src/main/java/de/limited_dev/lil_judd/jdacommands/components/JDACommandManager.java @@ -2,7 +2,6 @@ package de.limited_dev.lil_judd.jdacommands.components; import de.limited_dev.lil_judd.jdacommands.management.RemoveFeatureCommand; import de.limited_dev.lil_judd.jdacommands.management.SetupFeatureCommand; -import de.limited_dev.lil_judd.jdacommands.music.*; import de.limited_dev.lil_judd.jdacommands.scrim.EndScrimCommand; import de.limited_dev.lil_judd.jdacommands.scrim.MessageScrimCommand; import de.limited_dev.lil_judd.jdacommands.scrim.ScrimInfoCommand; @@ -26,11 +25,6 @@ public class JDACommandManager { commands.add(new MessageScrimCommand()); commands.add(new ScrimInfoCommand()); commands.add(new TranslateCommand()); - commands.add(new PlayCommand()); - commands.add(new StopCommand()); - commands.add(new SkipCommand()); - commands.add(new QueueCommand()); - commands.add(new NowPlayingCommand()); } public static List getCommands() { diff --git a/src/main/java/de/limited_dev/lil_judd/jdacommands/music/NowPlayingCommand.java b/src/main/java/de/limited_dev/lil_judd/jdacommands/music/NowPlayingCommand.java deleted file mode 100644 index 2d62771..0000000 --- a/src/main/java/de/limited_dev/lil_judd/jdacommands/music/NowPlayingCommand.java +++ /dev/null @@ -1,54 +0,0 @@ -package de.limited_dev.lil_judd.jdacommands.music; - -import com.sedmelluq.discord.lavaplayer.player.AudioPlayer; -import com.sedmelluq.discord.lavaplayer.track.AudioTrack; -import com.sedmelluq.discord.lavaplayer.track.AudioTrackInfo; -import de.limited_dev.lil_judd.jdacommands.components.JDACommand; -import de.limited_dev.lil_judd.features.music.GuildMusicManager; -import de.limited_dev.lil_judd.features.music.MusicManager; -import de.limited_dev.lil_judd.util.EmbeddedMessageHelper; -import de.limited_dev.lil_judd.util.TimeUtil; -import net.dv8tion.jda.api.entities.Guild; -import net.dv8tion.jda.api.entities.GuildVoiceState; -import net.dv8tion.jda.api.entities.Member; -import net.dv8tion.jda.api.entities.channel.concrete.TextChannel; -import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; - -public class NowPlayingCommand extends JDACommand { - public NowPlayingCommand() { - super("nowplaying"); - } - - @Override - public void onSlashCommand(SlashCommandInteractionEvent event) { - final TextChannel c = event.getChannel().asTextChannel(); - final Guild g = event.getGuild(); - final Member self = g.getSelfMember(); - final GuildVoiceState selfState = self.getVoiceState(); - - if(!selfState.inAudioChannel()){ - EmbeddedMessageHelper.sendSimpleOneLiner(event, "Not in VC", "I'm not playing anything.", null); - return; - } - - final GuildMusicManager guildMusicManager = MusicManager.getInstance().getGuildMusicManager(g); - final AudioPlayer audioPlayer = guildMusicManager.audioPlayer; - final AudioTrack track = audioPlayer.getPlayingTrack(); - - if(track == null){ - EmbeddedMessageHelper.sendSimpleOneLiner(event, "Not Playing", "Not playing anything", null); - return; - } - - final AudioTrackInfo info = track.getInfo(); - EmbeddedMessageHelper.sendSimpleOneLiner(event, "Currently playing", - "**" + info.title + "**\n" + - "by " + info.author + "\n" + - TimeUtil.getTimeFormatedShortend(audioPlayer.getPlayingTrack().getPosition()) + " : " + TimeUtil.getTimeFormatedShortend(info.length) + "\n\n" + - ">>>" + info.uri, "https://img.youtube.com/vi/" + getImgURL(info.uri) + "/maxresdefault.jpg"); - } - - private String getImgURL(String uri){ - return uri.split("=")[1]; - } -} diff --git a/src/main/java/de/limited_dev/lil_judd/jdacommands/music/PlayCommand.java b/src/main/java/de/limited_dev/lil_judd/jdacommands/music/PlayCommand.java deleted file mode 100644 index 6727773..0000000 --- a/src/main/java/de/limited_dev/lil_judd/jdacommands/music/PlayCommand.java +++ /dev/null @@ -1,79 +0,0 @@ -package de.limited_dev.lil_judd.jdacommands.music; - -import de.limited_dev.lil_judd.jdacommands.components.JDACommand; -import de.limited_dev.lil_judd.features.music.MusicManager; -import de.limited_dev.lil_judd.util.EmbeddedMessageHelper; -import net.dv8tion.jda.api.entities.Guild; -import net.dv8tion.jda.api.entities.GuildVoiceState; -import net.dv8tion.jda.api.entities.Member; -import net.dv8tion.jda.api.entities.channel.concrete.TextChannel; -import net.dv8tion.jda.api.entities.channel.concrete.VoiceChannel; -import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; -import net.dv8tion.jda.api.managers.AudioManager; - -public class PlayCommand extends JDACommand { - - public PlayCommand() { - super("play"); - } - @Override - public void onSlashCommand(SlashCommandInteractionEvent event) { - final Guild g = event.getGuild(); - final Member self = g.getSelfMember(); - final Member m = g.getMemberById(event.getUser().getIdLong()); - final TextChannel c = event.getChannel().asTextChannel(); - final GuildVoiceState selfState = self.getVoiceState(); - final GuildVoiceState memberState = m.getVoiceState(); - - - boolean hadToJoin = false; - if(!selfState.inAudioChannel()){ - if(!attemptToJoinVoice(event, m)) - return; - hadToJoin = true; - } - - if(!hadToJoin){ - if(!selfState.getChannel().equals(memberState.getChannel())){ - EmbeddedMessageHelper.sendSimpleOneLiner(event, "Error", "You are not in the same voice channel", null); - return; - } - } - - String link = event.getOption("linkquery").getAsString(); - - if(!link.startsWith("https://www.youtube.com") && !link.startsWith("https://youtube.com") && link.startsWith("https://")){ - EmbeddedMessageHelper.sendSimpleOneLiner(event, "Error", "Not a YouTube URL.", null); - return; - } - - if(!isURL(link)){ - link = "ytsearch:" + link; - lgr.info("Is not link"); - } - - - MusicManager.getInstance().loadAndPlay(event, link); - } - - public boolean attemptToJoinVoice(SlashCommandInteractionEvent event, Member m){ - Guild g = event.getGuild(); - GuildVoiceState memberVoiceState = m.getVoiceState(); - if(!memberVoiceState.inAudioChannel()){ - EmbeddedMessageHelper.sendSimpleOneLiner(event, "Not In Voice", - "You are not in a voice channel.", null); - lgr.info("Could not join vc"); - return false; - } - final AudioManager audioManager = g.getAudioManager(); - final VoiceChannel vc = memberVoiceState.getChannel().asVoiceChannel(); - - audioManager.openAudioConnection(vc); - lgr.info("Joined VC in " + g.getName()); - return true; - } - - private boolean isURL(String uri){ - return uri.startsWith("https://www.youtube.com") || uri.startsWith("https://youtube.com") || uri.startsWith("https://youtu.be"); - } -} diff --git a/src/main/java/de/limited_dev/lil_judd/jdacommands/music/QueueCommand.java b/src/main/java/de/limited_dev/lil_judd/jdacommands/music/QueueCommand.java deleted file mode 100644 index 48bf2de..0000000 --- a/src/main/java/de/limited_dev/lil_judd/jdacommands/music/QueueCommand.java +++ /dev/null @@ -1,54 +0,0 @@ -package de.limited_dev.lil_judd.jdacommands.music; - -import com.sedmelluq.discord.lavaplayer.player.AudioPlayer; -import com.sedmelluq.discord.lavaplayer.track.AudioTrack; -import com.sedmelluq.discord.lavaplayer.track.AudioTrackInfo; -import de.limited_dev.lil_judd.jdacommands.components.JDACommand; -import de.limited_dev.lil_judd.features.music.GuildMusicManager; -import de.limited_dev.lil_judd.features.music.MusicManager; -import de.limited_dev.lil_judd.util.EmbeddedMessageHelper; -import de.limited_dev.lil_judd.util.TimeUtil; -import net.dv8tion.jda.api.entities.Guild; -import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.BlockingQueue; - -public class QueueCommand extends JDACommand { - public QueueCommand() { - super("queue"); - } - - @Override - public void onSlashCommand(SlashCommandInteractionEvent event) { - final Guild g = event.getGuild(); - final GuildMusicManager guildMusicManager = MusicManager.getInstance().getGuildMusicManager(g); - final BlockingQueue queue = guildMusicManager.scheduler.queue; - final AudioPlayer audioPlayer = guildMusicManager.audioPlayer; - final AudioTrack currenttrack = audioPlayer.getPlayingTrack(); - - if(queue.isEmpty() && currenttrack == null){ - EmbeddedMessageHelper.sendSimpleOneLiner(event, "Queue", "**Queue Empty**", null); - return; - } - - final List trackList = new ArrayList<>(queue); - String description = ""; - AudioTrackInfo info; - String trackInfo; - int index = 0; - info = currenttrack.getInfo(); - description = "**" + info.title + " - " + TimeUtil.getTimeFormatedShortend(info.length) + " (" + info.author + ")**\n"; - for(AudioTrack track : trackList){ - if(index == 14) - continue; - info = track.getInfo(); - trackInfo = info.title + " - " + TimeUtil.getTimeFormatedShortend(track.getDuration()) + " (" + info.author + ")\n"; - description = description + trackInfo; - ++index; - } - - EmbeddedMessageHelper.sendSimpleOneLiner(event, "Queue", description, "https://cdn.discordapp.com/attachments/833442323160891452/1031670452642394182/unknown.png"); - } -} diff --git a/src/main/java/de/limited_dev/lil_judd/jdacommands/music/SkipCommand.java b/src/main/java/de/limited_dev/lil_judd/jdacommands/music/SkipCommand.java deleted file mode 100644 index be7e45b..0000000 --- a/src/main/java/de/limited_dev/lil_judd/jdacommands/music/SkipCommand.java +++ /dev/null @@ -1,53 +0,0 @@ -package de.limited_dev.lil_judd.jdacommands.music; - -import com.sedmelluq.discord.lavaplayer.player.AudioPlayer; -import de.limited_dev.lil_judd.jdacommands.components.JDACommand; -import de.limited_dev.lil_judd.features.music.GuildMusicManager; -import de.limited_dev.lil_judd.features.music.MusicManager; -import de.limited_dev.lil_judd.util.EmbeddedMessageHelper; -import net.dv8tion.jda.api.entities.Guild; -import net.dv8tion.jda.api.entities.GuildVoiceState; -import net.dv8tion.jda.api.entities.Member; -import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; - -public class SkipCommand extends JDACommand { - public SkipCommand() { - super("skip"); - } - - @Override - public void onSlashCommand(SlashCommandInteractionEvent event) { - final Guild g = event.getGuild(); - final Member self = g.getSelfMember(); - final GuildVoiceState selfState = self.getVoiceState(); - - if(!selfState.inAudioChannel()){ - EmbeddedMessageHelper.sendSimpleOneLiner(event, "Not In VC", "I'm not a voice channel", null); - return; - } - - final Member m = g.getMemberById(event.getUser().getIdLong()); - final GuildVoiceState mState = m.getVoiceState(); - - if(!mState.inAudioChannel()){ - EmbeddedMessageHelper.sendSimpleOneLiner(event, "Not in VC", "You are not in a vc", null); - return; - } - - if(!selfState.getChannel().asVoiceChannel().equals(mState.getChannel().asVoiceChannel())){ - EmbeddedMessageHelper.sendSimpleOneLiner(event, "Not in same VC", "You are not in my vc", null); - return; - } - - final GuildMusicManager guildMusicManager = MusicManager.getInstance().getGuildMusicManager(g); - final AudioPlayer audioPlayer = guildMusicManager.audioPlayer; - - if(audioPlayer.getPlayingTrack() == null){ - EmbeddedMessageHelper.sendSimpleOneLiner(event, "Error", "There is no playing track currently", null); - return; - } - - guildMusicManager.scheduler.nextTrack(); - EmbeddedMessageHelper.sendSimpleOneLiner(event, "Skip", "Song Skipped", "https://cdn.discordapp.com/attachments/833442323160891452/1031670974568988783/unknown.png"); - } -} diff --git a/src/main/java/de/limited_dev/lil_judd/jdacommands/music/StopCommand.java b/src/main/java/de/limited_dev/lil_judd/jdacommands/music/StopCommand.java deleted file mode 100644 index 6547383..0000000 --- a/src/main/java/de/limited_dev/lil_judd/jdacommands/music/StopCommand.java +++ /dev/null @@ -1,52 +0,0 @@ -package de.limited_dev.lil_judd.jdacommands.music; - -import de.limited_dev.lil_judd.jdacommands.components.JDACommand; -import de.limited_dev.lil_judd.features.music.GuildMusicManager; -import de.limited_dev.lil_judd.features.music.MusicManager; -import de.limited_dev.lil_judd.util.EmbeddedMessageHelper; -import net.dv8tion.jda.api.entities.Guild; -import net.dv8tion.jda.api.entities.GuildVoiceState; -import net.dv8tion.jda.api.entities.Member; -import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; -import net.dv8tion.jda.api.managers.AudioManager; - -public class StopCommand extends JDACommand { - public StopCommand() { - super("stop"); - } - - @Override - public void onSlashCommand(SlashCommandInteractionEvent event) { - final Guild g = event.getGuild(); - final Member self = g.getSelfMember(); - final GuildVoiceState selfState = self.getVoiceState(); - - if(!selfState.inAudioChannel()){ - EmbeddedMessageHelper.sendSimpleOneLiner(event, "Not In VC", "I'm not a voice channel", null); - return; - } - - final Member m = g.getMemberById(event.getUser().getIdLong()); - final GuildVoiceState mState = m.getVoiceState(); - - if(!mState.inAudioChannel()){ - EmbeddedMessageHelper.sendSimpleOneLiner(event, "Not in VC", "You are not in a vc", null); - return; - } - - if(!selfState.getChannel().asVoiceChannel().equals(mState.getChannel().asVoiceChannel())){ - EmbeddedMessageHelper.sendSimpleOneLiner(event, "Not in same VC", "You are not in my vc", null); - return; - } - - final GuildMusicManager guildMusicManager = MusicManager.getInstance().getGuildMusicManager(g); - - guildMusicManager.scheduler.player.stopTrack(); - guildMusicManager.scheduler.queue.clear(); - - final AudioManager audioManager = g.getAudioManager(); - - audioManager.closeAudioConnection(); - EmbeddedMessageHelper.sendSimpleOneLiner(event, "I stopped", "And left, just like your girlfriend.", "https://cdn.discordapp.com/attachments/833442323160891452/1031671269281763438/unknown.png"); - } -} diff --git a/src/main/java/de/limited_dev/lil_judd/jdacommands/util/InfoCommand.java b/src/main/java/de/limited_dev/lil_judd/jdacommands/util/InfoCommand.java index f592e1e..64d98f4 100644 --- a/src/main/java/de/limited_dev/lil_judd/jdacommands/util/InfoCommand.java +++ b/src/main/java/de/limited_dev/lil_judd/jdacommands/util/InfoCommand.java @@ -1,6 +1,7 @@ package de.limited_dev.lil_judd.jdacommands.util; import de.limited_dev.lil_judd.Main; +import de.limited_dev.lil_judd.build.BuildConstants; import de.limited_dev.lil_judd.jdacommands.components.JDACommand; import de.limited_dev.lil_judd.jdacommands.components.JDACommandManager; import de.limited_dev.lil_judd.util.EmbeddedMessageHelper; @@ -18,11 +19,11 @@ public class InfoCommand extends JDACommand { @Override public void onSlashCommand(SlashCommandInteractionEvent event) { HashMap hm = new HashMap<>(); - hm.put("Information", new String[]{"Ping", "Uptime", "RAM", "# Commands"}); - hm.put("Value", new String[]{Main.getJda().getGatewayPing() + "ms", TimeUtil.getTimeFormatedShortend(Main.getUptime()), + hm.put("Information", new String[]{"Version", "Ping", "Uptime", "RAM", "# Commands"}); + hm.put("Value", new String[]{BuildConstants.botVersion, Main.getJda().getGatewayPing() + "ms", TimeUtil.getTimeFormatedShortend(Main.getUptime()), (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / 1024 / 1024 + "MB / " + (Runtime.getRuntime().maxMemory() - (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory())) / 1024 / 1024 + "MB; " + (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) * 100L / Runtime.getRuntime().maxMemory() + "%" , JDACommandManager.getCommands().size() + ""}); - EmbeddedMessageHelper.sendWithTable(event, Main.getJda().getSelfUser().getName(), "Bot information", Color.YELLOW, Main.getJda().getSelfUser().getAvatarUrl(), "General information about the bot", + EmbeddedMessageHelper.sendWithTable(event, Main.getJda().getSelfUser().getName() + " " + BuildConstants.botVersion, "Bot information", Color.YELLOW, Main.getJda().getSelfUser().getAvatarUrl(), "General information about the bot", new String[]{"Information", "Value"}, hm, true); } } diff --git a/src/main/java/de/limited_dev/lil_judd/listeners/ReadyListener.java b/src/main/java/de/limited_dev/lil_judd/listeners/ReadyListener.java index c827c1e..fb91477 100644 --- a/src/main/java/de/limited_dev/lil_judd/listeners/ReadyListener.java +++ b/src/main/java/de/limited_dev/lil_judd/listeners/ReadyListener.java @@ -9,7 +9,7 @@ import net.dv8tion.jda.api.events.ReadyEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; import org.jetbrains.annotations.NotNull; -public class ReadyListener extends ListenerAdapter { +public class ReadyListener extends ListenerAdapter { private final Logger lgr = Main.getLgr(); private final GuildTimePlannerStorage gtps = TimePlanner.getGtps(); diff --git a/src/main/java/de/limited_dev/lil_judd/util/SlashCommandRegister.java b/src/main/java/de/limited_dev/lil_judd/util/SlashCommandRegister.java index 5d3e534..ed43896 100644 --- a/src/main/java/de/limited_dev/lil_judd/util/SlashCommandRegister.java +++ b/src/main/java/de/limited_dev/lil_judd/util/SlashCommandRegister.java @@ -32,13 +32,7 @@ public class SlashCommandRegister { .addOptions(new OptionData(OptionType.STRING, "message", "Message content", true)), Commands.slash("scriminfo", "Show info about the scrim system."), Commands.slash("translatemap", "Translate a Map") - .addOptions(new OptionData(OptionType.STRING, "map", "Map Name", true)), - Commands.slash("play", "Play music with the bot") - .addOptions(new OptionData(OptionType.STRING, "linkquery", "YouTube Link / Search Query", true)), - Commands.slash("stop", "Stop the music & Bot leaves the voice channel"), - Commands.slash("nowplaying", "Show what's currently playing"), - Commands.slash("queue", "Show the music queue"), - Commands.slash("skip", "Skip the current song") + .addOptions(new OptionData(OptionType.STRING, "map", "Map Name", true)) ).queue(); } } diff --git a/src/main/templates/de/limited_dev/lil_judd/build/BuildConstants.java b/src/main/templates/de/limited_dev/lil_judd/build/BuildConstants.java new file mode 100644 index 0000000..5b85d90 --- /dev/null +++ b/src/main/templates/de/limited_dev/lil_judd/build/BuildConstants.java @@ -0,0 +1,5 @@ +package de.limited_dev.lil_judd.build; + +public class BuildConstants{ + public static String botVersion = "${version}"; +} \ No newline at end of file