From a7938ab332d8ff428b5902c41c6bf838e27311c6 Mon Sep 17 00:00:00 2001 From: MoonSangWon Date: Sun, 22 Oct 2023 21:22:51 +0900 Subject: [PATCH] fix : rollback --- .../java/mega/waka/ServerApplication.java | 1 + .../mega/waka/discord/DiscordListener.java | 252 +++++++++--------- 2 files changed, 133 insertions(+), 120 deletions(-) diff --git a/src/main/java/mega/waka/ServerApplication.java b/src/main/java/mega/waka/ServerApplication.java index 4ede6da..af7ff68 100644 --- a/src/main/java/mega/waka/ServerApplication.java +++ b/src/main/java/mega/waka/ServerApplication.java @@ -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 { diff --git a/src/main/java/mega/waka/discord/DiscordListener.java b/src/main/java/mega/waka/discord/DiscordListener.java index 830626b..235846e 100644 --- a/src/main/java/mega/waka/discord/DiscordListener.java +++ b/src/main/java/mega/waka/discord/DiscordListener.java @@ -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 memberMap = returnToMemberTimeByMap(); + List memberList = memberRepository.findAll(); + Map 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> 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 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 memberList2 = memberRepository.findAll(); + Map 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> 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.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 @@ -70,31 +154,8 @@ public void onReady(ReadyEvent event) { public void sendToSchedule(@NotNull ReadyEvent readyEvent){ sevenDaysWakaService.update_SevenDays(); - Map memberMap = returnToMemberTimeByMap(); - List> 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 returnToMemberTimeByMap (){ - Map memberMap = new HashMap<>(); List memberList = memberRepository.findAll(); + Map memberMap = new HashMap<>(); for(Member member : memberList){ Pattern pattern = Pattern.compile("\\b(\\d+) hrs (\\d+) min(s)?\\b"); Matcher matcher = pattern.matcher(member.getSevenDays()); @@ -103,92 +164,27 @@ public Map 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> sortedList){ + + List> 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 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)) @@ -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); }