From 348c6f0b633d797692ba06071f4141be9b57c554 Mon Sep 17 00:00:00 2001 From: TheKing-OfTime Date: Fri, 1 Sep 2023 23:41:01 +0300 Subject: [PATCH 1/6] Refactor downloading updates --- resources/plugin.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/plugin.yml b/resources/plugin.yml index c372f59..25596bb 100644 --- a/resources/plugin.yml +++ b/resources/plugin.yml @@ -1,6 +1,6 @@ name: OpenDiscordAuth main: ru.fazziclay.opendiscordauth.Main -version: 1.8.8 +version: 1.8.9 website: "https://github.com/BVN4/OpenDiscordAuth/" authors: ["https://github.com/BVN4", "https://github.com/fazziclay/", "https://github.com/TheKing-OfTime"] load: STARTUP From cc233e5280308472c6b9bb440a3c2979eeeea3fa Mon Sep 17 00:00:00 2001 From: TheKing-OfTime Date: Fri, 1 Sep 2023 23:41:46 +0300 Subject: [PATCH 2/6] Revert "Refactor downloading updates" This reverts commit 348c6f0b633d797692ba06071f4141be9b57c554. --- resources/plugin.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/plugin.yml b/resources/plugin.yml index 25596bb..c372f59 100644 --- a/resources/plugin.yml +++ b/resources/plugin.yml @@ -1,6 +1,6 @@ name: OpenDiscordAuth main: ru.fazziclay.opendiscordauth.Main -version: 1.8.9 +version: 1.8.8 website: "https://github.com/BVN4/OpenDiscordAuth/" authors: ["https://github.com/BVN4", "https://github.com/fazziclay/", "https://github.com/TheKing-OfTime"] load: STARTUP From fab99eb87c3aa89e116512f63a1f2ae7a16291a1 Mon Sep 17 00:00:00 2001 From: TheKing-OfTime Date: Sun, 3 Sep 2023 23:14:47 +0300 Subject: [PATCH 3/6] Initial implementation of sys chat messages retranslation --- .idea/libraries/libs.xml | 3 +- OpenDiscordAuth.iml | 3 +- resources/config.yml | 5 +++- resources/plugin.yml | 2 +- src/ru/fazziclay/opendiscordauth/Config.java | 3 ++ .../opendiscordauth/ServerEvents.java | 28 ++++++++++++++++--- .../opendiscordauth/WebhookClient.java | 8 +++--- 7 files changed, 40 insertions(+), 12 deletions(-) diff --git a/.idea/libraries/libs.xml b/.idea/libraries/libs.xml index 5c1e3fe..d1f40e1 100644 --- a/.idea/libraries/libs.xml +++ b/.idea/libraries/libs.xml @@ -8,6 +8,7 @@ + @@ -17,4 +18,4 @@ - \ No newline at end of file + diff --git a/OpenDiscordAuth.iml b/OpenDiscordAuth.iml index 4f247c4..6f93d7d 100644 --- a/OpenDiscordAuth.iml +++ b/OpenDiscordAuth.iml @@ -24,5 +24,6 @@ + - + \ No newline at end of file diff --git a/resources/config.yml b/resources/config.yml index cf9a06f..060d556 100644 --- a/resources/config.yml +++ b/resources/config.yml @@ -40,6 +40,9 @@ message: CommandMissingPermissions: "У вас недостаточно прав" CommandSuccess: "Команда исполнена" CommandError: "Ошибка" - GlobalMessageFormat: '&7[&bG&7] [&3%prefix&7] &%color%displayname &9> &7%message' + GlobalMessageFormat: "&7[&bG&7] [&3%prefix&7] &%color%displayname &9> &7%message" + PlayerJoined: "$discordname вошёл в мир" + PlayerLeft: "$discordname вышел из мира" + PlayerAchievementReceive: "$discordname получил достижение $achievementname ($achievementdescription)" opIdsList: ["256114365894230018", "500020124515041283"] diff --git a/resources/plugin.yml b/resources/plugin.yml index c372f59..25596bb 100644 --- a/resources/plugin.yml +++ b/resources/plugin.yml @@ -1,6 +1,6 @@ name: OpenDiscordAuth main: ru.fazziclay.opendiscordauth.Main -version: 1.8.8 +version: 1.8.9 website: "https://github.com/BVN4/OpenDiscordAuth/" authors: ["https://github.com/BVN4", "https://github.com/fazziclay/", "https://github.com/TheKing-OfTime"] load: STARTUP diff --git a/src/ru/fazziclay/opendiscordauth/Config.java b/src/ru/fazziclay/opendiscordauth/Config.java index 69f424f..e3abf88 100644 --- a/src/ru/fazziclay/opendiscordauth/Config.java +++ b/src/ru/fazziclay/opendiscordauth/Config.java @@ -37,6 +37,9 @@ public class Config { public static String messageCommandMissingPermissions = Main.pluginConfig.getString("message.CommandMissingPermissions"); public static String messageCommandSuccess = Main.pluginConfig.getString("message.CommandSuccess"); public static String messageCommandError = Main.pluginConfig.getString("message.CommandError"); + public static String messagePlayerJoined = Main.pluginConfig.getString("message.PlayerJoined"); + public static String messagePlayerLeft = Main.pluginConfig.getString("message.PlayerLeft"); + public static String messagePlayerAchievementReceive = Main.pluginConfig.getString("message.PlayerAchievementReceive"); public static String globalMessageFormat = Main.pluginConfig.getString("message.GlobalMessageFormat"); public static String domainProviderToken = Main.pluginConfig.getString("domainProviderInfo.token"); public static String domainProviderDomainName = Main.pluginConfig.getString("domainProviderInfo.domainName"); diff --git a/src/ru/fazziclay/opendiscordauth/ServerEvents.java b/src/ru/fazziclay/opendiscordauth/ServerEvents.java index c9a2cf2..32af1ea 100644 --- a/src/ru/fazziclay/opendiscordauth/ServerEvents.java +++ b/src/ru/fazziclay/opendiscordauth/ServerEvents.java @@ -1,14 +1,13 @@ package ru.fazziclay.opendiscordauth; -import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -import org.bukkit.event.Event; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityTargetEvent; +import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.player.*; import de.jeter.chatex.api.events.PlayerUsesGlobalChatEvent; import ru.fazziclay.opendiscordauth.discordbot.DiscordBot; @@ -28,7 +27,7 @@ public void onLogin(PlayerLoginEvent event) { } @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) { + public void onPlayerJoin(PlayerJoinEvent event) throws InterruptedException { Utils.debug("[ServerEvents] onPlayerJoin(-)"); Player player = event.getPlayer(); @@ -55,11 +54,12 @@ public void onPlayerJoin(PlayerJoinEvent event) { player.setGameMode(GameMode.SPECTATOR); LoginManager.giveCode(uuid, nickname, player); + DiscordBot.webhook.sendMessage(Config.messagePlayerJoined.replace("$discordname", nickname)); DiscordBot.updateOnlineStatus(player, true); } @EventHandler - public void onPlayerQuit(PlayerQuitEvent event) { + public void onPlayerQuit(PlayerQuitEvent event) throws InterruptedException { Utils.debug("[ServerEvents] onPlayerQuit(-)"); Player player = event.getPlayer(); @@ -77,6 +77,7 @@ public void onPlayerQuit(PlayerQuitEvent event) { Session.update(nickname, ip); } LoginManager.notAuthorizedPlayers.remove(uuid); + DiscordBot.webhook.sendMessage(Config.messagePlayerLeft.replace("$discordname", nickname)); DiscordBot.updateOnlineStatus(player, false); } @@ -156,4 +157,23 @@ public void onDamage(EntityDamageEvent event) { if (!isAuthorized) event.setCancelled(true); } } + + @EventHandler + public void onPlayerAdvancementDoneEvent(PlayerAdvancementDoneEvent event) throws InterruptedException { + io.papermc.paper.advancement.AdvancementDisplay advancementInfo = event.getAdvancement().getDisplay(); + boolean isSendRequired = Objects.isNull(advancementInfo.doesAnnounceToChat()) ? false : advancementInfo.doesAnnounceToChat(); + if (isSendRequired) { + DiscordBot.webhook.sendMessage( + Config.messagePlayerAchievementReceive + .replace("$discordname", event.getPlayer().getDisplayName()) + .replace("$achievementname", advancementInfo.title().toString()) + .replace("$achievementdescription", advancementInfo.description().toString()) + ); + } + } + + @EventHandler + public void onPlayerDeathEvent(PlayerDeathEvent event) throws InterruptedException { + DiscordBot.webhook.sendMessage(event.deathMessage().toString()); + } } diff --git a/src/ru/fazziclay/opendiscordauth/WebhookClient.java b/src/ru/fazziclay/opendiscordauth/WebhookClient.java index 437449c..ccf8f08 100644 --- a/src/ru/fazziclay/opendiscordauth/WebhookClient.java +++ b/src/ru/fazziclay/opendiscordauth/WebhookClient.java @@ -3,6 +3,7 @@ import net.dv8tion.jda.api.entities.Webhook; import org.bukkit.Bukkit; import org.json.JSONObject; +import ru.fazziclay.opendiscordauth.discordbot.DiscordBot; import java.net.http.HttpClient; import java.net.http.HttpRequest; @@ -31,17 +32,16 @@ public void sendMessage(String message, String name, String avatar_url) throws I .header("content-type", "application/json") .header("Authorization", Config.discordBotToken) .build(); - //Bukkit.getLogger().info(request.toString()); - //Bukkit.getLogger().info(body); HttpResponse response = null; try { response = httpclient.send(request, HttpResponse.BodyHandlers.ofString()); - //Bukkit.getLogger().info(response.statusCode() + " " + response.body()); } catch (IOException e) { Bukkit.getLogger().info(e.getMessage()); } + } - + public void sendMessage(String message) throws InterruptedException { + this.sendMessage(message, DiscordBot.bot.getSelfUser().getEffectiveName(), DiscordBot.bot.getSelfUser().getAvatarUrl()); } private String getRequestBody(String message, String name, String avatar_url) { From b211be3db9146ec34e2c9c980156e604db3c73d2 Mon Sep 17 00:00:00 2001 From: TheKing-OfTime Date: Mon, 4 Sep 2023 01:15:22 +0300 Subject: [PATCH 4/6] Fixes & Improvements --- .idea/artifacts/OpenDiscordAuth.xml | 2 +- .idea/libraries/libs.xml | 1 + libs/adventure-key-4.14.0.jar | Bin 0 -> 11070 bytes ...adventure-text-serializer-plain-4.14.0.jar | Bin 0 -> 12952 bytes .../opendiscordauth/ServerEvents.java | 25 ++++++++++++------ .../opendiscordauth/WebhookClient.java | 2 +- 6 files changed, 20 insertions(+), 10 deletions(-) create mode 100644 libs/adventure-key-4.14.0.jar create mode 100644 libs/adventure-text-serializer-plain-4.14.0.jar diff --git a/.idea/artifacts/OpenDiscordAuth.xml b/.idea/artifacts/OpenDiscordAuth.xml index fded3f1..90752f9 100644 --- a/.idea/artifacts/OpenDiscordAuth.xml +++ b/.idea/artifacts/OpenDiscordAuth.xml @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/.idea/libraries/libs.xml b/.idea/libraries/libs.xml index d1f40e1..da52690 100644 --- a/.idea/libraries/libs.xml +++ b/.idea/libraries/libs.xml @@ -9,6 +9,7 @@ + diff --git a/libs/adventure-key-4.14.0.jar b/libs/adventure-key-4.14.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..9923b76d298a4c00e57727158b158be125ff0219 GIT binary patch literal 11070 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%0ABz(Ii_F zH5&{~St&6wQ{0Yj!@6zM&xE74-zBsunl(H|rMm7joe2t(lvE-QsSANu92FO*p zYbJcPE2H6Fk^^MJz+N{d=9h7*jRVGZKRf6{-4*2FTO5*LfgwlSIn|n5*bV3UEiGuk zck6CaOtKRj%(YH8@PhP|XhM@QVyb5zOfrUo^?TyGH_);JHv~wa_o{Edq4e6aS}l|( z*X zc?A>6c3YKvqJ&woSvLw&PI2=wFl*=r+^2XQb@D+C8i~;-YOVi<#z*Y7R3Inr)O4A` zUhjM}*x%*rr!NV+btrAbL?fN(sg{NxQf54iMn=4lbkX-T?vVw8Of_iFy+kE#YU@Ir zn#-azNI%Ew9+x^FRecj)&>0~fS241J>wD)D!v31WYAoYX?@YAWtV9_O zGXz>VcfnjL_tuJUwe)%lIE&#RMN=VrPBw~PMEx~{{D3iT#L`rAeOA-fMn2-!jAibg z5pf=c#_WRh)}t&HX`WvTiF3a&N?~6ZA8R5_u6V8Ptd?I((d7c=;6V&4wxqAO`RjnV z-@8CKj)e0%kNBuu5Fh$Q`)uvMcb zV~-!h7pb4M?2OXercCuIsH85NlQ`ED{B6a~H>}{3+oz8pQ|K; z=GTnZ*=d`S!z^;SrY26_#|bCsn7+My#?lT9r>s6U&o41foPye-#_!^^nl@$VP!XSZ zCdLCS&>kuvKk6@yBz{P@)m*OLaoo;f8ysr@iLJW4^vqN~#T16|NXqGXtk-3lvT|CT- zX}f(O5U*kkmHh~EmcZapuyDT6+Zf)26q&_l^3dg6@)y}a9nHNv%F^(E_A>#^ho+hL zM~xGJZ^!2{@7e6ST_JJclGyN+097KRmt3Z1U(dA&B1Ksi69R89n{G?0Mb!;qe`LKe z$A=H6LG2A3)x;|RFuYcqU=WIqrAtDwyhaP=HreJ@68L!9MHx_~%-3Tom&VvpXZ?y( z6sHwfW`>AOX>gs`SziW?y$vHu^$57^Iv2ZV%tWH~xGG)8d#Br+4!-)hO8H2u7Rski z3TWp)`9KzU>}0S7hKpC>q9d|9tU}JDW-mlu8!BTwv?F3oKv|oVCbH}f&eo>tx2h7n z`V|)qg>N<54P|^ynLhgx{Du;4UMS;x&%ULsLa)Tz_XuXt8Rxn;AOTYISB$o3jloAl zwOL)(Au(y0+%;CO2vKyqXkbp_4owar(5lQZ5s$BRh2}u7bZ7?_WRUo+psx&JR$Ay+ zTFF;hbsY~8aXuLxWY_rg*XZUm>=lUby#qWtzp=}IdUt8C+1$p%&-LCu@eays=AgkS zW$qd7xofQoZny2T`4YWYDg@(&(V$;MhL|^q+-5Q8rGr;jE^nCJ#?2 z*&k4CUrzroF9eXIzp-%tNxc14>{sILZ(<-Id43cxm;V&|7aH!b2tOqLmCX7Z!Vksh zFD2?9WYj;C_(5&`DZ%x3iQnj}eC(fc>U{sr+jg6yxjzY=8sft=^3|KH*MM|9a= zwf{R@A@!tE~9< z_y23J@TX=8pTHkk@cVAnukQb~_wmyNAN0S< zgnxhYzt&TKYR<#{t2F;-A^2-G=%*$2_E(_2l15ul{rLAkyChY& literal 0 HcmV?d00001 diff --git a/src/ru/fazziclay/opendiscordauth/ServerEvents.java b/src/ru/fazziclay/opendiscordauth/ServerEvents.java index 32af1ea..d7ad04e 100644 --- a/src/ru/fazziclay/opendiscordauth/ServerEvents.java +++ b/src/ru/fazziclay/opendiscordauth/ServerEvents.java @@ -1,5 +1,6 @@ package ru.fazziclay.opendiscordauth; +import net.kyori.adventure.text.TranslatableComponent; import org.bukkit.GameMode; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; @@ -11,6 +12,7 @@ import org.bukkit.event.player.*; import de.jeter.chatex.api.events.PlayerUsesGlobalChatEvent; import ru.fazziclay.opendiscordauth.discordbot.DiscordBot; +import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import java.util.Objects; @@ -54,7 +56,8 @@ public void onPlayerJoin(PlayerJoinEvent event) throws InterruptedException { player.setGameMode(GameMode.SPECTATOR); LoginManager.giveCode(uuid, nickname, player); - DiscordBot.webhook.sendMessage(Config.messagePlayerJoined.replace("$discordname", nickname)); + String displayName = event.getPlayer().getDisplayName().replaceAll("§.", ""); + DiscordBot.webhook.sendMessage(Config.messagePlayerJoined.replace("$discordname", displayName)); DiscordBot.updateOnlineStatus(player, true); } @@ -65,6 +68,7 @@ public void onPlayerQuit(PlayerQuitEvent event) throws InterruptedException { Player player = event.getPlayer(); String uuid = player.getUniqueId().toString(); String nickname = player.getName(); + String displayName = event.getPlayer().getDisplayName().replaceAll("§.", ""); String ip = Utils.getPlayerIp(player); TempCode tempCode = TempCode.getByValue(2, nickname); @@ -77,7 +81,7 @@ public void onPlayerQuit(PlayerQuitEvent event) throws InterruptedException { Session.update(nickname, ip); } LoginManager.notAuthorizedPlayers.remove(uuid); - DiscordBot.webhook.sendMessage(Config.messagePlayerLeft.replace("$discordname", nickname)); + DiscordBot.webhook.sendMessage(Config.messagePlayerLeft.replace("$discordname", displayName)); DiscordBot.updateOnlineStatus(player, false); } @@ -161,19 +165,24 @@ public void onDamage(EntityDamageEvent event) { @EventHandler public void onPlayerAdvancementDoneEvent(PlayerAdvancementDoneEvent event) throws InterruptedException { io.papermc.paper.advancement.AdvancementDisplay advancementInfo = event.getAdvancement().getDisplay(); - boolean isSendRequired = Objects.isNull(advancementInfo.doesAnnounceToChat()) ? false : advancementInfo.doesAnnounceToChat(); - if (isSendRequired) { + if (Objects.isNull(advancementInfo)) return; + if (advancementInfo.doesAnnounceToChat()) { + String title = PlainTextComponentSerializer.plainText().serialize(advancementInfo.title()); + String description = PlainTextComponentSerializer.plainText().serialize(advancementInfo.description()); + String displayName = event.getPlayer().getDisplayName().replaceAll("§.", ""); + DiscordBot.webhook.sendMessage( Config.messagePlayerAchievementReceive - .replace("$discordname", event.getPlayer().getDisplayName()) - .replace("$achievementname", advancementInfo.title().toString()) - .replace("$achievementdescription", advancementInfo.description().toString()) + .replace("$discordname", displayName) + .replace("$achievementname", title) + .replace("$achievementdescription", description) ); } } @EventHandler public void onPlayerDeathEvent(PlayerDeathEvent event) throws InterruptedException { - DiscordBot.webhook.sendMessage(event.deathMessage().toString()); + String deathMessage = PlainTextComponentSerializer.plainText().serialize(event.deathMessage()); + DiscordBot.webhook.sendMessage(deathMessage); } } diff --git a/src/ru/fazziclay/opendiscordauth/WebhookClient.java b/src/ru/fazziclay/opendiscordauth/WebhookClient.java index ccf8f08..2def923 100644 --- a/src/ru/fazziclay/opendiscordauth/WebhookClient.java +++ b/src/ru/fazziclay/opendiscordauth/WebhookClient.java @@ -41,7 +41,7 @@ public void sendMessage(String message, String name, String avatar_url) throws I } public void sendMessage(String message) throws InterruptedException { - this.sendMessage(message, DiscordBot.bot.getSelfUser().getEffectiveName(), DiscordBot.bot.getSelfUser().getAvatarUrl()); + this.sendMessage(message, "[$prefix] System".replace("$prefix", Config.chatPrefix), DiscordBot.bot.getSelfUser().getAvatarUrl()); } private String getRequestBody(String message, String name, String avatar_url) { From 8c601f2954e5a9473f28d9d777f0c6e69d4c9bf6 Mon Sep 17 00:00:00 2001 From: TheKing-OfTime Date: Mon, 4 Sep 2023 01:49:49 +0300 Subject: [PATCH 5/6] Add switch for system message retranslation. Add link to patch notes page at /check-updates cmd --- resources/config.yml | 1 + src/ru/fazziclay/opendiscordauth/Config.java | 1 + .../opendiscordauth/ServerEvents.java | 47 +++++++++++-------- .../checkupdates/CheckUpdatesController.java | 11 +++-- 4 files changed, 38 insertions(+), 22 deletions(-) diff --git a/resources/config.yml b/resources/config.yml index 060d556..2f863dc 100644 --- a/resources/config.yml +++ b/resources/config.yml @@ -5,6 +5,7 @@ discordChatIdForTranslation: "ENTER CHAT ID HERE" discordChatIdForLogs: "ENTER CHAT ID HERE" chatPrefix: "ENTER CHAT PREFIX HERE" enablePluginAutoUpdate: true +enableSystemMessagesRetranslate: true domainProviderInfo: token: "ENTER DOMAIN PROVIDER TOKEN HERE" diff --git a/src/ru/fazziclay/opendiscordauth/Config.java b/src/ru/fazziclay/opendiscordauth/Config.java index e3abf88..84461f5 100644 --- a/src/ru/fazziclay/opendiscordauth/Config.java +++ b/src/ru/fazziclay/opendiscordauth/Config.java @@ -8,6 +8,7 @@ public class Config { public static String discordBotToken = Main.pluginConfig.getString("discordBotToken"); public static boolean enablePluginAutoUpdate = Main.pluginConfig.getBoolean("enablePluginAutoUpdate"); + public static boolean enableSystemMessagesRetranslate = Main.pluginConfig.getBoolean("enableSystemMessagesRetranslate"); public static String accountsFilePath = Main.pluginConfig.getString("accountsFilePath"); public static int sessionExpiredDelay = Main.pluginConfig.getInt("sessionExpiredDelay"); diff --git a/src/ru/fazziclay/opendiscordauth/ServerEvents.java b/src/ru/fazziclay/opendiscordauth/ServerEvents.java index d7ad04e..c77bddf 100644 --- a/src/ru/fazziclay/opendiscordauth/ServerEvents.java +++ b/src/ru/fazziclay/opendiscordauth/ServerEvents.java @@ -56,8 +56,10 @@ public void onPlayerJoin(PlayerJoinEvent event) throws InterruptedException { player.setGameMode(GameMode.SPECTATOR); LoginManager.giveCode(uuid, nickname, player); - String displayName = event.getPlayer().getDisplayName().replaceAll("§.", ""); - DiscordBot.webhook.sendMessage(Config.messagePlayerJoined.replace("$discordname", displayName)); + if (Config.enableSystemMessagesRetranslate) { + String displayName = event.getPlayer().getDisplayName().replaceAll("§.", ""); + DiscordBot.webhook.sendMessage(Config.messagePlayerJoined.replace("$discordname", displayName)); + } DiscordBot.updateOnlineStatus(player, true); } @@ -68,7 +70,7 @@ public void onPlayerQuit(PlayerQuitEvent event) throws InterruptedException { Player player = event.getPlayer(); String uuid = player.getUniqueId().toString(); String nickname = player.getName(); - String displayName = event.getPlayer().getDisplayName().replaceAll("§.", ""); + String ip = Utils.getPlayerIp(player); TempCode tempCode = TempCode.getByValue(2, nickname); @@ -81,7 +83,10 @@ public void onPlayerQuit(PlayerQuitEvent event) throws InterruptedException { Session.update(nickname, ip); } LoginManager.notAuthorizedPlayers.remove(uuid); - DiscordBot.webhook.sendMessage(Config.messagePlayerLeft.replace("$discordname", displayName)); + if (Config.enableSystemMessagesRetranslate) { + String displayName = event.getPlayer().getDisplayName().replaceAll("§.", ""); + DiscordBot.webhook.sendMessage(Config.messagePlayerLeft.replace("$discordname", displayName)); + } DiscordBot.updateOnlineStatus(player, false); } @@ -164,25 +169,29 @@ public void onDamage(EntityDamageEvent event) { @EventHandler public void onPlayerAdvancementDoneEvent(PlayerAdvancementDoneEvent event) throws InterruptedException { - io.papermc.paper.advancement.AdvancementDisplay advancementInfo = event.getAdvancement().getDisplay(); - if (Objects.isNull(advancementInfo)) return; - if (advancementInfo.doesAnnounceToChat()) { - String title = PlainTextComponentSerializer.plainText().serialize(advancementInfo.title()); - String description = PlainTextComponentSerializer.plainText().serialize(advancementInfo.description()); - String displayName = event.getPlayer().getDisplayName().replaceAll("§.", ""); - - DiscordBot.webhook.sendMessage( - Config.messagePlayerAchievementReceive - .replace("$discordname", displayName) - .replace("$achievementname", title) - .replace("$achievementdescription", description) - ); + if (Config.enableSystemMessagesRetranslate) { + io.papermc.paper.advancement.AdvancementDisplay advancementInfo = event.getAdvancement().getDisplay(); + if (Objects.isNull(advancementInfo)) return; + if (advancementInfo.doesAnnounceToChat()) { + String title = PlainTextComponentSerializer.plainText().serialize(advancementInfo.title()); + String description = PlainTextComponentSerializer.plainText().serialize(advancementInfo.description()); + String displayName = event.getPlayer().getDisplayName().replaceAll("§.", ""); + + DiscordBot.webhook.sendMessage( + Config.messagePlayerAchievementReceive + .replace("$discordname", displayName) + .replace("$achievementname", title) + .replace("$achievementdescription", description) + ); + } } } @EventHandler public void onPlayerDeathEvent(PlayerDeathEvent event) throws InterruptedException { - String deathMessage = PlainTextComponentSerializer.plainText().serialize(event.deathMessage()); - DiscordBot.webhook.sendMessage(deathMessage); + if (Config.enableSystemMessagesRetranslate) { + String deathMessage = PlainTextComponentSerializer.plainText().serialize(event.deathMessage()); + DiscordBot.webhook.sendMessage(deathMessage); + } } } diff --git a/src/ru/fazziclay/opendiscordauth/checkupdates/CheckUpdatesController.java b/src/ru/fazziclay/opendiscordauth/checkupdates/CheckUpdatesController.java index 093d05a..002139c 100644 --- a/src/ru/fazziclay/opendiscordauth/checkupdates/CheckUpdatesController.java +++ b/src/ru/fazziclay/opendiscordauth/checkupdates/CheckUpdatesController.java @@ -1,9 +1,13 @@ package ru.fazziclay.opendiscordauth.checkupdates; import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; +import net.dv8tion.jda.api.utils.messages.MessageEditData; +import net.dv8tion.jda.api.utils.messages.MessageEditBuilder; +import net.dv8tion.jda.api.interactions.components.ActionRow; +import net.dv8tion.jda.api.interactions.components.buttons.Button; + import org.jetbrains.annotations.NotNull; import ru.fazziclay.opendiscordauth.UpdateChecker; -import ru.fazziclay.opendiscordauth.Utils; import ru.fazziclay.opendiscordauth.discordbot.Controller; import java.math.BigDecimal; @@ -43,7 +47,8 @@ public void eventHandle(@NotNull SlashCommandInteractionEvent event) { status ? "✅ Обновление загружено\nℹ Перезапустите сервер для применения обновлений" : "⛔ Не удалось загрузить обновление"; - - event.getHook().editOriginal(substring + downloadStatusString).queue(); + event.getHook().editOriginal(substring + downloadStatusString) + .setActionRow(status ? Button.link("Что нового?", UpdateChecker.lastVersionDownloadPageURL) : null) + .queue(); } } From 6da0502538d996715366c436292a3038c00bddf3 Mon Sep 17 00:00:00 2001 From: TheKing-OfTime Date: Mon, 4 Sep 2023 19:55:44 +0300 Subject: [PATCH 6/6] Switch to english at sys messages. Improve /check-updates cmd. Replace name to displayname in deathmessages --- resources/config.yml | 6 ++--- .../opendiscordauth/ServerEvents.java | 3 ++- .../opendiscordauth/UpdateChecker.java | 2 ++ .../checkupdates/CheckUpdatesController.java | 25 +++++++++++++++---- .../discordbot/DiscordBot.java | 9 +++++++ 5 files changed, 36 insertions(+), 9 deletions(-) diff --git a/resources/config.yml b/resources/config.yml index 2f863dc..a4e9873 100644 --- a/resources/config.yml +++ b/resources/config.yml @@ -42,8 +42,8 @@ message: CommandSuccess: "Команда исполнена" CommandError: "Ошибка" GlobalMessageFormat: "&7[&bG&7] [&3%prefix&7] &%color%displayname &9> &7%message" - PlayerJoined: "$discordname вошёл в мир" - PlayerLeft: "$discordname вышел из мира" - PlayerAchievementReceive: "$discordname получил достижение $achievementname ($achievementdescription)" + PlayerJoined: "$discordname joined the world" + PlayerLeft: "$discordname left the world" + PlayerAchievementReceive: "$discordname done advancement $achievementname ($achievementdescription)" opIdsList: ["256114365894230018", "500020124515041283"] diff --git a/src/ru/fazziclay/opendiscordauth/ServerEvents.java b/src/ru/fazziclay/opendiscordauth/ServerEvents.java index c77bddf..3d84ca2 100644 --- a/src/ru/fazziclay/opendiscordauth/ServerEvents.java +++ b/src/ru/fazziclay/opendiscordauth/ServerEvents.java @@ -191,7 +191,8 @@ public void onPlayerAdvancementDoneEvent(PlayerAdvancementDoneEvent event) throw public void onPlayerDeathEvent(PlayerDeathEvent event) throws InterruptedException { if (Config.enableSystemMessagesRetranslate) { String deathMessage = PlainTextComponentSerializer.plainText().serialize(event.deathMessage()); - DiscordBot.webhook.sendMessage(deathMessage); + String displayName = event.getPlayer().getDisplayName().replaceAll("§.", ""); + DiscordBot.webhook.sendMessage(deathMessage.replace(event.getPlayer().getName(), displayName)); } } } diff --git a/src/ru/fazziclay/opendiscordauth/UpdateChecker.java b/src/ru/fazziclay/opendiscordauth/UpdateChecker.java index b6d6804..2f674df 100644 --- a/src/ru/fazziclay/opendiscordauth/UpdateChecker.java +++ b/src/ru/fazziclay/opendiscordauth/UpdateChecker.java @@ -17,6 +17,7 @@ public class UpdateChecker { public static Version lastVersion; public static String lastVersionDownloadURL = "null"; public static String lastVersionDownloadPageURL = "null"; + public static String lastVersionPathNotes = "null"; public static float lastVersionSize = 0; public static boolean isLastVersionRelease = false; public static boolean isAwaitingForRestart = false; @@ -61,6 +62,7 @@ public static boolean checkUpdates() { lastVersion = Version.parse(release.getString("name")); isLastVersionRelease = !release.getBoolean("prerelease"); lastVersionDownloadPageURL = release.getString("html_url"); + lastVersionPathNotes = release.getString("body"); lastVersionDownloadURL = release.getJSONArray("assets") .getJSONObject(0) .getString("browser_download_url"); diff --git a/src/ru/fazziclay/opendiscordauth/checkupdates/CheckUpdatesController.java b/src/ru/fazziclay/opendiscordauth/checkupdates/CheckUpdatesController.java index 002139c..a5b32e4 100644 --- a/src/ru/fazziclay/opendiscordauth/checkupdates/CheckUpdatesController.java +++ b/src/ru/fazziclay/opendiscordauth/checkupdates/CheckUpdatesController.java @@ -1,9 +1,7 @@ package ru.fazziclay.opendiscordauth.checkupdates; import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; -import net.dv8tion.jda.api.utils.messages.MessageEditData; -import net.dv8tion.jda.api.utils.messages.MessageEditBuilder; -import net.dv8tion.jda.api.interactions.components.ActionRow; +import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent; import net.dv8tion.jda.api.interactions.components.buttons.Button; import org.jetbrains.annotations.NotNull; @@ -29,7 +27,12 @@ public void eventHandle(@NotNull SlashCommandInteractionEvent event) { event.getHook().editOriginal("⌛ Поиск обновлений...").queue(); if (!UpdateChecker.checkUpdates()) { - event.getHook().editOriginal("✅ Обновления не найдены").queue(); + event.getHook().editOriginal(String.format("✅ Обновления не найдены\nТекущая версия: `%s`", UpdateChecker.thisVersion)) + .setActionRow( + Button.secondary("showPatchNotes", "Что нового?"), + Button.link(UpdateChecker.lastVersionDownloadPageURL, "Страница релиза") + ) + .queue(); return; } @@ -48,7 +51,19 @@ public void eventHandle(@NotNull SlashCommandInteractionEvent event) { ? "✅ Обновление загружено\nℹ Перезапустите сервер для применения обновлений" : "⛔ Не удалось загрузить обновление"; event.getHook().editOriginal(substring + downloadStatusString) - .setActionRow(status ? Button.link("Что нового?", UpdateChecker.lastVersionDownloadPageURL) : null) + .setActionRow( + status ? Button.secondary("showPatchNotes", "Что нового?") : null, + status ? Button.link(UpdateChecker.lastVersionDownloadPageURL, "Страница релиза") : null + ) + .queue(); +} + + public void eventHandle(@NotNull ButtonInteractionEvent event) { + String cid = event.getComponentId(); + if ("showPatchNotes".equals(cid)) { + event.reply(UpdateChecker.lastVersionPathNotes) + .setEphemeral(true) .queue(); + } } } diff --git a/src/ru/fazziclay/opendiscordauth/discordbot/DiscordBot.java b/src/ru/fazziclay/opendiscordauth/discordbot/DiscordBot.java index 2ddeddb..9eea7fb 100644 --- a/src/ru/fazziclay/opendiscordauth/discordbot/DiscordBot.java +++ b/src/ru/fazziclay/opendiscordauth/discordbot/DiscordBot.java @@ -8,6 +8,7 @@ import net.dv8tion.jda.api.entities.channel.concrete.TextChannel; import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel; import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; +import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.events.session.ReadyEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; @@ -113,6 +114,14 @@ public void onSlashCommandInteraction(@NotNull SlashCommandInteractionEvent even } } + @Override + public void onButtonInteraction(@NotNull ButtonInteractionEvent event) { + + switch (event.getComponentId()) { + case ("showPatchNotes") -> check_updates.eventHandle(event); + } + } + @Override public void onReady(@NotNull ReadyEvent event) { Bukkit.getLogger().info(DiscordBot.bot.getSelfUser().getAsTag());