diff --git a/.idea/artifacts/DiscordAuthorizator_jar.xml b/.idea/artifacts/DiscordAuthorizator_jar.xml index 648e32c..7bc10cc 100644 --- a/.idea/artifacts/DiscordAuthorizator_jar.xml +++ b/.idea/artifacts/DiscordAuthorizator_jar.xml @@ -1,24 +1,26 @@ - $USER_HOME$/mineconomia/dev-server/plugins + $USER_HOME$/Plocha/dev-server/plugins + - - - - - - - + + + + + + + + - - + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml index 79937a3..e522458 100644 --- a/.idea/inspectionProfiles/Project_Default.xml +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -1,6 +1,9 @@ diff --git a/pom.xml b/pom.xml index 2f76c9e..752f829 100644 --- a/pom.xml +++ b/pom.xml @@ -79,5 +79,10 @@ + + club.minnced + discord-webhooks + 0.8.4 + diff --git a/src/main/java/xyz/soukup/discordauthorizator/DiscordAuthorizator.java b/src/main/java/xyz/soukup/discordauthorizator/DiscordAuthorizator.java index 2a19d44..6df4ca9 100644 --- a/src/main/java/xyz/soukup/discordauthorizator/DiscordAuthorizator.java +++ b/src/main/java/xyz/soukup/discordauthorizator/DiscordAuthorizator.java @@ -4,10 +4,8 @@ import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.JDABuilder; import net.dv8tion.jda.api.Permission; -import net.dv8tion.jda.api.entities.Activity; -import net.dv8tion.jda.api.entities.Message; -import net.dv8tion.jda.api.entities.Role; -import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.entities.*; +import net.dv8tion.jda.api.entities.channel.concrete.TextChannel; import net.dv8tion.jda.api.interactions.commands.DefaultMemberPermissions; import net.dv8tion.jda.api.interactions.commands.OptionType; import net.dv8tion.jda.api.interactions.commands.build.Commands; @@ -21,33 +19,41 @@ import xyz.soukup.discordauthorizator.commands.*; import xyz.soukup.discordauthorizator.events.*; import java.awt.*; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.*; +import java.util.List; import java.util.logging.Logger; public final class DiscordAuthorizator extends JavaPlugin { public static HashMap playerColor = new HashMap<>(); public static HashMap playerRole = new HashMap<>(); + public static HashMap webHooks = new HashMap<>(); private static JDA jda; @Override public void onEnable() { saveDefaultConfig(); + DiscordAuthorizator plugin = this; + FileConfiguration config = plugin.getConfig(); + Logger logger = Bukkit.getLogger(); + logger.info("Plugin DiscordAuthorizator starting..."); + //JDA Inicializace jda = JDABuilder.createDefault(config.getString("token")) .addEventListeners(new link()) .addEventListeners(new authorize()) .addEventListeners(new DiscordSendMessage()) .addEventListeners(new voting()) + .addEventListeners(new initializeCrossChat()) .enableIntents(GatewayIntent.GUILD_MEMBERS) .enableIntents(GatewayIntent.GUILD_MESSAGES) .enableIntents(GatewayIntent.MESSAGE_CONTENT) + .build(); jda.updateCommands().addCommands( Commands.slash("authorize", "autorizuje novou ip"), @@ -63,24 +69,30 @@ public final class DiscordAuthorizator extends JavaPlugin { ).queue(); jda.getPresence().setActivity(Activity.customStatus("Nikdo na serveru")); + + //Event Inicializace Bukkit.getPluginManager().registerEvents(new playerLogin(),this ); Bukkit.getPluginManager().registerEvents(new playerLeave(),this ); Bukkit.getPluginManager().registerEvents(new playerJoin(), this); Bukkit.getPluginManager().registerEvents(new playerDie(),this ); - Bukkit.getPluginManager().registerEvents(new ChatEvent(), this); + + //Command Inicializace Objects.requireNonNull(this.getCommand("msg")).setExecutor(new msg()); - Objects.requireNonNull(this.getCommand("msg")).setTabCompleter(new msg()); Objects.requireNonNull(this.getCommand("r")).setExecutor(new r()); + + + //TAB Complete Initialize + Objects.requireNonNull(this.getCommand("msg")).setTabCompleter(new msg()); Objects.requireNonNull(this.getCommand("r")).setTabCompleter(new r()); } + + @Override public void onDisable() { saveConfig(); - - for(Map.Entry> entry : voting.activeVotings.entrySet()) { HashMap voteData = entry.getValue(); Message message = entry.getKey(); @@ -96,11 +108,19 @@ public final class DiscordAuthorizator extends JavaPlugin { message.editMessageComponents().queue(); message.editMessageEmbeds(eb.build()).queue(); } + + for (String webhookUrl : webHooks.values()){ + deleteWebhook(getWebhookID(webhookUrl)); + } + jda.shutdown(); } public static JDA getJDA() { return jda; } + + + public static ChatColor convertToChatColor(Color color) { // Extract RGB components int red = color.getRed(); @@ -124,4 +144,35 @@ public final class DiscordAuthorizator extends JavaPlugin { jda.getPresence().setActivity(Activity.customStatus(status)); } + public static String getWebhookID(String webhookUrl){ + try { + // Parse the webhook URL + URI uri = new URI(webhookUrl); + String[] parts = uri.getPath().split("/"); + + // The ID and token are the last two parts of the path + String webhookId = parts[parts.length - 2]; + + System.out.println("Webhook ID: " + webhookId); + + // Now you can use these to delete the webhook + return webhookId; + } catch (URISyntaxException e) { + return null; + } + } + + private static void deleteWebhook(String webhookId) { + + jda.retrieveWebhookById(webhookId).queue(webhook -> { + webhook.delete().queue( + success -> System.out.println("Webhook deleted successfully!"), + failure -> System.err.println("Failed to delete webhook: " + failure.getMessage()) + ); + }, failure -> { + System.err.println("Failed to retrieve webhook: " + failure.getMessage()); + }); + } + + } diff --git a/src/main/java/xyz/soukup/discordauthorizator/WebHooks.java b/src/main/java/xyz/soukup/discordauthorizator/WebHooks.java new file mode 100644 index 0000000..24b3a86 --- /dev/null +++ b/src/main/java/xyz/soukup/discordauthorizator/WebHooks.java @@ -0,0 +1,38 @@ +package xyz.soukup.discordauthorizator; + +import club.minnced.discord.webhook.WebhookClient; +import club.minnced.discord.webhook.send.WebhookEmbed; +import club.minnced.discord.webhook.send.WebhookMessage; +import club.minnced.discord.webhook.send.WebhookMessageBuilder; + +public class WebHooks { + + public static void send(String WebHookURL, String name, String avatarURL, WebhookEmbed embed){ + WebhookClient client = WebhookClient.withUrl(WebHookURL); + WebhookMessage message = new WebhookMessageBuilder() + .addEmbeds(embed) + .setUsername(name) + .setAvatarUrl(avatarURL) + .build(); + client.send(message); + } + public static void send(String WebHookURL, String name, String avatarURL, String content){ + WebhookClient client = WebhookClient.withUrl(WebHookURL); + WebhookMessage message = new WebhookMessageBuilder() + .setContent(content) + .setUsername(name) + .setAvatarUrl(avatarURL) + .build(); + client.send(message); + } + public static void sendToAll(String name, String avatarURL, WebhookEmbed embed){ + for (String url : DiscordAuthorizator.webHooks.values()){ + send(url, name, avatarURL, embed); + } + } + public static void sendToAll(String name, String avatarURL, String content){ + for (String url : DiscordAuthorizator.webHooks.values()){ + send(url, name, avatarURL, content); + } + } +} diff --git a/src/main/java/xyz/soukup/discordauthorizator/commands/authorize.java b/src/main/java/xyz/soukup/discordauthorizator/commands/authorize.java index fc1b344..d6ce9d2 100644 --- a/src/main/java/xyz/soukup/discordauthorizator/commands/authorize.java +++ b/src/main/java/xyz/soukup/discordauthorizator/commands/authorize.java @@ -1,6 +1,7 @@ package xyz.soukup.discordauthorizator.commands; import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; +import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; import org.bukkit.configuration.file.FileConfiguration; import xyz.soukup.discordauthorizator.DiscordAuthorizator; @@ -26,4 +27,22 @@ public class authorize extends ListenerAdapter { } } + public void onButtonInteraction(ButtonInteractionEvent event) { + if (!event.getComponentId().equals("addIP")){ + return; + } + if (playerLogin.ipToAdd.containsKey(event.getUser().getId())){ + List pp = playerLogin.ipToAdd.get(event.getUser().getId()); + FileConfiguration config = DiscordAuthorizator.getPlugin(DiscordAuthorizator.class).getConfig(); + List ipList = config.getStringList("players." + pp.get(0) + ".authorized-ips"); + ipList.add(pp.get(1)); + + config.set("players." + pp.get(0) + ".authorized-ips", ipList); + DiscordAuthorizator.getPlugin(DiscordAuthorizator.class).saveConfig(); + event.reply("IP přidána").setEphemeral(true).queue(); + }else{ + event.reply("Nemáš žádné IP adresy k přidání").setEphemeral(true).queue(); + } + } + } diff --git a/src/main/java/xyz/soukup/discordauthorizator/commands/link.java b/src/main/java/xyz/soukup/discordauthorizator/commands/link.java index 08039e4..92d75bf 100644 --- a/src/main/java/xyz/soukup/discordauthorizator/commands/link.java +++ b/src/main/java/xyz/soukup/discordauthorizator/commands/link.java @@ -18,22 +18,27 @@ import java.awt.*; import java.util.List; import java.util.Objects; +import static xyz.soukup.discordauthorizator.DiscordAuthorizator.getJDA; + public class link extends ListenerAdapter { public void onSlashCommandInteraction(SlashCommandInteractionEvent event) { if (event.getName().equals("link")) { - TextInput subject = TextInput.create("username", "Tvůj minecraft nicK:", TextInputStyle.SHORT) + TextInput username = TextInput.create("username", "Tvůj minecraft nicK:", TextInputStyle.SHORT) .setPlaceholder("PVPMaster666") .setMaxLength(16) // or setRequiredRange(10, 100) .build(); - TextInput body = TextInput.create("code", "Verifikační kód", TextInputStyle.PARAGRAPH) + TextInput code = TextInput.create("code", "Verifikační kód", TextInputStyle.SHORT) .setPlaceholder("1234") .setMaxLength(4) .setMinLength(4) .build(); - + TextInput invitedby = TextInput.create("invitedby", "Jak si na nás narazil?", TextInputStyle.PARAGRAPH) + .setPlaceholder("kámoš, server list, spolupráce, jiný discord...") + .setMaxLength(100) + .build(); Modal modal = Modal.create("linkdialog", "Propojení minecraft účtu") - .addComponents(ActionRow.of(subject), ActionRow.of(body)) + .addComponents(ActionRow.of(username), ActionRow.of(code), ActionRow.of(invitedby)) .build(); event.replyModal(modal).queue(); @@ -47,7 +52,9 @@ public class link extends ListenerAdapter { FileConfiguration config = DiscordAuthorizator.getPlugin(DiscordAuthorizator.class).getConfig(); config.set("players." + answers.get(0).getAsString() + ".authorized-ips", List.of(playerLogin.playersToVerify.get(answers.get(0).getAsString()).get(0))); config.set("players." +answers.get(0).getAsString() + ".discord", event.getUser().getId()); - Objects.requireNonNull(event.getGuild()).addRoleToMember(Objects.requireNonNull(event.getMember()), Objects.requireNonNull(event.getGuild().getRoleById("1236632859200983141"))).queue(); + if (Objects.requireNonNull(event.getGuild()).getId().equals(config.getString("guild"))){ + Objects.requireNonNull(event.getGuild()).addRoleToMember(Objects.requireNonNull(event.getMember()), Objects.requireNonNull(event.getGuild().getRoleById("1236632859200983141"))).queue(); + } playerLogin.playersToVerify.remove(answers.get(0).getAsString()); MessageEmbed embed = new EmbedBuilder() .setTitle("Propojeno.") @@ -56,6 +63,12 @@ public class link extends ListenerAdapter { .build(); DiscordAuthorizator.getPlugin(DiscordAuthorizator.class).saveConfig(); event.replyEmbeds(embed).setEphemeral(true).queue(); + Objects.requireNonNull(getJDA().getTextChannelById(Objects.requireNonNull(config.getString("admin-channel")))).sendMessage("**Nový hráč!** " + + "\nDiscord: `" + event.getUser().getName() + + "` \nMinecraft: `" + answers.get(0).getAsString() + + "` \nGuild: `" + event.getGuild().getName() + + "` \nOdkud: `" + answers.get(2).getAsString() + "`" + ).queue(); }else { MessageEmbed embed = new EmbedBuilder() .setTitle("Špatný kód.") diff --git a/src/main/java/xyz/soukup/discordauthorizator/events/ChatEvent.java b/src/main/java/xyz/soukup/discordauthorizator/events/ChatEvent.java index abb0f0b..00fc93b 100644 --- a/src/main/java/xyz/soukup/discordauthorizator/events/ChatEvent.java +++ b/src/main/java/xyz/soukup/discordauthorizator/events/ChatEvent.java @@ -12,6 +12,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.AsyncPlayerChatEvent; import xyz.soukup.discordauthorizator.DiscordAuthorizator; +import xyz.soukup.discordauthorizator.WebHooks; import java.awt.*; import java.util.Objects; @@ -44,9 +45,8 @@ public class ChatEvent implements Listener { messageComponent.addExtra(nameComponent); messageComponent.addExtra(ChatColor.WHITE + event.getMessage()); event.setCancelled(true); - JDA jda = DiscordAuthorizator.getJDA(); - FileConfiguration config = DiscordAuthorizator.getPlugin(DiscordAuthorizator.class).getConfig(); - Objects.requireNonNull(jda.getTextChannelById(Objects.requireNonNull(config.getString("chat-channel")))).sendMessage("**" + playerName +"**: " + event.getMessage()).queue(); + String avatar = "https://mc-heads.net/avatar/" + playerName; + WebHooks.sendToAll(playerName, avatar, event.getMessage()); DiscordAuthorizator.getPlugin(DiscordAuthorizator.class).getLogger().info(event.getPlayer().getDisplayName() + ": " + event.getMessage()); for (Player p: Bukkit.getOnlinePlayers()){ p.spigot().sendMessage(messageComponent); diff --git a/src/main/java/xyz/soukup/discordauthorizator/events/DiscordSendMessage.java b/src/main/java/xyz/soukup/discordauthorizator/events/DiscordSendMessage.java index 407c949..514e79b 100644 --- a/src/main/java/xyz/soukup/discordauthorizator/events/DiscordSendMessage.java +++ b/src/main/java/xyz/soukup/discordauthorizator/events/DiscordSendMessage.java @@ -1,5 +1,6 @@ package xyz.soukup.discordauthorizator.events; +import net.dv8tion.jda.api.entities.User; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; import net.md_5.bungee.api.chat.ComponentBuilder; @@ -13,15 +14,25 @@ import xyz.soukup.discordauthorizator.DiscordAuthorizator; import java.util.Objects; +import static xyz.soukup.discordauthorizator.WebHooks.send; + public class DiscordSendMessage extends ListenerAdapter { public void onMessageReceived(MessageReceivedEvent event){ FileConfiguration config = DiscordAuthorizator.getPlugin(DiscordAuthorizator.class).getConfig(); - if (event.getChannel().getId().equals(config.getString("chat-channel")) && !event.getAuthor().isBot()){ + if (DiscordAuthorizator.webHooks.containsKey(event.getChannel().getId()) && !event.getAuthor().isBot()){ TextComponent content = new TextComponent(event.getMessage().getContentStripped()); TextComponent sentFromDiscord = new TextComponent(net.md_5.bungee.api.ChatColor.DARK_PURPLE + "[D] "); - sentFromDiscord.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder(ChatColor.LIGHT_PURPLE + "Odesláno z discordu").create())); + sentFromDiscord.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder(ChatColor.LIGHT_PURPLE + "Odesláno z oficiálního discordu").create())); + if (!event.getGuild().getId().equals(config.getString("guild"))){ + sentFromDiscord.setText(net.md_5.bungee.api.ChatColor.DARK_PURPLE + "[PD] "); + sentFromDiscord.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder(ChatColor.LIGHT_PURPLE + "Odesláno z partnerského discordu").create())); + + } TextComponent name = new TextComponent(event.getAuthor().getName() + ": "); - name.setColor(DiscordAuthorizator.convertToChatColor(Objects.requireNonNull(Objects.requireNonNull(event.getMember()).getColor()))); + if (Objects.requireNonNull(event.getMember()).getColor() != null){ + + name.setColor(DiscordAuthorizator.convertToChatColor(Objects.requireNonNull(Objects.requireNonNull(event.getMember()).getColor()))); + } TextComponent message = new TextComponent(); message.addExtra(sentFromDiscord); message.addExtra(name); @@ -29,6 +40,15 @@ public class DiscordSendMessage extends ListenerAdapter { for (Player p: Bukkit.getOnlinePlayers()){ p.spigot().sendMessage(message); } + User author = event.getAuthor(); + String serverNickname = config.getString("channels." + event.getChannel().getId()); + for(String channel : DiscordAuthorizator.webHooks.keySet()){ + if (channel.equals(event.getChannel().getId())){ + continue; + } + + send(DiscordAuthorizator.webHooks.get(channel), author.getName() + " (" + serverNickname +")", author.getAvatarUrl(), event.getMessage().getContentRaw()); + } } } } diff --git a/src/main/java/xyz/soukup/discordauthorizator/events/initializeCrossChat.java b/src/main/java/xyz/soukup/discordauthorizator/events/initializeCrossChat.java new file mode 100644 index 0000000..08dee6c --- /dev/null +++ b/src/main/java/xyz/soukup/discordauthorizator/events/initializeCrossChat.java @@ -0,0 +1,48 @@ +package xyz.soukup.discordauthorizator.events; + +import net.dv8tion.jda.api.JDA; +import net.dv8tion.jda.api.entities.Guild; +import net.dv8tion.jda.api.entities.channel.concrete.TextChannel; +import net.dv8tion.jda.api.events.session.ReadyEvent; +import net.dv8tion.jda.api.hooks.ListenerAdapter; +import org.bukkit.Bukkit; +import org.bukkit.configuration.file.FileConfiguration; +import org.jetbrains.annotations.NotNull; +import xyz.soukup.discordauthorizator.DiscordAuthorizator; + +import java.util.HashMap; +import java.util.Objects; +import java.util.Set; +import java.util.logging.Logger; + +import static xyz.soukup.discordauthorizator.DiscordAuthorizator.webHooks; + +public class initializeCrossChat extends ListenerAdapter { + @Override + public void onReady(@NotNull ReadyEvent event){ + JDA jda = DiscordAuthorizator.getJDA(); + DiscordAuthorizator plugin = DiscordAuthorizator.getPlugin(DiscordAuthorizator.class); + FileConfiguration config = plugin.getConfig(); + Logger logger = plugin.getLogger(); + + + //JDA CrossChat WebHook Initialization + Set channels = Objects.requireNonNull(config.getConfigurationSection("channels")).getKeys(false); + for(String channelID : channels){ + logger.info(channelID); + TextChannel channel = jda.getTextChannelById(channelID); + String channelNickname = config.getString("channels." + channelID); + if (channel == null){ + logger.info("not exist"); + continue; + } + channel.createWebhook("Server KNKS").queue((createdWebhook)->{ + Guild guild = createdWebhook.getGuild(); + String name = guild.getName(); + webHooks.put(channelID, createdWebhook.getUrl()); + logger.info("Vytvořen webhook pro: " + name + " Nickname: " + channelNickname); + }); + + } + } +} diff --git a/src/main/java/xyz/soukup/discordauthorizator/events/playerDie.java b/src/main/java/xyz/soukup/discordauthorizator/events/playerDie.java index 0f6a05e..6f2b489 100644 --- a/src/main/java/xyz/soukup/discordauthorizator/events/playerDie.java +++ b/src/main/java/xyz/soukup/discordauthorizator/events/playerDie.java @@ -1,5 +1,7 @@ package xyz.soukup.discordauthorizator.events; +import club.minnced.discord.webhook.send.WebhookEmbed; +import club.minnced.discord.webhook.send.WebhookEmbedBuilder; import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.JDA; import org.bukkit.configuration.file.FileConfiguration; @@ -7,6 +9,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.entity.PlayerDeathEvent; import xyz.soukup.discordauthorizator.DiscordAuthorizator; +import xyz.soukup.discordauthorizator.WebHooks; import java.awt.*; import java.util.Objects; @@ -14,12 +17,12 @@ import java.util.Objects; public class playerDie implements Listener { @EventHandler public void playerDied(PlayerDeathEvent event){ - JDA jda = DiscordAuthorizator.getJDA(); - EmbedBuilder eb = new EmbedBuilder(); - eb.setColor(Color.DARK_GRAY); - eb.setAuthor(event.getDeathMessage(), null, "https://mc-heads.net/avatar/" + event.getEntity().getDisplayName()); - FileConfiguration config = DiscordAuthorizator.getPlugin(DiscordAuthorizator.class).getConfig(); - Objects.requireNonNull(jda.getTextChannelById(Objects.requireNonNull(config.getString("chat-channel")))).sendMessageEmbeds(eb.build()).queue(); + String playerName = event.getEntity().getDisplayName(); + WebhookEmbedBuilder eb = new WebhookEmbedBuilder(); + eb.setColor(0x424242); + String avatar = "https://mc-heads.net/avatar/" + playerName; + eb.setAuthor(new WebhookEmbed.EmbedAuthor(Objects.requireNonNull(event.getDeathMessage()), avatar, avatar)); + WebHooks.sendToAll(playerName, avatar, eb.build()); } } diff --git a/src/main/java/xyz/soukup/discordauthorizator/events/playerJoin.java b/src/main/java/xyz/soukup/discordauthorizator/events/playerJoin.java index 2c26144..ed0999f 100644 --- a/src/main/java/xyz/soukup/discordauthorizator/events/playerJoin.java +++ b/src/main/java/xyz/soukup/discordauthorizator/events/playerJoin.java @@ -1,10 +1,13 @@ package xyz.soukup.discordauthorizator.events; +import club.minnced.discord.webhook.send.WebhookEmbed; +import club.minnced.discord.webhook.send.WebhookEmbedBuilder; import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.entities.Guild; +import net.dv8tion.jda.api.entities.Webhook; +import net.md_5.bungee.api.ChatColor; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.Color; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.event.EventHandler; @@ -12,12 +15,14 @@ import org.bukkit.event.Listener; import org.bukkit.event.player.AsyncPlayerPreLoginEvent; import org.bukkit.event.player.PlayerJoinEvent; import xyz.soukup.discordauthorizator.DiscordAuthorizator; +import xyz.soukup.discordauthorizator.WebHooks; import java.util.Objects; public class playerJoin implements Listener { @EventHandler public void playerQuit(PlayerJoinEvent event){ + String playerName = event.getPlayer().getDisplayName(); Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(DiscordAuthorizator.getPlugin(DiscordAuthorizator.class), new Runnable(){ @Override public void run(){ @@ -28,28 +33,32 @@ public class playerJoin implements Listener { JDA jda = DiscordAuthorizator.getJDA(); Guild guild = jda.getGuildById(Objects.requireNonNull(config.getString("guild"))); assert guild != null; - String id = config.getString("players." + event.getPlayer().getDisplayName() + ".discord"); + String id = config.getString("players." + playerName + ".discord"); assert id != null; Color color; guild.retrieveMemberById(id).queue( member -> { + net.md_5.bungee.api.ChatColor memberColor = DiscordAuthorizator.convertToChatColor(Objects.requireNonNull(member.getColor())); - DiscordAuthorizator.playerColor.put(event.getPlayer().getDisplayName(), memberColor); - DiscordAuthorizator.playerRole.put(event.getPlayer().getDisplayName(), member.getRoles().get(0)); + DiscordAuthorizator.playerColor.put(playerName, memberColor); + DiscordAuthorizator.playerRole.put(playerName, member.getRoles().get(0)); DiscordAuthorizator.updateStatus(); - EmbedBuilder eb = new EmbedBuilder(); - eb.setColor(java.awt.Color.GREEN); - eb.setAuthor("Hráč " + event.getPlayer().getDisplayName() + " se připojil", null, "https://mc-heads.net/avatar/" + event.getPlayer().getDisplayName()); - Objects.requireNonNull(jda.getTextChannelById(Objects.requireNonNull(config.getString("chat-channel")))).sendMessageEmbeds(eb.build()).queue(); + WebhookEmbedBuilder eb = new WebhookEmbedBuilder(); + eb.setColor(0x36d900); + String avatar = "https://mc-heads.net/avatar/" + playerName; + eb.setAuthor(new WebhookEmbed.EmbedAuthor("Hráč " + playerName + " se připojil", avatar, avatar)); + WebHooks.sendToAll(playerName, avatar, eb.build()); }, throwable -> { - // Error: Member was not found or an error occurred - String kickMessage = "&6&lK&f&lN&6&lK&f&lS" - + "\n\n&c&lNejsi na našem discordu" - + "\n\n&fPro hraní na našem server se musíš připojit na discord:" - + "&bdiscord.gg/EK2n7TEQ4H"; - event.getPlayer().kickPlayer(ChatColor.translateAlternateColorCodes('&', kickMessage)); + net.md_5.bungee.api.ChatColor memberColor = ChatColor.GRAY; + DiscordAuthorizator.playerColor.put(playerName, memberColor); + DiscordAuthorizator.updateStatus(); + WebhookEmbedBuilder eb = new WebhookEmbedBuilder(); + eb.setColor(0x36d900); + String avatar = "https://mc-heads.net/avatar/" + playerName; + eb.setAuthor(new WebhookEmbed.EmbedAuthor("Hráč " + playerName + " se připojil", avatar, avatar)); + WebHooks.sendToAll(playerName, avatar, eb.build()); } ); diff --git a/src/main/java/xyz/soukup/discordauthorizator/events/playerLeave.java b/src/main/java/xyz/soukup/discordauthorizator/events/playerLeave.java index 8f88914..52943e2 100644 --- a/src/main/java/xyz/soukup/discordauthorizator/events/playerLeave.java +++ b/src/main/java/xyz/soukup/discordauthorizator/events/playerLeave.java @@ -1,5 +1,7 @@ package xyz.soukup.discordauthorizator.events; +import club.minnced.discord.webhook.send.WebhookEmbed; +import club.minnced.discord.webhook.send.WebhookEmbedBuilder; import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.JDA; import org.bukkit.Bukkit; @@ -9,6 +11,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerQuitEvent; import xyz.soukup.discordauthorizator.DiscordAuthorizator; +import xyz.soukup.discordauthorizator.WebHooks; import javax.security.auth.kerberos.KerberosTicket; import java.awt.*; @@ -17,13 +20,12 @@ import java.util.Objects; public class playerLeave implements Listener { @EventHandler public void playerQuit(PlayerQuitEvent event){ - JDA jda = DiscordAuthorizator.getJDA(); - EmbedBuilder eb = new EmbedBuilder(); - eb.setColor(Color.RED); - eb.setAuthor("Hráč " + event.getPlayer().getDisplayName() + " se odpojil", null, "https://mc-heads.net/avatar/" + event.getPlayer().getDisplayName()); - FileConfiguration config = DiscordAuthorizator.getPlugin(DiscordAuthorizator.class).getConfig(); - Objects.requireNonNull(jda.getTextChannelById(Objects.requireNonNull(config.getString("chat-channel")))).sendMessageEmbeds(eb.build()).queue(); - + String playerName = event.getPlayer().getDisplayName(); + WebhookEmbedBuilder eb = new WebhookEmbedBuilder(); + eb.setColor(0xf50000); + String avatar = "https://mc-heads.net/avatar/" + playerName; + eb.setAuthor(new WebhookEmbed.EmbedAuthor("Hráč " + playerName + " se odpojil", avatar, avatar)); + WebHooks.sendToAll(playerName, avatar, eb.build()); Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(DiscordAuthorizator.getPlugin(DiscordAuthorizator.class), new Runnable(){ @Override public void run(){ diff --git a/src/main/java/xyz/soukup/discordauthorizator/events/playerLogin.java b/src/main/java/xyz/soukup/discordauthorizator/events/playerLogin.java index 4136f71..59a6a7e 100644 --- a/src/main/java/xyz/soukup/discordauthorizator/events/playerLogin.java +++ b/src/main/java/xyz/soukup/discordauthorizator/events/playerLogin.java @@ -3,6 +3,9 @@ package xyz.soukup.discordauthorizator.events; import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.entities.Guild; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.interactions.components.ActionRow; +import net.dv8tion.jda.api.interactions.components.buttons.Button; import org.bukkit.ChatColor; import org.bukkit.Color; import org.bukkit.configuration.file.FileConfiguration; @@ -12,7 +15,9 @@ import org.bukkit.event.player.AsyncPlayerPreLoginEvent; import xyz.soukup.discordauthorizator.DiscordAuthorizator; +import java.awt.*; import java.util.*; +import java.util.List; public class playerLogin implements Listener { public static HashMap> playersToVerify = new HashMap<>(); @@ -29,12 +34,33 @@ public class playerLogin implements Listener { + "\n\n&fPoslali jsme ti na tvůj discord účet zprávu" + "\n&fKlikni na &3přidat ip &f a připoj se znovu" + "\n\n&6&lZpráva nepřišla?" - + "\n&fMůžeš použít příkaz &3/authorize &f na našem discordu" + + "\n&fMůžeš použít příkaz &3/authorize &f na discordu" + "\n\n\n&7Tvá IP bude uložena, aby jsi se mohl přihlásit" + "\n&7bez nutnosti zadávání hesla.";; - ipToAdd.put(config.getString("players."+ event.getName() + ".discord"), List.of(event.getName(), event.getAddress().toString())); + String userid = config.getString("players."+ event.getName() + ".discord"); + String userAdress = event.getAddress().toString(); + ipToAdd.put(userid, List.of(event.getName(), userAdress)); event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER, ChatColor.translateAlternateColorCodes('&', kickMessage)); + assert userid != null; + EmbedBuilder embedBuilder = new EmbedBuilder() + .setTitle("Pokus o přihlášení z nové IP") + .setDescription("Pokud to jsi ty potvrď přidání ip níže." + + "\n\n**Nick:** " + event.getName() + + "\n**IP:** ||" + userAdress + "||") + .setColor(java.awt.Color.ORANGE); + DiscordAuthorizator.getPlugin(DiscordAuthorizator.class).getLogger().info("GGGGGG " + userid); + Button button = Button.success("addIP", "Přidat IP"); + DiscordAuthorizator.getJDA().retrieveUserById(userid).queue((user) -> + + user.openPrivateChannel().queue((channel) -> + + channel.sendMessageEmbeds(embedBuilder.build()) + .addActionRow(button) + .queue())); + + + return; } JDA jda = DiscordAuthorizator.getJDA(); @@ -68,12 +94,13 @@ public class playerLogin implements Listener { + "\n\n&cNejsi na whitelistu, &fale můžeš být ;)" + "\n\n" + "\n&f1) Zapamatuj si tento kód: &b" + code - + "\n&f2) Připoj se na náš discord: &bdiscord.gg/EK2n7TEQ4H" + + "\n&f2) Připoj se na náš nebo partnerský discord" + "\n&f3) Našemu discord botovi napiš příkaz &b/link" + "\n&f4) Zadej svůj nick a kód" + "\n&f5) znovu se připoj!" + "\n\n\n&7Tvá IP bude uložena, aby jsi se mohl přihlásit" - + "\n&7bez nutnosti zadávání hesla."; + + "\n&7bez nutnosti zadávání hesla." + + "\n\n&fWEB: &bknks.cz &fDISCORD: &bdiscord.gg/EK2n7TEQ4H"; event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_WHITELIST, ChatColor.translateAlternateColorCodes('&', kickMessage)); } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index c907209..7c53aa5 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,5 +1,8 @@ -token: MTI1MTg1MjY2NDI2Mjg4NTQzNw.GB6jIc.QRulRHK5J-I88jvzCUkoKcx8r4vW2DrBOxHlR4 -authorized-role: 1236261645723111465 -guild: 1161967821815808030 -chat-channel: 1247447721175027744 - +token: "TOKEN" +authorized-role: 0000000000000000001 +guild: 0000000000000000001 +chat-channel: 0000000000000000001 +#MUST NOT Contain word "discord" +channels: + 0000000000000000001: "Channel One" + 0000000000000000002: "Channel Two" \ No newline at end of file diff --git a/target/classes/config.yml b/target/classes/config.yml index c907209..9827762 100644 --- a/target/classes/config.yml +++ b/target/classes/config.yml @@ -2,4 +2,6 @@ token: MTI1MTg1MjY2NDI2Mjg4NTQzNw.GB6jIc.QRulRHK5J-I88jvzCUkoKcx8r4vW2DrBOxHlR4 authorized-role: 1236261645723111465 guild: 1161967821815808030 chat-channel: 1247447721175027744 - +channels: + 1261983819809161216: "Území Testů" + 1247447721175027744: "KNKS Discord" \ No newline at end of file diff --git a/target/classes/xyz/soukup/discordauthorizator/DiscordAuthorizator.class b/target/classes/xyz/soukup/discordauthorizator/DiscordAuthorizator.class index f4969c7..cf80762 100644 Binary files a/target/classes/xyz/soukup/discordauthorizator/DiscordAuthorizator.class and b/target/classes/xyz/soukup/discordauthorizator/DiscordAuthorizator.class differ diff --git a/target/classes/xyz/soukup/discordauthorizator/commands/authorize.class b/target/classes/xyz/soukup/discordauthorizator/commands/authorize.class index e1c2f2c..12ca053 100644 Binary files a/target/classes/xyz/soukup/discordauthorizator/commands/authorize.class and b/target/classes/xyz/soukup/discordauthorizator/commands/authorize.class differ diff --git a/target/classes/xyz/soukup/discordauthorizator/commands/link.class b/target/classes/xyz/soukup/discordauthorizator/commands/link.class index 13913ef..df33442 100644 Binary files a/target/classes/xyz/soukup/discordauthorizator/commands/link.class and b/target/classes/xyz/soukup/discordauthorizator/commands/link.class differ diff --git a/target/classes/xyz/soukup/discordauthorizator/events/ChatEvent.class b/target/classes/xyz/soukup/discordauthorizator/events/ChatEvent.class index 0b95b70..9d22526 100644 Binary files a/target/classes/xyz/soukup/discordauthorizator/events/ChatEvent.class and b/target/classes/xyz/soukup/discordauthorizator/events/ChatEvent.class differ diff --git a/target/classes/xyz/soukup/discordauthorizator/events/DiscordSendMessage.class b/target/classes/xyz/soukup/discordauthorizator/events/DiscordSendMessage.class index ffec1b9..d939ada 100644 Binary files a/target/classes/xyz/soukup/discordauthorizator/events/DiscordSendMessage.class and b/target/classes/xyz/soukup/discordauthorizator/events/DiscordSendMessage.class differ diff --git a/target/classes/xyz/soukup/discordauthorizator/events/playerDie.class b/target/classes/xyz/soukup/discordauthorizator/events/playerDie.class index b3d459a..fbaf632 100644 Binary files a/target/classes/xyz/soukup/discordauthorizator/events/playerDie.class and b/target/classes/xyz/soukup/discordauthorizator/events/playerDie.class differ diff --git a/target/classes/xyz/soukup/discordauthorizator/events/playerJoin$1.class b/target/classes/xyz/soukup/discordauthorizator/events/playerJoin$1.class index f36cdc8..28e676c 100644 Binary files a/target/classes/xyz/soukup/discordauthorizator/events/playerJoin$1.class and b/target/classes/xyz/soukup/discordauthorizator/events/playerJoin$1.class differ diff --git a/target/classes/xyz/soukup/discordauthorizator/events/playerJoin.class b/target/classes/xyz/soukup/discordauthorizator/events/playerJoin.class index d67df96..5c6d22e 100644 Binary files a/target/classes/xyz/soukup/discordauthorizator/events/playerJoin.class and b/target/classes/xyz/soukup/discordauthorizator/events/playerJoin.class differ diff --git a/target/classes/xyz/soukup/discordauthorizator/events/playerLeave$1.class b/target/classes/xyz/soukup/discordauthorizator/events/playerLeave$1.class index 72e2990..8d017a6 100644 Binary files a/target/classes/xyz/soukup/discordauthorizator/events/playerLeave$1.class and b/target/classes/xyz/soukup/discordauthorizator/events/playerLeave$1.class differ diff --git a/target/classes/xyz/soukup/discordauthorizator/events/playerLeave.class b/target/classes/xyz/soukup/discordauthorizator/events/playerLeave.class index 28346ff..cc5c5ed 100644 Binary files a/target/classes/xyz/soukup/discordauthorizator/events/playerLeave.class and b/target/classes/xyz/soukup/discordauthorizator/events/playerLeave.class differ diff --git a/target/classes/xyz/soukup/discordauthorizator/events/playerLogin.class b/target/classes/xyz/soukup/discordauthorizator/events/playerLogin.class index 06a11bf..eabe2c4 100644 Binary files a/target/classes/xyz/soukup/discordauthorizator/events/playerLogin.class and b/target/classes/xyz/soukup/discordauthorizator/events/playerLogin.class differ