Skip to content

Commit

Permalink
[Finish] Finish Working on the project
Browse files Browse the repository at this point in the history
  • Loading branch information
Lea-Bar committed Feb 16, 2025
1 parent 7ef6baf commit 8143d6b
Show file tree
Hide file tree
Showing 6 changed files with 162 additions and 12 deletions.
37 changes: 31 additions & 6 deletions src/main/java/fr/leabar/iutbot/commands/CommandManager.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package fr.leabar.iutbot.commands;

import fr.leabar.iutbot.config.ConfigManager;
import fr.leabar.iutbot.config.schedule.ScheduleWrapper;
import fr.leabar.iutbot.modules.ModuleManager;
import fr.leabar.iutbot.modules.discord.BotModule;
import lombok.AllArgsConstructor;
Expand All @@ -8,6 +10,7 @@
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import net.dv8tion.jda.api.interactions.commands.build.Commands;
import net.dv8tion.jda.api.interactions.commands.build.OptionData;
import net.dv8tion.jda.api.interactions.commands.build.SlashCommandData;

import java.lang.reflect.Method;
Expand All @@ -28,15 +31,37 @@ public void registerCommands(Object commandClass) {
private void registerCommand(Object commandClass, Method method, SlashCommand slashCommand) {
SlashCommandData data = Commands.slash(slashCommand.name(),
slashCommand.description());
ScheduleWrapper scheduleWrapper = ConfigManager.getInstance().getScheduleWrapper();
for(String options : slashCommand.options()){
String[] parts = options.split(":");
if (parts.length >= 3) {
data.addOption(
OptionType.valueOf(parts[0].toUpperCase()),
parts[1],
parts[2],
parts.length > 3 && Boolean.parseBoolean(parts[3])
);
switch (parts[0].toUpperCase()) {
case "DATE":
OptionData optionData = new OptionData(OptionType.STRING, parts[1], parts[2], parts.length > 3 && Boolean.parseBoolean(parts[3]));
optionData.addChoice("Lundi", "Lundi");
optionData.addChoice("Mardi", "Mardi");
optionData.addChoice("Mercredi", "Mercredi");
optionData.addChoice("Jeudi", "Jeudi");
optionData.addChoice("Vendredi", "Vendredi");
optionData.addChoice("Samedi", "Samedi");
data.addOptions(optionData);
break;
case "CLASS":
OptionData optionData2 = new OptionData(OptionType.STRING, parts[1], parts[2], parts.length > 3 && Boolean.parseBoolean(parts[3]));
scheduleWrapper.getScheduleConfigs().forEach(config -> {
optionData2.addChoice(config.getSchoolClass(), config.getSchoolClass());
});
data.addOptions(optionData2);
break;
default:
data.addOption(
OptionType.valueOf(parts[0].toUpperCase()),
parts[1],
parts[2],
parts.length > 3 && Boolean.parseBoolean(parts[3])
);
break;
}
}
}
commands.put(slashCommand.name(), new CommandInfo(commandClass, method, slashCommand));
Expand Down
120 changes: 120 additions & 0 deletions src/main/java/fr/leabar/iutbot/commands/schedule/ScheduleCommand.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
package fr.leabar.iutbot.commands.schedule;

import fr.leabar.iutbot.commands.SlashCommand;
import fr.leabar.iutbot.schedule.Schedule;
import fr.leabar.iutbot.schedule.lesson.Lesson;
import fr.leabar.iutbot.schedule.manager.ScheduleManager;
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Role;
import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction;

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.util.List;
import java.util.Locale;
import java.util.Optional;

public class ScheduleCommand {
@SlashCommand(
name = "edt",
description = "Visionne ton emploi du temps du jour",
options = {"DATE:date:Date du jour:false", "CLASS:classe:Classe:false"}
)
public void edt(SlashCommandInteraction event){
Member member = event.getMember();
Schedule schedule = null;

if (event.getOptions().isEmpty()) {
for (Role role : member.getRoles()) {
System.out.println(role.getId()+" "+role.getName());
Optional<Schedule> scheduleOptional = ScheduleManager.getInstance().getSchedule(Long.parseLong(role.getId()));
System.out.println(scheduleOptional.isPresent());
if (scheduleOptional.isPresent()) {
schedule = scheduleOptional.get();
break;
}
}
} else {
if (event.getOption("classe") != null) {
String classe = event.getOption("classe").getAsString();
Optional<Schedule> scheduleOptional = ScheduleManager.getInstance().getSchedule(classe);
if (scheduleOptional.isPresent()) {
schedule = scheduleOptional.get();
}
}
}

if (schedule == null) {
event.reply(":x: **L'emploi du temps n'a pas été trouvé ** :x:").queue();
return;
}

loadScheduleIfNeeded(schedule);
LocalDate date = LocalDate.now();

if (event.getOption("date") != null) {
date = getDateFromDayString(event.getOption("date").getAsString());
}

List<Lesson> lessons = schedule.getLessonsByDate(date);
EmbedBuilder embedBuilder = new EmbedBuilder()
.setTitle("Emploi du temps du " + date.toString());

if (lessons.isEmpty()) {
embedBuilder.setColor(0xe74c3c)
.addField("Aucun cours", "Aujourd'hui c'est rompish !", false);
} else {
for (Lesson lesson : lessons) {
String startHour = String.format("%02d", lesson.getStart().getHour());
String startMinute = String.format("%02d", lesson.getStart().getMinute());
String endHour = String.format("%02d", lesson.getEnd().getHour());
String endMinute = String.format("%02d", lesson.getEnd().getMinute());
embedBuilder.addField(
lesson.getSubject(),
"Commence à " + startHour + "h" + startMinute +
" jusqu'à " + endHour + "h" + endMinute +
"\nEnseignant: " + (lesson.getTeacher().isEmpty() ? "Aucun" : lesson.getTeacher()) +
"\nSalle: " + (lesson.getRoom().isEmpty() ? "Aucun" : lesson.getRoom()),
false
);
}
embedBuilder.setColor(0x27ae60);
}

event.replyEmbeds(embedBuilder.build()).queue();
}

private void loadScheduleIfNeeded(Schedule schedule){
if(!schedule.isLoaded() || schedule.getLastTimeLoaded()+(30*60*1000) <= System.currentTimeMillis()){
ScheduleManager.getInstance().loadSchedule(schedule);
schedule.setLoaded(true);
schedule.setLastTimeLoaded(System.currentTimeMillis());
}
}

public static LocalDate getDateFromDayString(String day) {

String[] jours = {"Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"};

LocalDate today = LocalDate.now();
DayOfWeek todayDayOfWeek = today.getDayOfWeek();

int targetIndex = -1;
for (int i = 0; i < jours.length; i++) {
if (jours[i].equals(day)) {
targetIndex = i;
break;
}
}

if (targetIndex == -1) return today;
int todayIndex = todayDayOfWeek.getValue() - 1;

if (targetIndex > todayIndex) {
return today.minusDays(todayIndex + (7 - targetIndex));
} else {
return today.minusDays(todayIndex - targetIndex);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,6 @@
public class ScheduleConfig {
private String urlS1;
private String urlS2;
private int roleId;
private long roleId;
private String schoolClass;
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import fr.leabar.iutbot.commands.CommandManager;
import fr.leabar.iutbot.commands.info.InfoCommand;
import fr.leabar.iutbot.commands.schedule.ScheduleCommand;
import fr.leabar.iutbot.events.CommandEvents;
import fr.leabar.iutbot.modules.IModule;
import fr.leabar.iutbot.modules.ModuleManager;
Expand All @@ -18,6 +19,7 @@ public CompletableFuture<Boolean> start() {
return CompletableFuture.supplyAsync(() -> {
this.manager = new CommandManager();
manager.registerCommands(new InfoCommand());
manager.registerCommands(new ScheduleCommand());
ModuleManager.getModule(BotModule.class).ifPresent(module -> {
module.getJdaInstance().addEventListener(new CommandEvents(manager));
});
Expand Down
11 changes: 7 additions & 4 deletions src/main/java/fr/leabar/iutbot/schedule/Schedule.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import fr.leabar.iutbot.schedule.lesson.Lesson;
import lombok.Getter;
import lombok.Setter;

import java.time.LocalDate;
import java.util.ArrayList;
Expand All @@ -12,11 +13,13 @@
public class Schedule {
private final List<Lesson> lessons;
private final String schoolClass;
private final int roleID;
private final boolean loaded;
private final long lastTimeLoaded;
private final long roleID;
@Setter
private boolean loaded;
@Setter
private long lastTimeLoaded;

public Schedule(String schoolClass, int roleID) {
public Schedule(String schoolClass, long roleID) {
this.lessons = new ArrayList<>();
this.schoolClass = schoolClass;
this.roleID = roleID;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ public Optional<Schedule> getSchedule(String schoolClass) {
return SCHEDULES.stream().filter(schedule -> schedule.getSchoolClass().equals(schoolClass)).findFirst();
}

public Optional<Schedule> getSchedule(int roleID) {
public Optional<Schedule> getSchedule(long roleID) {
return SCHEDULES.stream().filter(schedule -> schedule.getRoleID() == roleID).findFirst();
}
}

0 comments on commit 8143d6b

Please sign in to comment.