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/
|
||||
/.gradle/
|
||||
/data/token.judd
|
||||
/data/
|
||||
/build/
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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.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<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.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());
|
||||
|
||||
|
@ -53,22 +59,64 @@ public class TimePlanner {
|
|||
ScheduledExecutorService schedulerFirstLesson = Executors.newScheduledThreadPool(1);
|
||||
schedulerFirstLesson.scheduleAtFixedRate(() -> {
|
||||
// send a message
|
||||
|
||||
String msg = "<Msg Content>";
|
||||
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) {
|
||||
//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());
|
||||
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);
|
||||
}
|
||||
lgr.info("Send Push Notification for time Management");
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
lgr.info("Send to Server " + jda.getGuildById(l).getName());
|
||||
}
|
||||
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.SECONDS.toSeconds(10),//TimeUnit.DAYS.toSeconds(7),
|
||||
TimeUnit.DAYS.toSeconds(7),
|
||||
TimeUnit.SECONDS);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
Reference in a new issue