feat: finished implementing TimePlanner Feature
This commit is contained in:
parent
35097041c0
commit
455ba04935
7 changed files with 123 additions and 23 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -1,4 +1,4 @@
|
||||||
/.idea/
|
/.idea/
|
||||||
/.gradle/
|
/.gradle/
|
||||||
/data/token.judd
|
/data/
|
||||||
/build/
|
/build/
|
||||||
|
|
|
@ -50,8 +50,6 @@ public class Main {
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
lgr.info("Ready to take over the world");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static JDA getJda() {
|
public static JDA getJda() {
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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.InfoCommand;
|
||||||
import de.limited_dev.lil_judd.commands.PingCommand;
|
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 de.limited_dev.lil_judd.commands.SetupFeatureCommand;
|
||||||
|
|
||||||
import java.util.concurrent.CopyOnWriteArrayList;
|
import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
|
@ -14,6 +15,7 @@ public class CommandManager {
|
||||||
commands.add(new PingCommand());
|
commands.add(new PingCommand());
|
||||||
commands.add(new InfoCommand());
|
commands.add(new InfoCommand());
|
||||||
commands.add(new SetupFeatureCommand());
|
commands.add(new SetupFeatureCommand());
|
||||||
|
commands.add(new RemoveFeatureCommand());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static CopyOnWriteArrayList<Command> getCommands() {
|
public static CopyOnWriteArrayList<Command> getCommands() {
|
||||||
|
|
|
@ -2,10 +2,16 @@ package de.limited_dev.lil_judd.features;
|
||||||
|
|
||||||
import de.limited_dev.lil_judd.Main;
|
import de.limited_dev.lil_judd.Main;
|
||||||
import de.limited_dev.lil_judd.features.storage.GuildTimePlannerStorage;
|
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.EmbeddedMessageHelper;
|
||||||
import de.limited_dev.lil_judd.util.Logger;
|
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.JDA;
|
||||||
import net.dv8tion.jda.api.entities.Guild;
|
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.Duration;
|
||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
|
@ -27,12 +33,12 @@ public class TimePlanner {
|
||||||
|
|
||||||
public static void registerMessageThread(){
|
public static void registerMessageThread(){
|
||||||
// get the current ZonedDateTime of your TimeZone
|
// 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.plusDays(DayUtil.getDelay(now.getDayOfWeek().name()));
|
||||||
ZonedDateTime nextNotifyDay = now.plusSeconds(10);
|
//ZonedDateTime nextNotifyDay = now.plusSeconds(10);
|
||||||
lgr.info(now.getDayOfMonth() + "");
|
lgr.info(nextNotifyDay.getDayOfWeek() + ", " + nextNotifyDay.getDayOfMonth() + "." + nextNotifyDay.getMonth() + "." + nextNotifyDay.getYear() + " / " + nextNotifyDay.getHour() + ":" + nextNotifyDay.getMinute());
|
||||||
|
|
||||||
//lgr.info(now.getDayOfWeek().name() + " " + nextNotifyDay.getDayOfWeek().name());
|
//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
|
// schedules the reminder at a fixed rate of one day
|
||||||
ScheduledExecutorService schedulerFirstLesson = Executors.newScheduledThreadPool(1);
|
ScheduledExecutorService schedulerFirstLesson = Executors.newScheduledThreadPool(1);
|
||||||
schedulerFirstLesson.scheduleAtFixedRate(() -> {
|
schedulerFirstLesson.scheduleAtFixedRate(() -> {
|
||||||
// send a message
|
// send a message
|
||||||
|
JDA jda = Main.getJda();
|
||||||
|
Set<Long> 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 = "<Msg Content>";
|
lgr.info("Send to Server " + jda.getGuildById(l).getName());
|
||||||
JDA jda = Main.getJda();
|
|
||||||
Set<Long> 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 Push Notification for time Management");
|
lgr.info("Terminating Thread...");
|
||||||
},
|
Thread.currentThread().interrupt();
|
||||||
initialDelayUntilNextNotification,
|
return;
|
||||||
TimeUnit.SECONDS.toSeconds(10),//TimeUnit.DAYS.toSeconds(7),
|
}
|
||||||
TimeUnit.SECONDS);
|
|
||||||
|
|
||||||
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,4 +41,22 @@ public class EmbeddedMessageHelper {
|
||||||
eb.setFooter(">" + dtf.format(now) + " - Automated Message");
|
eb.setFooter(">" + dtf.format(now) + " - Automated Message");
|
||||||
g.getTextChannelById(channelID).sendMessageEmbeds(eb.build()).queue();
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,12 @@ public class SlashCommandHelper {
|
||||||
new OptionData(OptionType.STRING, "feature", "The Feature you want to setup")
|
new OptionData(OptionType.STRING, "feature", "The Feature you want to setup")
|
||||||
.addChoice("Send Time finder", "timefinder")
|
.addChoice("Send Time finder", "timefinder")
|
||||||
, new OptionData(OptionType.CHANNEL, "channel", "The Channel the feature will post in.")
|
, 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();
|
).queue();
|
||||||
|
|
Reference in a new issue