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 5c1e3fe..da52690 100644 --- a/.idea/libraries/libs.xml +++ b/.idea/libraries/libs.xml @@ -8,6 +8,8 @@ + + @@ -17,4 +19,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/libs/adventure-key-4.14.0.jar b/libs/adventure-key-4.14.0.jar new file mode 100644 index 0000000..9923b76 Binary files /dev/null and b/libs/adventure-key-4.14.0.jar differ diff --git a/libs/adventure-text-serializer-plain-4.14.0.jar b/libs/adventure-text-serializer-plain-4.14.0.jar new file mode 100644 index 0000000..bb6eebe Binary files /dev/null and b/libs/adventure-text-serializer-plain-4.14.0.jar differ diff --git a/resources/config.yml b/resources/config.yml index cf9a06f..a4e9873 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" @@ -40,6 +41,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 joined the world" + PlayerLeft: "$discordname left the world" + PlayerAchievementReceive: "$discordname done advancement $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..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"); @@ -37,6 +38,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..3d84ca2 100644 --- a/src/ru/fazziclay/opendiscordauth/ServerEvents.java +++ b/src/ru/fazziclay/opendiscordauth/ServerEvents.java @@ -1,17 +1,18 @@ package ru.fazziclay.opendiscordauth; -import org.bukkit.Bukkit; +import net.kyori.adventure.text.TranslatableComponent; 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; +import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import java.util.Objects; @@ -28,7 +29,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,16 +56,21 @@ public void onPlayerJoin(PlayerJoinEvent event) { player.setGameMode(GameMode.SPECTATOR); LoginManager.giveCode(uuid, nickname, player); + if (Config.enableSystemMessagesRetranslate) { + String displayName = event.getPlayer().getDisplayName().replaceAll("§.", ""); + DiscordBot.webhook.sendMessage(Config.messagePlayerJoined.replace("$discordname", displayName)); + } 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(); String uuid = player.getUniqueId().toString(); String nickname = player.getName(); + String ip = Utils.getPlayerIp(player); TempCode tempCode = TempCode.getByValue(2, nickname); @@ -77,6 +83,10 @@ public void onPlayerQuit(PlayerQuitEvent event) { Session.update(nickname, ip); } LoginManager.notAuthorizedPlayers.remove(uuid); + if (Config.enableSystemMessagesRetranslate) { + String displayName = event.getPlayer().getDisplayName().replaceAll("§.", ""); + DiscordBot.webhook.sendMessage(Config.messagePlayerLeft.replace("$discordname", displayName)); + } DiscordBot.updateOnlineStatus(player, false); } @@ -156,4 +166,33 @@ public void onDamage(EntityDamageEvent event) { if (!isAuthorized) event.setCancelled(true); } } + + @EventHandler + public void onPlayerAdvancementDoneEvent(PlayerAdvancementDoneEvent event) throws InterruptedException { + 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 { + if (Config.enableSystemMessagesRetranslate) { + String deathMessage = PlainTextComponentSerializer.plainText().serialize(event.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/WebhookClient.java b/src/ru/fazziclay/opendiscordauth/WebhookClient.java index 437449c..2def923 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, "[$prefix] System".replace("$prefix", Config.chatPrefix), DiscordBot.bot.getSelfUser().getAvatarUrl()); } private String getRequestBody(String message, String name, String avatar_url) { diff --git a/src/ru/fazziclay/opendiscordauth/checkupdates/CheckUpdatesController.java b/src/ru/fazziclay/opendiscordauth/checkupdates/CheckUpdatesController.java index 093d05a..a5b32e4 100644 --- a/src/ru/fazziclay/opendiscordauth/checkupdates/CheckUpdatesController.java +++ b/src/ru/fazziclay/opendiscordauth/checkupdates/CheckUpdatesController.java @@ -1,9 +1,11 @@ package ru.fazziclay.opendiscordauth.checkupdates; import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; +import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent; +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; @@ -25,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; } @@ -43,7 +50,20 @@ public void eventHandle(@NotNull SlashCommandInteractionEvent event) { status ? "✅ Обновление загружено\nℹ Перезапустите сервер для применения обновлений" : "⛔ Не удалось загрузить обновление"; + event.getHook().editOriginal(substring + downloadStatusString) + .setActionRow( + status ? Button.secondary("showPatchNotes", "Что нового?") : null, + status ? Button.link(UpdateChecker.lastVersionDownloadPageURL, "Страница релиза") : null + ) + .queue(); +} - event.getHook().editOriginal(substring + downloadStatusString).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());