diff --git a/.gitignore b/.gitignore index a53fbb7..0993a81 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ /.idea/ /.gradle/ -/data/token.judd +/data/ /build/ 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 e78b666..1bf9be8 100644 --- a/src/main/java/de/limited_dev/lil_judd/Main.java +++ b/src/main/java/de/limited_dev/lil_judd/Main.java @@ -50,8 +50,6 @@ public class Main { } catch (InterruptedException e) { throw new RuntimeException(e); } - - lgr.info("Ready to take over the world"); } public static JDA getJda() { diff --git a/src/main/java/de/limited_dev/lil_judd/commands/RemoveFeatureCommand.java b/src/main/java/de/limited_dev/lil_judd/commands/RemoveFeatureCommand.java new file mode 100644 index 0000000..aa0d016 --- /dev/null +++ b/src/main/java/de/limited_dev/lil_judd/commands/RemoveFeatureCommand.java @@ -0,0 +1,28 @@ +package de.limited_dev.lil_judd.commands; + +import de.limited_dev.lil_judd.commands.components.Command; +import de.limited_dev.lil_judd.commands.components.Option; +import de.limited_dev.lil_judd.features.TimePlanner; +import de.limited_dev.lil_judd.util.EmbeddedMessageHelper; +import net.dv8tion.jda.api.Permission; +import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; + +public class RemoveFeatureCommand extends Command { + public RemoveFeatureCommand() { + super("remove", "Remove a feature", new Option[]{ new Option(null, "Feature name", "Des", false)}); + } + + @Override + public void onSlashCommandInteraction(SlashCommandInteractionEvent event) { + if(!event.getGuild().getMemberById(event.getUser().getId()).hasPermission(Permission.ADMINISTRATOR)){ + EmbeddedMessageHelper.sendSimpleOneLiner(event, "You do not have the Permission", "Sorry, but you don't have the Permission to run this command", null); + return; + } + if(event.getOption("feature").getAsString().equals("timefinder")){ + TimePlanner.getGtps().guildsWithPlanner.remove(event.getGuild().getIdLong()); + TimePlanner.getGtps().save(); + EmbeddedMessageHelper.sendSimpleOneLiner(event, "The Feature has been disabled", + "The Feature has been removed from this Server", null); + } + } +} diff --git a/src/main/java/de/limited_dev/lil_judd/commands/components/CommandManager.java b/src/main/java/de/limited_dev/lil_judd/commands/components/CommandManager.java index 4a59b72..f2b7617 100644 --- a/src/main/java/de/limited_dev/lil_judd/commands/components/CommandManager.java +++ b/src/main/java/de/limited_dev/lil_judd/commands/components/CommandManager.java @@ -2,6 +2,7 @@ package de.limited_dev.lil_judd.commands.components; import de.limited_dev.lil_judd.commands.InfoCommand; import de.limited_dev.lil_judd.commands.PingCommand; +import de.limited_dev.lil_judd.commands.RemoveFeatureCommand; import de.limited_dev.lil_judd.commands.SetupFeatureCommand; import java.util.concurrent.CopyOnWriteArrayList; @@ -14,6 +15,7 @@ public class CommandManager { commands.add(new PingCommand()); commands.add(new InfoCommand()); commands.add(new SetupFeatureCommand()); + commands.add(new RemoveFeatureCommand()); } public static CopyOnWriteArrayList getCommands() { diff --git a/src/main/java/de/limited_dev/lil_judd/features/TimePlanner.java b/src/main/java/de/limited_dev/lil_judd/features/TimePlanner.java index 5b0ae80..24bf09e 100644 --- a/src/main/java/de/limited_dev/lil_judd/features/TimePlanner.java +++ b/src/main/java/de/limited_dev/lil_judd/features/TimePlanner.java @@ -2,10 +2,16 @@ package de.limited_dev.lil_judd.features; import de.limited_dev.lil_judd.Main; import de.limited_dev.lil_judd.features.storage.GuildTimePlannerStorage; +import de.limited_dev.lil_judd.util.DayUtil; import de.limited_dev.lil_judd.util.EmbeddedMessageHelper; import de.limited_dev.lil_judd.util.Logger; +import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.entities.Guild; +import net.dv8tion.jda.api.entities.Message; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.emoji.CustomEmoji; +import net.dv8tion.jda.api.entities.emoji.Emoji; import java.time.Duration; import java.time.ZoneId; @@ -27,12 +33,12 @@ public class TimePlanner { public static void registerMessageThread(){ // get the current ZonedDateTime of your TimeZone - ZonedDateTime now = ZonedDateTime.now(ZoneId.of("Europe/Berlin"));//.withHour(8).withMinute(0); + ZonedDateTime now = ZonedDateTime.now(ZoneId.of("Europe/Berlin")).withHour(8).withMinute(0); - // set the ZonedDateTime of the first lesson at 8:05 - //ZonedDateTime nextNotifyDay = now.plusDays(DayUtil.getDelay(now.getDayOfWeek().name())); - ZonedDateTime nextNotifyDay = now.plusSeconds(10); - lgr.info(now.getDayOfMonth() + ""); + + ZonedDateTime nextNotifyDay = now.plusDays(DayUtil.getDelay(now.getDayOfWeek().name())); + //ZonedDateTime nextNotifyDay = now.plusSeconds(10); + lgr.info(nextNotifyDay.getDayOfWeek() + ", " + nextNotifyDay.getDayOfMonth() + "." + nextNotifyDay.getMonth() + "." + nextNotifyDay.getYear() + " / " + nextNotifyDay.getHour() + ":" + nextNotifyDay.getMinute()); //lgr.info(now.getDayOfWeek().name() + " " + nextNotifyDay.getDayOfWeek().name()); @@ -52,23 +58,65 @@ public class TimePlanner { // schedules the reminder at a fixed rate of one day ScheduledExecutorService schedulerFirstLesson = Executors.newScheduledThreadPool(1); schedulerFirstLesson.scheduleAtFixedRate(() -> { - // send a message + // 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; + EmbeddedMessageHelper.sendSimpleOneLiner(jda.getGuildById(l), gtps.guildsWithPlanner.get(l), "Timeplanning System", "Do you have time on the following Days?", null); + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + for(int i = 0; i < 7; ++i){ + then = now.plusDays(i); + 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)); + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } - String msg = ""; - JDA jda = Main.getJda(); - Set gs = gtps.guildsWithPlanner.keySet(); - lgr.info(gs.toString()); - for (Long l : gs) { - //guild.getDefaultChannel().sendMessage(message).queue(); - //jda.getGuildById(l).getTextChannelById(gtps.getChannelID(l)).sendMessage("").queue(); - EmbeddedMessageHelper.sendSimpleOneLiner(jda.getGuildById(l), gtps.guildsWithPlanner.get(l), "You got time?", "Ain't nobody got time for that?", null); - lgr.info("Send Code to Server " + jda.getGuildById(l).getName()); + lgr.info("Send to Server " + jda.getGuildById(l).getName()); } - lgr.info("Send Push Notification for time Management"); - }, - initialDelayUntilNextNotification, - TimeUnit.SECONDS.toSeconds(10),//TimeUnit.DAYS.toSeconds(7), - TimeUnit.SECONDS); + lgr.info("Terminating Thread..."); + Thread.currentThread().interrupt(); + return; + } + private void addReactions(Message msg){ + msg.addReaction(Emoji.fromUnicode("✅")).queue(); + try { + Thread.sleep(500); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + msg.addReaction(Emoji.fromFormatted("❌")).queue(); + try { + Thread.sleep(500); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + msg.addReaction(Emoji.fromFormatted("❓")).queue(); + try { + Thread.sleep(500); + } 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/util/EmbeddedMessageHelper.java b/src/main/java/de/limited_dev/lil_judd/util/EmbeddedMessageHelper.java index eaef3d5..443a82f 100644 --- a/src/main/java/de/limited_dev/lil_judd/util/EmbeddedMessageHelper.java +++ b/src/main/java/de/limited_dev/lil_judd/util/EmbeddedMessageHelper.java @@ -41,4 +41,22 @@ public class EmbeddedMessageHelper { eb.setFooter(">" + dtf.format(now) + " - Automated Message"); g.getTextChannelById(channelID).sendMessageEmbeds(eb.build()).queue(); } + + public static EmbedBuilder getEmbeddedMessageAutomated(boolean doAuthor, String title, String description, String thumbnailURL, boolean shouldAddFooter){ + LocalDateTime now = LocalDateTime.now(); + EmbedBuilder eb = new EmbedBuilder(); + if(doAuthor) + eb.setAuthor(Main.getJda().getSelfUser().getName()); + if(title != null){ + eb.setTitle(title); + } + eb.setColor(Color.ORANGE); + if(description != null) + eb.setDescription(description); + if(thumbnailURL != null) + eb.setThumbnail(thumbnailURL); + if(shouldAddFooter) + eb.setFooter(">" + dtf.format(now) + " - Automated Message"); + return eb; + } } diff --git a/src/main/java/de/limited_dev/lil_judd/util/SlashCommandHelper.java b/src/main/java/de/limited_dev/lil_judd/util/SlashCommandHelper.java index cf25cf3..f77631b 100644 --- a/src/main/java/de/limited_dev/lil_judd/util/SlashCommandHelper.java +++ b/src/main/java/de/limited_dev/lil_judd/util/SlashCommandHelper.java @@ -21,6 +21,12 @@ public class SlashCommandHelper { new OptionData(OptionType.STRING, "feature", "The Feature you want to setup") .addChoice("Send Time finder", "timefinder") , new OptionData(OptionType.CHANNEL, "channel", "The Channel the feature will post in.") + ), + Commands.slash("remove", "Remove a feature") + .addOptions( + new OptionData(OptionType.STRING, "feature", "The Feature you want to remove") + .addChoice("Send Time finder", "timefinder") + , new OptionData(OptionType.CHANNEL, "channel", "The Channel with the feature") ) ).queue();