From 76da88e03f5697e59fa1005e85c022245bc7c7e8 Mon Sep 17 00:00:00 2001 From: taromati Date: Sat, 27 Apr 2024 00:03:09 +0900 Subject: [PATCH] =?UTF-8?q?=EB=9E=9C=EB=8D=A4=20=EB=A3=B0=EB=A0=9B=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80,=20=EC=BB=A8=ED=94=BC?= =?UTF-8?q?=EA=B7=B8=20=EB=A6=AC=EB=A1=9C=EB=93=9C=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 2 +- .../taromati/doneconnector/DoneConnector.java | 25 +++++++++-- .../me/taromati/doneconnector/Logger.java | 6 +++ .../doneconnector/chzzk/ChzzkWebSocket.java | 44 ++++++++++--------- src/main/resources/config.yml | 1 + src/main/resources/plugin.yml | 2 +- 6 files changed, 55 insertions(+), 25 deletions(-) diff --git a/build.gradle b/build.gradle index a6597ae..1ac04f2 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ plugins { } group = 'me.taromati' -version = '1.0.0' +version = '1.1.0' repositories { mavenCentral() diff --git a/src/main/java/me/taromati/doneconnector/DoneConnector.java b/src/main/java/me/taromati/doneconnector/DoneConnector.java index ef65421..6e31ef8 100644 --- a/src/main/java/me/taromati/doneconnector/DoneConnector.java +++ b/src/main/java/me/taromati/doneconnector/DoneConnector.java @@ -15,9 +15,11 @@ import java.util.*; public final class DoneConnector extends JavaPlugin implements Listener { - public static boolean debug; public static Plugin plugin; + public static boolean debug; + public static boolean random; + private static final List> chzzkUserList = new ArrayList<>(); private static final HashMap> donationRewards = new HashMap<>(); List chzzkWebSocketList = new ArrayList<>(); @@ -59,10 +61,19 @@ public void onDisable() { Logger.info(ChatColor.GREEN + "플러그인 비활성화 완료."); } + private void clearConfig() { + debug = false; + random = false; + chzzkUserList.clear(); + donationRewards.clear(); + reloadConfig(); + } + private void loadConfig() throws DoneException { this.saveResource("config.yml", false); try { debug = this.getConfig().getBoolean("디버그"); + random = this.getConfig().getBoolean("랜덤 보상"); } catch (Exception e) { throw new DoneException(ExceptionCode.CONFIG_LOAD_ERROR); } @@ -156,14 +167,22 @@ public boolean onCommand(CommandSender sender, Command command, String label, St } else { try { if (args[0].equalsIgnoreCase("on")) { - Logger.info(ChatColor.GREEN + "후원 기능을 활성화 합니다."); + Logger.info(ChatColor.YELLOW + "후원 기능을 활성화 합니다."); connectChzzk(chzzkUserList); } else if (args[0].equalsIgnoreCase("off")) { Logger.info(ChatColor.YELLOW + "후원 기능을 비활성화 합니다."); disconnectChzzk(chzzkWebSocketList); } else if (args[0].equalsIgnoreCase("reconnect")) { Logger.info(ChatColor.YELLOW + "후원 기능을 재접속합니다."); + Logger.say(ChatColor.YELLOW + "후원 기능을 재접속합니다."); + disconnectChzzk(chzzkWebSocketList); + connectChzzk(chzzkUserList); + } else if (args[0].equalsIgnoreCase("reload")) { + Logger.info(ChatColor.YELLOW + "후원 설정을 다시 불러옵니다."); + Logger.say(ChatColor.YELLOW + "후원 설정을 다시 불러옵니다."); disconnectChzzk(chzzkWebSocketList); + clearConfig(); + loadConfig(); connectChzzk(chzzkUserList); } else { return false; @@ -181,7 +200,7 @@ public List onTabComplete(CommandSender sender, Command cmd, String labe if (sender.isOp() == false) { return Collections.emptyList(); } else if (args.length == 1) { - List commandList = new ArrayList<>(Arrays.asList("on", "off", "reconnect")); + List commandList = new ArrayList<>(Arrays.asList("on", "off", "reconnect", "reload")); if (args[0].isEmpty()) { return commandList; diff --git a/src/main/java/me/taromati/doneconnector/Logger.java b/src/main/java/me/taromati/doneconnector/Logger.java index 3c2d7bd..ae97a73 100644 --- a/src/main/java/me/taromati/doneconnector/Logger.java +++ b/src/main/java/me/taromati/doneconnector/Logger.java @@ -9,4 +9,10 @@ public class Logger { public static void info(String msg) { Bukkit.getConsoleSender().sendMessage(prefix + msg); } + + public static void say(String msg) { + String command = "say " + msg; + Bukkit.getScheduler() + .callSyncMethod(DoneConnector.plugin, () -> Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command)); + } } diff --git a/src/main/java/me/taromati/doneconnector/chzzk/ChzzkWebSocket.java b/src/main/java/me/taromati/doneconnector/chzzk/ChzzkWebSocket.java index f851186..c9c6783 100644 --- a/src/main/java/me/taromati/doneconnector/chzzk/ChzzkWebSocket.java +++ b/src/main/java/me/taromati/doneconnector/chzzk/ChzzkWebSocket.java @@ -11,10 +11,7 @@ import org.json.simple.parser.JSONParser; import java.net.URI; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; public class ChzzkWebSocket extends WebSocketClient { private final String chatChannelId; @@ -112,26 +109,32 @@ public void onMessage(String message) { int payAmount = Integer.parseInt(extraObject.get("payAmount").toString()); Logger.info(ChatColor.YELLOW + nickname + ChatColor.WHITE + "님께서 " + ChatColor.GREEN + payAmount + "원" + ChatColor.WHITE + "을 후원해주셨습니다."); + + List commands = null; if (donationRewards.containsKey(payAmount)) { + commands = donationRewards.get(payAmount); + } else { + commands = donationRewards.get(0); + } - List commands = donationRewards.get(payAmount); + if (commands == null) { + return; + } - for (String command : commands) { - String tempCommand = command; - tempCommand = tempCommand.replaceAll("%tag%", chzzkUser.get("tag")); - tempCommand = tempCommand.replaceAll("%name%", nickname); - tempCommand = tempCommand.replaceAll("%amount%", String.valueOf(payAmount)); - tempCommand = tempCommand.replaceAll("%message%", msg); - String finalCommand = tempCommand; - Bukkit.getScheduler() - .callSyncMethod(DoneConnector.plugin, () -> Bukkit.dispatchCommand(Bukkit.getConsoleSender(), finalCommand)); - } + if (DoneConnector.random) { + Random rand = new Random(); + int randomIndex = rand.nextInt(commands.size()); + String command = commands.get(randomIndex); + + String tempCommand = command; + tempCommand = tempCommand.replaceAll("%tag%", chzzkUser.get("tag")); + tempCommand = tempCommand.replaceAll("%name%", nickname); + tempCommand = tempCommand.replaceAll("%amount%", String.valueOf(payAmount)); + tempCommand = tempCommand.replaceAll("%message%", msg); + String finalCommand = tempCommand; + Bukkit.getScheduler() + .callSyncMethod(DoneConnector.plugin, () -> Bukkit.dispatchCommand(Bukkit.getConsoleSender(), finalCommand)); } else { - List commands = donationRewards.get(0); - if (commands == null) { - return; - } - for (String command : commands) { String tempCommand = command; tempCommand = tempCommand.replaceAll("%tag%", chzzkUser.get("tag")); @@ -143,6 +146,7 @@ public void onMessage(String message) { .callSyncMethod(DoneConnector.plugin, () -> Bukkit.dispatchCommand(Bukkit.getConsoleSender(), finalCommand)); } } + } catch (Exception e) { Logger.info(ChatColor.RED + "치지직 메시지 파싱 중 오류가 발생했습니다."); Logger.info(ChatColor.LIGHT_PURPLE + e.getMessage()); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 89ab8a7..4f450a3 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -6,6 +6,7 @@ 식별자: f722959d1b8e651bd56209b343932c01 마크닉네임: kanna +랜덤 보상: false 후원 보상: 0: - say 가격을 0원으로 쓰면 설정 안된 가격을 의미합니다. diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index e33b381..fe366cc 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -5,4 +5,4 @@ api-version: '1.20' commands: done: description: 후원 기능 상태를 변경. - usage: / [on|off|reconnect] \ No newline at end of file + usage: / [on|off|reconnect|reload] \ No newline at end of file