Skip to content

Commit

Permalink
working working
Browse files Browse the repository at this point in the history
  • Loading branch information
vLuckyyy committed Dec 10, 2023
1 parent b8200aa commit 6f99521
Show file tree
Hide file tree
Showing 18 changed files with 357 additions and 231 deletions.
12 changes: 11 additions & 1 deletion src/main/java/com/eternalcode/discordapp/DiscordApp.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@
import com.eternalcode.discordapp.leveling.leaderboard.LeaderboardButtonController;
import com.eternalcode.discordapp.leveling.leaderboard.LeaderboardCommand;
import com.eternalcode.discordapp.leveling.leaderboard.LeaderboardService;
import com.eternalcode.discordapp.meeting.MeetingController;
import com.eternalcode.discordapp.meeting.MeetingService;
import com.eternalcode.discordapp.meeting.command.MeetingCommand;
import com.eternalcode.discordapp.meeting.event.MeetingCreateEvent;
import com.eternalcode.discordapp.observer.ObserverRegistry;
import com.eternalcode.discordapp.review.GitHubReviewService;
import com.eternalcode.discordapp.review.GitHubReviewTask;
Expand Down Expand Up @@ -71,6 +75,7 @@ public class DiscordApp {

private static ExperienceService experienceService;
private static LevelService levelService;
private static MeetingService meetingService;

public static void main(String... args) throws InterruptedException {
ObserverRegistry observerRegistry = new ObserverRegistry();
Expand Down Expand Up @@ -104,6 +109,7 @@ public static void main(String... args) throws InterruptedException {

experienceService = new ExperienceService(databaseManager, observerRegistry);
levelService = new LevelService(databaseManager);
meetingService = new MeetingService(databaseManager, observerRegistry);
}
catch (SQLException exception) {
Sentry.captureException(exception);
Expand Down Expand Up @@ -144,7 +150,10 @@ public static void main(String... args) throws InterruptedException {

// Leveling
new LevelCommand(levelService),
new LeaderboardCommand(leaderboardService)
new LeaderboardCommand(leaderboardService),

// meeting
new MeetingCommand(config, meetingService)
)
.build();

Expand Down Expand Up @@ -183,6 +192,7 @@ public static void main(String... args) throws InterruptedException {
.awaitReady();

observerRegistry.observe(ExperienceChangeEvent.class, new LevelController(levelConfig, levelService, jda));
observerRegistry.observe(MeetingCreateEvent.class, new MeetingController(jda, config));

GuildStatisticsService guildStatisticsService = new GuildStatisticsService(config, jda);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public void execute(SlashCommandEvent event) {
String members = String.valueOf(guild.getMembers().size());
String roles = String.valueOf(guild.getRoles().size());
String channels = String.valueOf(guild.getChannels().size());
String createdAt = DiscordTagFormat.offsetTime(guild.getTimeCreated());
String createdAt = DiscordTagFormat.toDiscordDate(guild.getTimeCreated());

MessageEmbed embeds = new EmbedBuilder()
.setTitle("🌐 | " + guild.getName() + "'s information")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ public void onButtonInteraction(ButtonInteractionEvent event) {
int totalRecords = this.leaderboardService.getTotalRecords();
int totalPages = this.leaderboardService.getTotalPages(totalRecords);

int currentPage = this.currentPageMap.getOrDefault(messageId, 1);
int oldPage = this.currentPageMap.getOrDefault(messageId, 1);
int currentPage = oldPage;

if (componentId.equals("leaderboard_next")) {
currentPage++;
Expand All @@ -50,9 +51,11 @@ public void onButtonInteraction(ButtonInteractionEvent event) {
}

currentPage = Math.max(1, Math.min(currentPage, totalPages));
this.currentPageMap.put(messageId, currentPage);

this.updateLeaderboard(event, currentPage);
if (oldPage != currentPage) {
this.currentPageMap.put(messageId, currentPage);
this.updateLeaderboard(event, currentPage);
}
}

private void updateLeaderboard(ButtonInteractionEvent event, int currentPage) {
Expand Down
33 changes: 29 additions & 4 deletions src/main/java/com/eternalcode/discordapp/meeting/Meeting.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,37 @@

public class Meeting {

private Set<Long> presentMembers = new HashSet<>();
private Set<Long> absentMembers = new HashSet<>();

private Long requesterId;

private Instant issuedAt;
private Instant startTime;
private final Set<Long> presentMembers = new HashSet<>();
private final Set<Long> absentMembers = new HashSet<>();

void addPresentMemeber(long id) {
this.presentMembers.add(id);
public Meeting(Long requesterId, Instant issuedAt, Instant startTime) {
this.requesterId = requesterId;
this.issuedAt = issuedAt;
this.startTime = startTime;
}

public Instant getIssuedAt() {
return issuedAt;
}

public Instant getStartTime() {
return startTime;
}

public Long getRequesterId() {
return requesterId;
}

public Set<Long> getPresentMembers() {
return presentMembers;
}

public Set<Long> getAbsentMembers() {
return absentMembers;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
package com.eternalcode.discordapp.meeting;

import com.eternalcode.discordapp.config.AppConfig;
import com.eternalcode.discordapp.meeting.event.MeetingCreateEvent;
import com.eternalcode.discordapp.observer.Observer;
import com.eternalcode.discordapp.util.DiscordTagFormat;
import com.eternalcode.discordapp.util.InstantFormatUtil;
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.MessageEmbed;
import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
import net.dv8tion.jda.api.interactions.components.buttons.Button;

import java.awt.*;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZoneOffset;

public class MeetingController implements Observer<MeetingCreateEvent> {

private final JDA jda;
private final AppConfig appConfig;

public MeetingController(JDA jda, AppConfig appConfig) {
this.jda = jda;
this.appConfig = appConfig;
}

@Override
public void update(MeetingCreateEvent event) {
Meeting meeting = event.meeting();
Long channelId = event.channelId();

TextChannel textChannelById = this.jda.getTextChannelById(channelId);

if (textChannelById == null) {
return;
}

Long requesterId = meeting.getRequesterId();

Member memberById = this.jda.getGuildById(this.appConfig.guildId)
.getMemberById(requesterId);

if (memberById == null) {
return;
}

String requesterName = memberById.getEffectiveName();

// TODO: add everyone ping at created meeting

Instant startTime = meeting.getStartTime();
ZoneOffset offset = ZoneId.systemDefault().getRules().getOffset(startTime);

String timeFieldValue = String.format("%s (%s)",
InstantFormatUtil.format(startTime),
DiscordTagFormat.toDiscordWhen(startTime.atOffset(offset)));

MessageEmbed embed = new EmbedBuilder()
.setTitle("📅 | Meeting requested")
.setColor(Color.decode(this.appConfig.embedSettings.meetingEmbed.color))
.setThumbnail(this.appConfig.embedSettings.meetingEmbed.thumbnail)
.setDescription("TODO: Some description, dodałbym wzmiankę o przewodniczącym spotkania")
.addField("Meeting Leader:", requesterName, false)
.addField("Time:", timeFieldValue, false)
.addField("Present", "", true)
.addField("Absent", "", true)
.setTimestamp(meeting.getIssuedAt())
.build();

Button presentButton = Button.primary("meeting:present:" + meeting.getIssuedAt().toEpochMilli(), "Present");
Button absentButton = Button.danger("meeting:absent:" + meeting.getIssuedAt().toEpochMilli(), "Absent");

textChannelById
.sendMessageEmbeds(embed)
.addActionRow(presentButton, absentButton)
.queue();
}

}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,42 +1,42 @@
package com.eternalcode.discordapp.meeting;

import com.eternalcode.discordapp.config.AppConfig;
import com.eternalcode.discordapp.config.ConfigManager;
import com.eternalcode.discordapp.meeting.command.child.CreateChild;
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.MessageEmbed;
import net.dv8tion.jda.api.entities.channel.Channel;

import java.awt.*;
import com.eternalcode.discordapp.database.DatabaseManager;
import com.eternalcode.discordapp.meeting.database.MeetingRepository;
import com.eternalcode.discordapp.meeting.database.MeetingRepositoryImpl;
import com.eternalcode.discordapp.meeting.event.MeetingCreateEvent;
import com.eternalcode.discordapp.observer.ObserverRegistry;

import java.time.Instant;
import java.util.ArrayList;

public class MeetingService {

private final AppConfig appConfig;
private final ConfigManager configManager;
private final CreateChild createChild;
private final MeetingRepository meetingRepository;
private final ObserverRegistry observerRegistry;

public MeetingService(DatabaseManager databaseManager, ObserverRegistry observerRegistry) {
this.meetingRepository = MeetingRepositoryImpl.create(databaseManager);
this.observerRegistry = observerRegistry;
}

public void createMeeting(Instant issuedAt, Instant startTime, Long requester, Long channelId) {
Meeting meeting = new Meeting(requester, issuedAt, startTime);

this.meetingRepository.saveMeeting(meeting);
this.observerRegistry.publish(new MeetingCreateEvent(meeting, requester, channelId));
}

public void deleteMeeting(Instant issuedAt, Instant startTime, Long requester) {
Meeting meeting = new Meeting(requester, issuedAt, startTime);

public MeetingService(AppConfig appConfig, ConfigManager configManager, CreateChild createChild) {
this.appConfig = appConfig;
this.configManager = configManager;
this.createChild = createChild;
this.meetingRepository.deleteMeeting(meeting);
}

public void createMeeting(String title, String description, String dateTime, Member requester, Member chairperson, Channel announcementChannel) {
ArrayList<Member> presentMembers = new ArrayList<>();
ArrayList<Member> absentMembers = new ArrayList<>();

MessageEmbed embed = new EmbedBuilder()
.setTitle("📅 | Meeting requested")
.setColor(Color.decode(this.appConfig.embedSettings.meetingEmbed.color))
.setThumbnail(this.appConfig.embedSettings.meetingEmbed.thumbnail)
.setDescription("")
.addField("Present", "", true)
.addField("Absent", "", true)
.setFooter("Requested by " + requester.getUser().getName(), requester.getAvatarUrl())
.setTimestamp(Instant.now())
.build();
public void findMeeting(Instant issuedAt, Instant startTime, Long requester) {
Meeting meeting = new Meeting(requester, issuedAt, startTime);

this.meetingRepository.findMeeting(meeting);
}

//zw

}
37 changes: 0 additions & 37 deletions src/main/java/com/eternalcode/discordapp/meeting/MeetingUser.java

This file was deleted.

Loading

0 comments on commit 6f99521

Please sign in to comment.