Skip to content

Commit

Permalink
fix : rollback
Browse files Browse the repository at this point in the history
  • Loading branch information
MoonSangWon committed Oct 22, 2023
1 parent 34adec8 commit a7938ab
Show file tree
Hide file tree
Showing 2 changed files with 133 additions and 120 deletions.
1 change: 1 addition & 0 deletions src/main/java/mega/waka/ServerApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ public static void main(String[] args) {
.build();
jda.upsertCommand("개인순위","금주 와카타임 개인순위를 제공합니다.").setGuildOnly(true).queue();
jda.upsertCommand("전체순위","금주 와카타임 전체순위를 제공합니다.").setGuildOnly(true).queue();
jda.upsertCommand("ping","pong").setGuildOnly(true).queue();
}
@Component
class DiscordToken {
Expand Down
252 changes: 132 additions & 120 deletions src/main/java/mega/waka/discord/DiscordListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,32 +35,116 @@ public DiscordListener(MemberRepository memberRepository, SevenDaysWakaService s
this.sevenDaysWakaService = sevenDaysWakaService;
}
@Override
public void onSlashCommandInteraction(SlashCommandInteractionEvent event) { //test->1116650046797135992, 1090659127417638943
if(!event.getChannel().getId().equals("1116650046797135992")) return;
public void onSlashCommandInteraction(SlashCommandInteractionEvent event) {
if(!event.getChannel().getId().equals("1090659127417638943")) return;
super.onSlashCommandInteraction(event);

User user = event.getUser();
StringBuilder messange;
sevenDaysWakaService.update_SevenDays();
EmbedBuilder embed = setEmbed();
User user = event.getUser();
String returnMessage = "";
String newMessage = "!!!!!***근무 시간 미달자 ***!!!! \n";
EmbedBuilder embed = new EmbedBuilder();
embed.addField("https://megabrain.kr/waka", "", false);
embed.setThumbnail("https://avatars.githubusercontent.com/inje-megabrain");
embed.setFooter("메가브레인 와카 봇", "https://avatars.githubusercontent.com/inje-megabrain");
switch(event.getName()){
case "전체순위" :
Map<String, Integer> memberMap = returnToMemberTimeByMap();
List<Member> memberList = memberRepository.findAll();
Map<String, Integer> memberMap = new HashMap<>();
for(Member member : memberList){
Pattern pattern = Pattern.compile("\\b(\\d+) hrs (\\d+) min(s)?\\b");
Matcher matcher = pattern.matcher(member.getSevenDays());
if(matcher.find()){
int hour = Integer.parseInt(matcher.group(1));
int minute = Integer.parseInt(matcher.group(2));
memberMap.put(member.getName(),hour*60+minute);
}
else{
memberMap.put(member.getName(),0);
System.out.println(member.getName());
}
}
List<Map.Entry<String,Integer>> sortedList = new ArrayList<>(memberMap.entrySet());
messange = returnToOverallRanking(sortedList);
Collections.sort(sortedList, Map.Entry.comparingByValue(Comparator.reverseOrder()));
embed.setTitle(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"))+" 기준 " +"와카보드 전체 순위");
embed.setDescription(messange.toString());
memberMap.clear();
sortedList.clear();
embed.setColor(Color.green);
int cnt=0;
for(int i=0;i<sortedList.size();i++){
int totalMinutes = sortedList.get(i).getValue();
int hours = totalMinutes / 60;
int minutes = totalMinutes % 60;
if (totalMinutes < 10 * 60) {
if (totalMinutes > 0) {
newMessage += (i + 1) + " 등 - " + sortedList.get(i).getKey() + "\n -> " + hours + "시간 " + minutes + "분\n";
System.out.println(sortedList.get(i).getValue());
} else {
newMessage += (i + 1) + " 등 - " + sortedList.get(i).getKey() + "\n -> 0시간 0분\n";
}
} else {
returnMessage += (i + 1) + " 등 - " + sortedList.get(i).getKey() + "\n -> " + hours + "시간 " + minutes + "분\n";
}
}
if(cnt==0) newMessage += "현재 근무 시간 미달자가 없습니다.\n";
embed.setDescription(returnMessage +"\n"+ newMessage);
break;
case "개인순위" :
Member member = findMemberNameByDiscord_Id(user.getName());
messange = returnToPersonalRanking(member);
embed.setTitle(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"))+" 기준 " +"와카보드 개인 순위");
embed.setDescription(messange.toString());
Member member;
newMessage ="";
if(user.getName().equals("_ung_")) member = memberRepository.findByName("신종웅");
else if(user.getName().equals("jadru")) member = memberRepository.findByName("박영건");
else if(user.getName().equals("haroya")) member = memberRepository.findByName("김동현");
else if(user.getName().equals("LeeByeongJin")) member = memberRepository.findByName("이병진");
else if(user.getName().equals("ddeltas")) member = memberRepository.findByName("구본웅");
else if(user.getName().equals("jyh")) member = memberRepository.findByName("정용휘");
else if(user.getName().equals("gimuhyeon")) member = memberRepository.findByName("김우현");
else if(user.getName().equals("byeongseok")) member = memberRepository.findByName("성병석");
else if(user.getName().equals("훈정이")) member = memberRepository.findByName("김훈정");
else if(user.getName().equals("보경")) member = memberRepository.findByName("문보경");
else if(user.getName().equals("Zn")) member = memberRepository.findByName("심아연");
else if(user.getName().equals("Rod12")) member = memberRepository.findByName("이욱진");
else if(user.getName().equals("재민")) member = memberRepository.findByName("김재민");
else if(user.getName().equals("hongjihyeon")) member = memberRepository.findByName("홍지현");
else{
member = memberRepository.findByName(user.getName());
}

if(member ==null) returnMessage = "해당 멤버가 등록되지 않았습니다.";
else{
List<Member> memberList2 = memberRepository.findAll();
Map<String, Integer> memberMap2 = new HashMap<>();
for(Member member2 : memberList2){
Pattern pattern = Pattern.compile("\\b(\\d+) hrs (\\d+) min(s)?\\b");
Matcher matcher = pattern.matcher(member2.getSevenDays());
if(matcher.find()){
int hour = Integer.parseInt(matcher.group(1));
int minute = Integer.parseInt(matcher.group(2));
memberMap2.put(member2.getName(),(hour*60)+minute);
}
else memberMap2.put(member2.getName(),0);
}
int cnt2=0;
List<Map.Entry<String,Integer>> sortedList2 = new ArrayList<>(memberMap2.entrySet());
Collections.sort(sortedList2, Map.Entry.comparingByValue(Comparator.reverseOrder()));
embed.setTitle(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"))+" 기준 " +"와카보드 개인 순위");
embed.setColor(Color.green);
for(int i=0;i<sortedList2.size();i++){
if(sortedList2.get(i).getKey().equals(member.getName())){
if(sortedList2.get(i).getValue() <=10*60) {
cnt2++;
newMessage += i+1+" 등 - "+member.getName()+"\n -> "+sortedList2.get(i).getValue()/60+"시간 "+sortedList2.get(i).getValue()%60+"분\n";
}
else if(sortedList2.get(i).getValue() > 10*60)
returnMessage += (i+1)+"등 - "+member.getName()+"\n -> "+sortedList2.get(i).getValue()/60+"시간 "+sortedList2.get(i).getValue()%60+"분\n";
else newMessage += (i+1)+" 등 - "+member.getName()+"\n -> "+0+" 시간 "+0+"분\n";
}
}
if(cnt2==0) newMessage += member.getName() + "님은 근무 시간 미달자가 아닙니다.\n";
else newMessage += member.getName() + "님은 근무 시간 미달자입니다.\n";

embed.setDescription(returnMessage +"\n"+ newMessage);
}
break;
}
event.replyEmbeds(embed.build()).setEphemeral(true).queue();
event.replyEmbeds(embed.build()).setEphemeral(false).queue();
}

@Override
Expand All @@ -70,31 +154,8 @@ public void onReady(ReadyEvent event) {

public void sendToSchedule(@NotNull ReadyEvent readyEvent){
sevenDaysWakaService.update_SevenDays();
Map<String, Integer> memberMap = returnToMemberTimeByMap();
List<Map.Entry<String,Integer>> sortedList = new ArrayList<>(memberMap.entrySet());
StringBuilder messange = returnToOverallRanking(sortedList);
// in seconds
long initialDelay = calculate_NextFriday_FromToday_ToSecond();

ScheduledExecutorService schedulerFirstLesson = Executors.newScheduledThreadPool(1);
schedulerFirstLesson.scheduleAtFixedRate(() -> {
readyEvent.getJDA().getTextChannelById("1090659127417638943").sendMessage("이번주 와카타임 랭킹입니다. !").setEmbeds(
new EmbedBuilder().addField("https://megabrain.kr/waka", "", false)
.setColor(Color.green)
.setTitle(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"))+" 기준 " +"와카보드 개인 순위")
.setThumbnail("https://avatars.githubusercontent.com/inje-megabrain")
.setFooter("메가브레인 와카 봇", "https://avatars.githubusercontent.com/inje-megabrain")
.setDescription(messange.toString())
.build()
).queue();
},
initialDelay,
TimeUnit.DAYS.toSeconds(7),
TimeUnit.SECONDS);
}
public Map<String, Integer> returnToMemberTimeByMap (){
Map<String, Integer> memberMap = new HashMap<>();
List<Member> memberList = memberRepository.findAll();
Map<String, Integer> memberMap = new HashMap<>();
for(Member member : memberList){
Pattern pattern = Pattern.compile("\\b(\\d+) hrs (\\d+) min(s)?\\b");
Matcher matcher = pattern.matcher(member.getSevenDays());
Expand All @@ -103,92 +164,27 @@ public Map<String, Integer> returnToMemberTimeByMap (){
int minute = Integer.parseInt(matcher.group(2));
memberMap.put(member.getName(),hour*60+minute);
}
else{
memberMap.put(member.getName(),0);
}
}
return memberMap;
}
public Member findMemberNameByDiscord_Id (String discord_id){
Member findMember;
if(discord_id.equals("_ung_")) findMember = memberRepository.findByName("신종웅");
else if(discord_id.equals("jadru")) findMember = memberRepository.findByName("박영건");
else if(discord_id.equals("haroya")) findMember = memberRepository.findByName("김동현");
else if(discord_id.equals("LeeByeongJin")) findMember = memberRepository.findByName("이병진");
else if(discord_id.equals("ddeltas")) findMember = memberRepository.findByName("구본웅");
else if(discord_id.equals("jyh")) findMember = memberRepository.findByName("정용휘");
else if(discord_id.equals("gimuhyeon")) findMember = memberRepository.findByName("김우현");
else if(discord_id.equals("byeongseok")) findMember = memberRepository.findByName("성병석");
else if(discord_id.equals("훈정이")) findMember = memberRepository.findByName("김훈정");
else if(discord_id.equals("보경")) findMember = memberRepository.findByName("문보경");
else if(discord_id.equals("Zn")) findMember = memberRepository.findByName("심아연");
else if(discord_id.equals("Rod12")) findMember = memberRepository.findByName("이욱진");
else if(discord_id.equals("재민")) findMember = memberRepository.findByName("김재민");
else if(discord_id.equals("hongjihyeon")) findMember = memberRepository.findByName("홍지현");
else{
findMember = memberRepository.findByName(discord_id);
else memberMap.put(member.getName(),0);
}
return findMember;
}
public StringBuilder returnToOverallRanking(List<Map.Entry<String,Integer>> sortedList){

List<Map.Entry<String,Integer>> sortedList = new ArrayList<>(memberMap.entrySet());
Collections.sort(sortedList, Map.Entry.comparingByValue(Comparator.reverseOrder()));
StringBuilder message = new StringBuilder();
String newMessage = "!!!!!***근무 시간 미달자 ***!!!! \n";
String returnMessage = "";
int cnt=0;
for(int i=0;i<sortedList.size();i++){
int totalMinutes = sortedList.get(i).getValue();
int hours = totalMinutes / 60;
int minutes = totalMinutes % 60;
if (totalMinutes < 10 * 60) {
if (totalMinutes > 0) {
message.append((i + 1) + " 등 - " + sortedList.get(i).getKey() + "\n -> " + hours + "시간 " + minutes + "분\n");
} else {
++cnt;
if(cnt==1) message.append("****** 근무시간 미달자 ******");
message.append((i + 1) + " 등 - " + sortedList.get(i).getKey() + "\n -> 0시간 0분\n");
}
} else {
message.append((i + 1) + " 등 - " + sortedList.get(i).getKey() + "\n -> " + hours + "시간 " + minutes + "분\n");
if(sortedList.get(i).getValue() <=10*60){
cnt++;
newMessage += (i+1)+" 등 - "+sortedList.get(i).getKey()+"\n -> "+sortedList.get(i).getValue()/60+"시간 "+sortedList.get(i).getValue()%60+"분\n";
}
else if(sortedList.get(i).getValue() > 10*60)
returnMessage += (i+1)+" 등 - "+sortedList.get(i).getKey()+"\n -> "+sortedList.get(i).getValue()/60+"시간 "+sortedList.get(i).getValue()%60+"분\n";
else newMessage += (i+1)+" 등 - "+sortedList.get(i).getKey()+"\n -> "+0+" 시간 "+0+"분\n";
}
if(cnt==0) message.append("현재 근무 시간 미달자가 없습니다.\n");
return message;
}
public StringBuilder returnToPersonalRanking(Member member){
StringBuilder message = new StringBuilder();
Pattern pattern = Pattern.compile("\\b(\\d+) hrs (\\d+) min(s)?\\b");
Matcher matcher = pattern.matcher(member.getSevenDays());
int hour =0;
int minute = 0;
if(matcher.find()){
hour = Integer.parseInt(matcher.group(1));
minute = Integer.parseInt(matcher.group(2));
}
int cnt=0;
int totalTime=hour*60+minute;
if(totalTime <=10*60) {
cnt++;
message.append( "- "+member.getName()+"\n"+"-> "+hour+" 시간 "+minute+" 분\n");
}
else if(totalTime > 10*60){
message.append("- "+member.getName()+"\n"+"-> "+hour+" 시간 "+minute+" 분\n");
}
else message.append("- "+member.getName()+"\n"+"-> 이번주 근무 시간이 없습니다.");

if(cnt==0) message.append(member.getName() + "님은 근무 시간 미달자가 아닙니다.\n");
else message.append(member.getName() + "님은 근무 시간 미달자입니다.\n");
if(cnt==0) newMessage += "현재 근무 시간 미달자가 없습니다.\n";
String message = "현재 기준 순위입니다. \n"+returnMessage + "\n" + newMessage;

return message;
}
public EmbedBuilder setEmbed(){
EmbedBuilder embed = new EmbedBuilder();
embed.addField("https://megabrain.kr/waka", "", false);
embed.setThumbnail("https://avatars.githubusercontent.com/inje-megabrain");
embed.setFooter("메가브레인 와카 봇", "https://avatars.githubusercontent.com/inje-megabrain");
embed.setColor(Color.green);
return embed;
}

public long calculate_NextFriday_FromToday_ToSecond(){
// get the current ZonedDateTime of your TimeZone
ZonedDateTime now = ZonedDateTime.now(ZoneId.of("Asia/Seoul"));

ZonedDateTime nextFriday = now.with(TemporalAdjusters.next(DayOfWeek.FRIDAY))
Expand All @@ -203,7 +199,23 @@ public long calculate_NextFriday_FromToday_ToSecond(){

// duration between now and the beginning of the next first lesson
Duration durationUntil = Duration.between(now, nextFriday);
return durationUntil.getSeconds();
long initialDelay = durationUntil.getSeconds();

ScheduledExecutorService schedulerFirstLesson = Executors.newScheduledThreadPool(1);
schedulerFirstLesson.scheduleAtFixedRate(() -> {
readyEvent.getJDA().getTextChannelById("1090659127417638943").sendMessage("이번주 와카타임 랭킹입니다. !").setEmbeds(
new EmbedBuilder().addField("https://megabrain.kr/waka", "", false)
.setColor(Color.green)
.setTitle(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"))+" 기준 " +"와카보드 개인 순위")
.setThumbnail("https://avatars.githubusercontent.com/inje-megabrain")
.setFooter("메가브레인 와카 봇", "https://avatars.githubusercontent.com/inje-megabrain")
.setDescription(message)
.build()
).queue();
},
initialDelay,
TimeUnit.DAYS.toSeconds(7),
TimeUnit.SECONDS);
}


Expand Down

0 comments on commit a7938ab

Please sign in to comment.