From d43e96b3e032effd3b788d034e427ecb9c2b9b1c Mon Sep 17 00:00:00 2001 From: jakub Date: Mon, 17 Jun 2024 13:56:41 +0200 Subject: [PATCH] pp --- .idea/.gitignore | 3 + .idea/artifacts/DiscordAuthorizator_jar.xml | 24 +++ .idea/compiler.xml | 14 ++ .idea/discord.xml | 7 + .idea/encodings.xml | 7 + .idea/inspectionProfiles/Project_Default.xml | 7 + .idea/jarRepositories.xml | 30 ++++ .idea/misc.xml | 14 ++ .idea/modules.xml | 8 + .idea/uiDesigner.xml | 124 ++++++++++++++++ .idea/vcs.xml | 6 + DiscordAuthorizator.iml | 13 ++ pom.xml | 83 +++++++++++ .../DiscordAuthorizator.java | 126 ++++++++++++++++ .../commands/authorize.java | 29 ++++ .../discordauthorizator/commands/link.java | 75 ++++++++++ .../discordauthorizator/commands/msg.java | 51 +++++++ .../discordauthorizator/commands/r.java | 44 ++++++ .../discordauthorizator/commands/voting.java | 140 ++++++++++++++++++ .../discordauthorizator/events/ChatEvent.java | 55 +++++++ .../events/DiscordSendMessage.java | 34 +++++ .../discordauthorizator/events/playerDie.java | 25 ++++ .../events/playerJoin.java | 19 +++ .../events/playerLeave.java | 35 +++++ .../events/playerLogin.java | 102 +++++++++++++ src/main/resources/config.yml | 5 + src/main/resources/plugin.yml | 9 ++ target/classes/config.yml | 5 + target/classes/plugin.yml | 9 ++ .../DiscordAuthorizator.class | Bin 0 -> 10139 bytes .../commands/authorize.class | Bin 0 -> 2931 bytes .../discordauthorizator/commands/link.class | Bin 0 -> 7424 bytes .../discordauthorizator/commands/msg.class | Bin 0 -> 3531 bytes .../discordauthorizator/commands/r.class | Bin 0 -> 3303 bytes .../discordauthorizator/commands/voting.class | Bin 0 -> 10931 bytes .../events/ChatEvent.class | Bin 0 -> 5546 bytes .../events/DiscordSendMessage.class | Bin 0 -> 4322 bytes .../events/playerDie.class | Bin 0 -> 2934 bytes .../events/playerJoin$1.class | Bin 0 -> 860 bytes .../events/playerJoin.class | Bin 0 -> 1263 bytes .../events/playerLeave$1.class | Bin 0 -> 866 bytes .../events/playerLeave.class | Bin 0 -> 3439 bytes .../events/playerLogin.class | Bin 0 -> 9610 bytes 43 files changed, 1103 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/artifacts/DiscordAuthorizator_jar.xml create mode 100644 .idea/compiler.xml create mode 100644 .idea/discord.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/uiDesigner.xml create mode 100644 .idea/vcs.xml create mode 100644 DiscordAuthorizator.iml create mode 100644 pom.xml create mode 100644 src/main/java/xyz/soukup/discordauthorizator/DiscordAuthorizator.java create mode 100644 src/main/java/xyz/soukup/discordauthorizator/commands/authorize.java create mode 100644 src/main/java/xyz/soukup/discordauthorizator/commands/link.java create mode 100644 src/main/java/xyz/soukup/discordauthorizator/commands/msg.java create mode 100644 src/main/java/xyz/soukup/discordauthorizator/commands/r.java create mode 100644 src/main/java/xyz/soukup/discordauthorizator/commands/voting.java create mode 100644 src/main/java/xyz/soukup/discordauthorizator/events/ChatEvent.java create mode 100644 src/main/java/xyz/soukup/discordauthorizator/events/DiscordSendMessage.java create mode 100644 src/main/java/xyz/soukup/discordauthorizator/events/playerDie.java create mode 100644 src/main/java/xyz/soukup/discordauthorizator/events/playerJoin.java create mode 100644 src/main/java/xyz/soukup/discordauthorizator/events/playerLeave.java create mode 100644 src/main/java/xyz/soukup/discordauthorizator/events/playerLogin.java create mode 100644 src/main/resources/config.yml create mode 100644 src/main/resources/plugin.yml create mode 100644 target/classes/config.yml create mode 100644 target/classes/plugin.yml create mode 100644 target/classes/xyz/soukup/discordauthorizator/DiscordAuthorizator.class create mode 100644 target/classes/xyz/soukup/discordauthorizator/commands/authorize.class create mode 100644 target/classes/xyz/soukup/discordauthorizator/commands/link.class create mode 100644 target/classes/xyz/soukup/discordauthorizator/commands/msg.class create mode 100644 target/classes/xyz/soukup/discordauthorizator/commands/r.class create mode 100644 target/classes/xyz/soukup/discordauthorizator/commands/voting.class create mode 100644 target/classes/xyz/soukup/discordauthorizator/events/ChatEvent.class create mode 100644 target/classes/xyz/soukup/discordauthorizator/events/DiscordSendMessage.class create mode 100644 target/classes/xyz/soukup/discordauthorizator/events/playerDie.class create mode 100644 target/classes/xyz/soukup/discordauthorizator/events/playerJoin$1.class create mode 100644 target/classes/xyz/soukup/discordauthorizator/events/playerJoin.class create mode 100644 target/classes/xyz/soukup/discordauthorizator/events/playerLeave$1.class create mode 100644 target/classes/xyz/soukup/discordauthorizator/events/playerLeave.class create mode 100644 target/classes/xyz/soukup/discordauthorizator/events/playerLogin.class diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/artifacts/DiscordAuthorizator_jar.xml b/.idea/artifacts/DiscordAuthorizator_jar.xml new file mode 100644 index 0000000..648e32c --- /dev/null +++ b/.idea/artifacts/DiscordAuthorizator_jar.xml @@ -0,0 +1,24 @@ + + + $USER_HOME$/mineconomia/dev-server/plugins + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..a4b69fd --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/discord.xml b/.idea/discord.xml new file mode 100644 index 0000000..d8e9561 --- /dev/null +++ b/.idea/discord.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..79937a3 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..861936a --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..4731638 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..9f9bacd --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/DiscordAuthorizator.iml b/DiscordAuthorizator.iml new file mode 100644 index 0000000..a589521 --- /dev/null +++ b/DiscordAuthorizator.iml @@ -0,0 +1,13 @@ + + + + + + + SPIGOT + + 1 + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..2f76c9e --- /dev/null +++ b/pom.xml @@ -0,0 +1,83 @@ + + + 4.0.0 + + xyz.soukup + DiscordAuthorizator + 1.0-SNAPSHOT + jar + + DiscordAuthorizator + + + 1.8 + UTF-8 + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 17 + 17 + --enable-preview + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.4 + + + package + + shade + + + + + + + + src/main/resources + true + + + + + + + spigotmc-repo + https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + + + sonatype + https://oss.sonatype.org/content/groups/public/ + + + + + + org.spigotmc + spigot-api + 1.18.2-R0.1-SNAPSHOT + provided + + + net.dv8tion + JDA + 5.0.0-beta.23 + + + club.minnced + opus-java + + + + + diff --git a/src/main/java/xyz/soukup/discordauthorizator/DiscordAuthorizator.java b/src/main/java/xyz/soukup/discordauthorizator/DiscordAuthorizator.java new file mode 100644 index 0000000..503580e --- /dev/null +++ b/src/main/java/xyz/soukup/discordauthorizator/DiscordAuthorizator.java @@ -0,0 +1,126 @@ +package xyz.soukup.discordauthorizator; + +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.interactions.commands.DefaultMemberPermissions; +import net.dv8tion.jda.api.interactions.commands.OptionType; +import net.dv8tion.jda.api.interactions.commands.build.Commands; +import net.dv8tion.jda.api.requests.GatewayIntent; +import net.md_5.bungee.api.ChatColor; +import org.bukkit.Bukkit; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; +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.util.logging.Logger; +public final class DiscordAuthorizator extends JavaPlugin { + public static HashMap playerColor = new HashMap<>(); + public static HashMap playerRole = 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 = JDABuilder.createDefault(config.getString("token")) + .addEventListeners(new link()) + .addEventListeners(new authorize()) + .addEventListeners(new DiscordSendMessage()) + .addEventListeners(new voting()) + .enableIntents(GatewayIntent.GUILD_MEMBERS) + .enableIntents(GatewayIntent.GUILD_MESSAGES) + .enableIntents(GatewayIntent.MESSAGE_CONTENT) + .build(); + jda.updateCommands().addCommands( + Commands.slash("authorize", "autorizuje novou ip"), + Commands.slash("link", "propojí discord s minecraftem"), + Commands.slash("add-votes", "prida hlas ") + .setDefaultPermissions(DefaultMemberPermissions.enabledFor(Permission.ALL_PERMISSIONS)) + .addOption(OptionType.USER, "hrac", "hrac", true) + .addOption(OptionType.INTEGER, "votes", "bb", true), + Commands.slash("hlasy", "zobrazí počet hlasy") + .addOption(OptionType.USER, "hrac", "hrac", false), + Commands.slash("hlasovat", "spustí hlasování") + .addOption(OptionType.STRING, "popis", "o čem se bude hlasovat", true) + + ).queue(); + jda.getPresence().setActivity(Activity.customStatus("Nikdo na serveru")); + Bukkit.getPluginManager().registerEvents(new playerLogin(),this ); + Bukkit.getPluginManager().registerEvents(new playerLeave(),this ); + Bukkit.getPluginManager().registerEvents(new playerDie(),this ); + + Bukkit.getPluginManager().registerEvents(new ChatEvent(), this); + Objects.requireNonNull(this.getCommand("msg")).setExecutor(new msg()); + Objects.requireNonNull(this.getCommand("msg")).setTabCompleter(new msg()); + Objects.requireNonNull(this.getCommand("r")).setExecutor(new r()); + 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(); + User user = (User) voteData.get("author"); + int yes = (int) voteData.get("yes"); + int no = (int) voteData.get("no"); + String description = (String) voteData.get("description"); + EmbedBuilder eb = new EmbedBuilder(); + eb.setAuthor("Hlasování hráče " + user.getName() , null, user.getAvatarUrl()); + eb.setTitle("Hlasování předčasně skončilo kvůli restartu"); + eb.setColor(Color.MAGENTA); + eb.setDescription(description + "\n\n```Pro: "+ yes +"\nProti: "+ no +"```"); + message.editMessageComponents().queue(); + message.editMessageEmbeds(eb.build()).queue(); + } + jda.shutdown(); + } + public static JDA getJDA() { + return jda; + } + public static ChatColor convertToChatColor(Color color) { + // Extract RGB components + int red = color.getRed(); + int green = color.getGreen(); + int blue = color.getBlue(); + + // Convert RGB to hexadecimal string + String hex = String.format("#%02x%02x%02x", red, green, blue); + + // Return ChatColor from hex string + return ChatColor.of(hex); + } + public static void updateStatus(){ + Collection players =Bukkit.getOnlinePlayers(); + String status = switch (players.size()) { + case 0 -> "nikdo na serveru"; + case 1 -> "1 hráč na serveru"; + case 2, 3, 4 -> players.size() + " hráči na serveru"; + default -> players.size() + " hráčů na serveru"; + }; + jda.getPresence().setActivity(Activity.customStatus(status)); + } + +} diff --git a/src/main/java/xyz/soukup/discordauthorizator/commands/authorize.java b/src/main/java/xyz/soukup/discordauthorizator/commands/authorize.java new file mode 100644 index 0000000..fc1b344 --- /dev/null +++ b/src/main/java/xyz/soukup/discordauthorizator/commands/authorize.java @@ -0,0 +1,29 @@ +package xyz.soukup.discordauthorizator.commands; + +import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; +import net.dv8tion.jda.api.hooks.ListenerAdapter; +import org.bukkit.configuration.file.FileConfiguration; +import xyz.soukup.discordauthorizator.DiscordAuthorizator; +import xyz.soukup.discordauthorizator.events.playerLogin; + +import java.util.List; + +public class authorize extends ListenerAdapter { + public void onSlashCommandInteraction(SlashCommandInteractionEvent event) { + if (event.getName().equals("authorize")) { + 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 new file mode 100644 index 0000000..08039e4 --- /dev/null +++ b/src/main/java/xyz/soukup/discordauthorizator/commands/link.java @@ -0,0 +1,75 @@ +package xyz.soukup.discordauthorizator.commands; + +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.events.interaction.ModalInteractionEvent; +import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; +import net.dv8tion.jda.api.hooks.ListenerAdapter; +import net.dv8tion.jda.api.interactions.components.ActionRow; +import net.dv8tion.jda.api.interactions.components.text.TextInput; +import net.dv8tion.jda.api.interactions.components.text.TextInputStyle; +import net.dv8tion.jda.api.interactions.modals.Modal; +import net.dv8tion.jda.api.interactions.modals.ModalMapping; +import org.bukkit.configuration.file.FileConfiguration; +import xyz.soukup.discordauthorizator.DiscordAuthorizator; +import xyz.soukup.discordauthorizator.events.playerLogin; + +import java.awt.*; +import java.util.List; +import java.util.Objects; + +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) + .setPlaceholder("PVPMaster666") + .setMaxLength(16) // or setRequiredRange(10, 100) + .build(); + + TextInput body = TextInput.create("code", "Verifikační kód", TextInputStyle.PARAGRAPH) + .setPlaceholder("1234") + .setMaxLength(4) + .setMinLength(4) + .build(); + + Modal modal = Modal.create("linkdialog", "Propojení minecraft účtu") + .addComponents(ActionRow.of(subject), ActionRow.of(body)) + .build(); + + event.replyModal(modal).queue(); + } +} + public void onModalInteraction(ModalInteractionEvent event) { + if (event.getModalId().equals("linkdialog")) { + List answers = event.getValues(); + if (playerLogin.playersToVerify.containsKey(answers.get(0).getAsString())){ + if (Objects.equals(playerLogin.playersToVerify.get(answers.get(0).getAsString()).get(1), answers.get(1).getAsString())){ + 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(); + playerLogin.playersToVerify.remove(answers.get(0).getAsString()); + MessageEmbed embed = new EmbedBuilder() + .setTitle("Propojeno.") + .setDescription("Přejeme příjemné hraní") + .setColor(Color.GREEN) + .build(); + DiscordAuthorizator.getPlugin(DiscordAuthorizator.class).saveConfig(); + event.replyEmbeds(embed).setEphemeral(true).queue(); + }else { + MessageEmbed embed = new EmbedBuilder() + .setTitle("Špatný kód.") + .setColor(Color.RED) + .build(); + event.replyEmbeds(embed).setEphemeral(true).queue(); + } + }else{ + MessageEmbed embed = new EmbedBuilder() + .setTitle("Daný nick není ve verifikačním procesu.") + .setColor(Color.RED) + .build(); + event.replyEmbeds(embed).setEphemeral(true).queue(); + } + } + } +} diff --git a/src/main/java/xyz/soukup/discordauthorizator/commands/msg.java b/src/main/java/xyz/soukup/discordauthorizator/commands/msg.java new file mode 100644 index 0000000..53331db --- /dev/null +++ b/src/main/java/xyz/soukup/discordauthorizator/commands/msg.java @@ -0,0 +1,51 @@ +package xyz.soukup.discordauthorizator.commands; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabExecutor; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +public class msg implements TabExecutor { + @Override + public boolean onCommand(CommandSender commandSender, Command command, String s, String[] strings) { + if (strings.length < 1){ + commandSender.sendMessage(ChatColor.RED + "nedostatek argumentů"); + return false; + } + if (Bukkit.getPlayer(strings[0]) != null) { + StringBuilder message = new StringBuilder(); + for(int i = 0; i < strings.length; i++) { + if (i !=0){ + message.append(" ").append(strings[i]); + } + } + + + commandSender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&4&l<<&f"+ strings[0] + "&4&l<<&f" + message)); + Objects.requireNonNull(Bukkit.getPlayer(strings[0])).sendMessage(ChatColor.translateAlternateColorCodes('&', "&2&l>>&f"+ ((Player) commandSender).getDisplayName() + "&2&l>>&f" + message)); + r.lastMessaged.put((Player) commandSender, Objects.requireNonNull(Bukkit.getPlayer(strings[0]))); + }else { + commandSender.sendMessage(ChatColor.RED + "Hráč není na serveru"); + } + return true; + } + + @Override + public List onTabComplete(CommandSender commandSender, Command command, String s, String[] strings) { + List suggestions = new ArrayList<>(); + if (strings.length == 0){ + for (Player p: Bukkit.getOnlinePlayers()){ + suggestions.add(p.getDisplayName()); + } + }else{ + suggestions.add(""); + } + return null; + } +} diff --git a/src/main/java/xyz/soukup/discordauthorizator/commands/r.java b/src/main/java/xyz/soukup/discordauthorizator/commands/r.java new file mode 100644 index 0000000..c086d68 --- /dev/null +++ b/src/main/java/xyz/soukup/discordauthorizator/commands/r.java @@ -0,0 +1,44 @@ +package xyz.soukup.discordauthorizator.commands; + +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabExecutor; +import org.bukkit.entity.Player; +import xyz.soukup.discordauthorizator.DiscordAuthorizator; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +public class r implements TabExecutor { + public static HashMap lastMessaged = new HashMap<>(); + @Override + public boolean onCommand(CommandSender commandSender, Command command, String s, String[] strings) { + Player player = (Player) commandSender; + if (!lastMessaged.containsKey(player)){ + player.sendMessage(ChatColor.RED + "Nemáš komu rychle odpovědět"); + return false; + } + if (!lastMessaged.get(player).isOnline()){ + player.sendMessage(ChatColor.RED + "Hráč se kterým sis psal již není online"); + return false; + } + StringBuilder message = new StringBuilder(); + for (String string : strings) { + message.append(" ").append(string); + } + Player playerTo = lastMessaged.get(player); + player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&4&l<<&f"+ playerTo.getDisplayName() + "&4&l<<&f" + message)); + playerTo.sendMessage(ChatColor.translateAlternateColorCodes('&', "&2&l>>&f"+ player.getDisplayName() + "&2&l>>&f" + message)); + + return true; + } + + @Override + public List onTabComplete(CommandSender commandSender, Command command, String s, String[] strings) { + List l = new ArrayList<>(); + l.add(""); + return l; + } +} diff --git a/src/main/java/xyz/soukup/discordauthorizator/commands/voting.java b/src/main/java/xyz/soukup/discordauthorizator/commands/voting.java new file mode 100644 index 0000000..227bca5 --- /dev/null +++ b/src/main/java/xyz/soukup/discordauthorizator/commands/voting.java @@ -0,0 +1,140 @@ +package xyz.soukup.discordauthorizator.commands; + +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.entities.Message; +import net.dv8tion.jda.api.entities.User; +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 net.dv8tion.jda.api.interactions.components.ActionRow; +import net.dv8tion.jda.api.interactions.components.buttons.Button; +import net.dv8tion.jda.api.interactions.components.text.TextInput; +import net.dv8tion.jda.api.interactions.components.text.TextInputStyle; +import net.dv8tion.jda.api.interactions.modals.Modal; +import org.bukkit.Bukkit; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.scheduler.BukkitScheduler; +import xyz.soukup.discordauthorizator.DiscordAuthorizator; + +import java.awt.*; +import java.io.IOException; +import java.time.Instant; +import java.time.temporal.ChronoUnit; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Objects; +import java.util.function.Consumer; + +public class voting extends ListenerAdapter { + public static HashMap> activeVotings = new HashMap<>(); + DiscordAuthorizator plugin = DiscordAuthorizator.getPlugin(DiscordAuthorizator.class); + FileConfiguration config = plugin.getConfig(); + + @Override + public void onSlashCommandInteraction(SlashCommandInteractionEvent event) { + + User user = event.getUser(); + if (event.getOption("hrac") != null){ + user = Objects.requireNonNull(event.getOption("hrac")).getAsUser(); + + } + String id = user.getId(); + int currentVotes = config.getInt("votes." + id); + if (event.getName().equals("add-votes")) { + int votesToAdd = Objects.requireNonNull(event.getOption("votes")).getAsInt(); + config.set("votes." + id, currentVotes + votesToAdd); + event.reply("připsáno. Hráč " + user.getName() + " má nyní " + config.getInt("votes." + id)) + .setEphemeral(true) + .queue(); + } + if (event.getName().equals("hlasy")){ + event.reply("Uživatel " + user.getAsMention() + " má nyní váhu hlasu " + currentVotes).setEphemeral(true).queue(); + } + if (event.getName().equals("hlasovat")){ + HashMap votingParameters = new HashMap<>(); + votingParameters.put("author", user); + String description = Objects.requireNonNull(event.getOption("popis")).getAsString(); + votingParameters.put("description", description); + votingParameters.put("yes", 0); + votingParameters.put("no", 0); + List voters = new ArrayList<>(); + votingParameters.put("voters", voters); + EmbedBuilder eb = new EmbedBuilder(); + eb.setAuthor("Hlasování hráče " + user.getName() , null, user.getAvatarUrl()); + Instant now = Instant.now(); + Instant oneDayLater = now.plus(5, ChronoUnit.HOURS); + long unixTimestamp = oneDayLater.getEpochSecond(); + String formattedTimestamp = ""; + votingParameters.put("formattedTimestamp", formattedTimestamp); + eb.setDescription(description + "\n\n```Pro: 0\nProti: 0```\n\nHlasování končí " + formattedTimestamp); + eb.setColor(Color.ORANGE); + event.reply("Hlasování vytvořeno").setEphemeral(true).queue(); + event.getChannel().sendMessageEmbeds(eb.build()) + .addActionRow( + Button.success("yes", "Souhlasím"), + Button.danger("no", "Nesouhlasím") + ).queue(msg -> { + activeVotings.put(msg, votingParameters); + BukkitScheduler scheduler = Bukkit.getScheduler(); + msg.createThreadChannel("Diskuze k hlasování").queue(); + scheduler.runTaskLater(plugin, () -> { + HashMap voteData = activeVotings.get(msg); + msg.editMessageComponents().queue(); + int yes = (int) voteData.get("yes"); + int no = (int) voteData.get("no"); + eb.setColor(Color.RED); + if (yes > no){ + eb.setColor(Color.GREEN); + } + eb.setTitle("Hlasování skončilo"); + eb.setDescription(description + "\n\n```Pro: "+ yes +"\nProti: "+ no +"```"); + msg.editMessageEmbeds(eb.build()).queue(); + activeVotings.remove(msg); + + }, 20L * 3600L*5L /*<-- the delay */); + }); + } + } + @Override + public void onButtonInteraction(ButtonInteractionEvent event) { + if (!(event.getComponentId().equals("yes") || event.getComponentId().equals("no"))){ + return; + } + Message message = event.getMessage(); + plugin.getLogger().info(message.getId()); + HashMap voteData = activeVotings.get(message); + User user = event.getUser(); + User author = (User) voteData.get("author"); + String id = user.getId(); + int currentVotes = config.getInt("votes." + id); + int yes = (int) voteData.get("yes"); + int no = (int) voteData.get("no"); + List voters = (List) voteData.get("voters"); + if (voters.contains(user)){ + event.reply("již jsi hlasoval.").setEphemeral(true).queue(); + return; + } + voters.add(user); + voteData.put("voters", voters); + if (event.getComponentId().equals("yes")){ + event.reply("Hlasoval jsi pro s váhou " + currentVotes).setEphemeral(true).queue(); + voteData.put("yes", yes+currentVotes); + yes = yes+currentVotes; + } + if (event.getComponentId().equals("no")){ + event.reply("Hlasoval jsi proti s váhou " + currentVotes).setEphemeral(true).queue(); + voteData.put("no", no+currentVotes); + no = no+currentVotes; + } + activeVotings.put(message, voteData); + String formattedTimestamp = (String) voteData.get("formattedTimestamp"); + String description = (String) voteData.get("description"); + EmbedBuilder eb = new EmbedBuilder(); + eb.setAuthor("Hlasování hráče " + author.getName() , null, author.getAvatarUrl()); + eb.setDescription(description + "\n\n```Pro: "+ yes +"\nProti: "+ no +"```\n\nHlasování končí " + formattedTimestamp); + eb.setColor(Color.ORANGE); + message.editMessageEmbeds(eb.build()).queue(); + + } +} diff --git a/src/main/java/xyz/soukup/discordauthorizator/events/ChatEvent.java b/src/main/java/xyz/soukup/discordauthorizator/events/ChatEvent.java new file mode 100644 index 0000000..abb0f0b --- /dev/null +++ b/src/main/java/xyz/soukup/discordauthorizator/events/ChatEvent.java @@ -0,0 +1,55 @@ +package xyz.soukup.discordauthorizator.events; + +import net.dv8tion.jda.api.JDA; +import net.dv8tion.jda.api.entities.Role; +import net.md_5.bungee.api.chat.*; +import net.md_5.bungee.api.chat.TextComponent; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import xyz.soukup.discordauthorizator.DiscordAuthorizator; + +import java.awt.*; +import java.util.Objects; + +public class ChatEvent implements Listener { + + + @EventHandler + public void playerChatEvent(AsyncPlayerChatEvent event){ + String playerName = event.getPlayer().getDisplayName(); + TextComponent messageComponent = new TextComponent(); + TextComponent nameComponent = new TextComponent(playerName + ": "); + if (DiscordAuthorizator.playerColor.containsKey(playerName)){ + nameComponent.setColor(DiscordAuthorizator.playerColor.get(playerName)); + } + BaseComponent[] hoverText = new ComponentBuilder(ChatColor.GREEN + "[Klikni pro napsání zprávy hráči]").create(); + if(DiscordAuthorizator.playerRole.containsKey(playerName)){ + Role role = DiscordAuthorizator.playerRole.get(playerName); + net.md_5.bungee.api.ChatColor color = DiscordAuthorizator.playerColor.get(playerName); + hoverText = new ComponentBuilder( + ChatColor.YELLOW + "" + ChatColor.BOLD + playerName + + "\n" + color + role.getName() + "\n\n" + + ChatColor.GREEN + "[Klikni pro napsání zprávy]" + + ).create(); + + } + nameComponent.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverText)); + nameComponent.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/msg " + playerName + " ")); + 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(); + DiscordAuthorizator.getPlugin(DiscordAuthorizator.class).getLogger().info(event.getPlayer().getDisplayName() + ": " + event.getMessage()); + for (Player p: Bukkit.getOnlinePlayers()){ + p.spigot().sendMessage(messageComponent); + } + } +} \ No newline at end of file diff --git a/src/main/java/xyz/soukup/discordauthorizator/events/DiscordSendMessage.java b/src/main/java/xyz/soukup/discordauthorizator/events/DiscordSendMessage.java new file mode 100644 index 0000000..407c949 --- /dev/null +++ b/src/main/java/xyz/soukup/discordauthorizator/events/DiscordSendMessage.java @@ -0,0 +1,34 @@ +package xyz.soukup.discordauthorizator.events; + +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; +import net.dv8tion.jda.api.hooks.ListenerAdapter; +import net.md_5.bungee.api.chat.ComponentBuilder; +import net.md_5.bungee.api.chat.HoverEvent; +import net.md_5.bungee.api.chat.TextComponent; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.entity.Player; +import xyz.soukup.discordauthorizator.DiscordAuthorizator; + +import java.util.Objects; + +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()){ + 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())); + TextComponent name = new TextComponent(event.getAuthor().getName() + ": "); + name.setColor(DiscordAuthorizator.convertToChatColor(Objects.requireNonNull(Objects.requireNonNull(event.getMember()).getColor()))); + TextComponent message = new TextComponent(); + message.addExtra(sentFromDiscord); + message.addExtra(name); + message.addExtra(content); + for (Player p: Bukkit.getOnlinePlayers()){ + p.spigot().sendMessage(message); + } + } + } +} diff --git a/src/main/java/xyz/soukup/discordauthorizator/events/playerDie.java b/src/main/java/xyz/soukup/discordauthorizator/events/playerDie.java new file mode 100644 index 0000000..0f6a05e --- /dev/null +++ b/src/main/java/xyz/soukup/discordauthorizator/events/playerDie.java @@ -0,0 +1,25 @@ +package xyz.soukup.discordauthorizator.events; + +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.JDA; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import xyz.soukup.discordauthorizator.DiscordAuthorizator; + +import java.awt.*; +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(); + + } +} diff --git a/src/main/java/xyz/soukup/discordauthorizator/events/playerJoin.java b/src/main/java/xyz/soukup/discordauthorizator/events/playerJoin.java new file mode 100644 index 0000000..5672106 --- /dev/null +++ b/src/main/java/xyz/soukup/discordauthorizator/events/playerJoin.java @@ -0,0 +1,19 @@ +package xyz.soukup.discordauthorizator.events; + +import org.bukkit.Bukkit; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import xyz.soukup.discordauthorizator.DiscordAuthorizator; + +public class playerJoin implements Listener { + @EventHandler + public void playerQuit(PlayerJoinEvent event){ + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(DiscordAuthorizator.getPlugin(DiscordAuthorizator.class), new Runnable(){ + @Override + public void run(){ + DiscordAuthorizator.updateStatus(); + } + }, 30L); + } +} diff --git a/src/main/java/xyz/soukup/discordauthorizator/events/playerLeave.java b/src/main/java/xyz/soukup/discordauthorizator/events/playerLeave.java new file mode 100644 index 0000000..8f88914 --- /dev/null +++ b/src/main/java/xyz/soukup/discordauthorizator/events/playerLeave.java @@ -0,0 +1,35 @@ +package xyz.soukup.discordauthorizator.events; + +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.JDA; +import org.bukkit.Bukkit; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerQuitEvent; +import xyz.soukup.discordauthorizator.DiscordAuthorizator; + +import javax.security.auth.kerberos.KerberosTicket; +import java.awt.*; +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(); + + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(DiscordAuthorizator.getPlugin(DiscordAuthorizator.class), new Runnable(){ + @Override + public void run(){ + DiscordAuthorizator.updateStatus(); + } + }, 30L); + } + } + diff --git a/src/main/java/xyz/soukup/discordauthorizator/events/playerLogin.java b/src/main/java/xyz/soukup/discordauthorizator/events/playerLogin.java new file mode 100644 index 0000000..ff33a62 --- /dev/null +++ b/src/main/java/xyz/soukup/discordauthorizator/events/playerLogin.java @@ -0,0 +1,102 @@ +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 org.bukkit.ChatColor; +import org.bukkit.Color; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerPreLoginEvent; + +import xyz.soukup.discordauthorizator.DiscordAuthorizator; + +import java.util.*; + +public class playerLogin implements Listener { + public static HashMap> playersToVerify = new HashMap<>(); + public static HashMap> ipToAdd = new HashMap<>(); + @EventHandler + public static void playerJoinEvent(AsyncPlayerPreLoginEvent event){ + FileConfiguration config = DiscordAuthorizator.getPlugin(DiscordAuthorizator.class).getConfig(); + List ipsAuthorized = config.getStringList("players." + event.getName() + ".authorized-ips"); + DiscordAuthorizator.getPlugin(DiscordAuthorizator.class).getLogger().info("Nové připojení z ip " + event.getAddress()); + if (!ipsAuthorized.isEmpty()){ + if (!ipsAuthorized.contains(Objects.requireNonNull(event.getAddress()).toString())){ + String kickMessage = "&6&lK&f&lN&6&lK&f&lS" + + "\n\n&6&lPřihlašuješ se z nové IP" + + "\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\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())); + event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER, ChatColor.translateAlternateColorCodes('&', kickMessage)); + return; + } + JDA jda = DiscordAuthorizator.getJDA(); + Guild guild = jda.getGuildById(Objects.requireNonNull(config.getString("guild"))); + assert guild != null; + String id = config.getString("players." + event.getName() + ".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.getName(), memberColor); + DiscordAuthorizator.playerRole.put(event.getName(), member.getRoles().get(0)); + DiscordAuthorizator.updateStatus(); + EmbedBuilder eb = new EmbedBuilder(); + eb.setColor(java.awt.Color.GREEN); + eb.setAuthor("Hráč " + event.getName() + " se připojil", null, "https://mc-heads.net/avatar/" + event.getName()); + Objects.requireNonNull(jda.getTextChannelById(Objects.requireNonNull(config.getString("chat-channel")))).sendMessageEmbeds(eb.build()).queue(); + + }, + 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.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER, ChatColor.translateAlternateColorCodes('&', kickMessage)); + + } + ); + + }else { + String code = generateCode(); + playersToVerify.put(event.getName(), List.of(event.getAddress().toString(), code)); + String kickMessage = "&6&lK&f&lN&6&lK&f&lS" + + "\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&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."; + event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_WHITELIST, ChatColor.translateAlternateColorCodes('&', kickMessage)); + } + } + +public static String generateCode(){ + + int leftLimit = 48; // numeral '0' + int rightLimit = 122; // letter 'z' + int targetStringLength = 4; + Random random = new Random(); + + String generatedString = random.ints(leftLimit, rightLimit + 1) + .filter(i -> (i <= 57 || i >= 65) && (i <= 90 || i >= 97)) + .limit(targetStringLength) + .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append) + .toString(); + + return generatedString.toUpperCase(); + +} +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml new file mode 100644 index 0000000..c907209 --- /dev/null +++ b/src/main/resources/config.yml @@ -0,0 +1,5 @@ +token: MTI1MTg1MjY2NDI2Mjg4NTQzNw.GB6jIc.QRulRHK5J-I88jvzCUkoKcx8r4vW2DrBOxHlR4 +authorized-role: 1236261645723111465 +guild: 1161967821815808030 +chat-channel: 1247447721175027744 + diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml new file mode 100644 index 0000000..e949c07 --- /dev/null +++ b/src/main/resources/plugin.yml @@ -0,0 +1,9 @@ +name: DiscordAuthorizator +version: '${project.version}' +main: xyz.soukup.discordauthorizator.DiscordAuthorizator +api-version: '1.18' +commands: + msg: + description: makes you send message to player + r: + description: quick response \ No newline at end of file diff --git a/target/classes/config.yml b/target/classes/config.yml new file mode 100644 index 0000000..c907209 --- /dev/null +++ b/target/classes/config.yml @@ -0,0 +1,5 @@ +token: MTI1MTg1MjY2NDI2Mjg4NTQzNw.GB6jIc.QRulRHK5J-I88jvzCUkoKcx8r4vW2DrBOxHlR4 +authorized-role: 1236261645723111465 +guild: 1161967821815808030 +chat-channel: 1247447721175027744 + diff --git a/target/classes/plugin.yml b/target/classes/plugin.yml new file mode 100644 index 0000000..6540584 --- /dev/null +++ b/target/classes/plugin.yml @@ -0,0 +1,9 @@ +name: DiscordAuthorizator +version: '1.0-SNAPSHOT' +main: xyz.soukup.discordauthorizator.DiscordAuthorizator +api-version: '1.18' +commands: + msg: + description: makes you send message to player + r: + description: quick response \ No newline at end of file diff --git a/target/classes/xyz/soukup/discordauthorizator/DiscordAuthorizator.class b/target/classes/xyz/soukup/discordauthorizator/DiscordAuthorizator.class new file mode 100644 index 0000000000000000000000000000000000000000..80321a1d50b65c1b51f4c25f50090b24faab1990 GIT binary patch literal 10139 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 Qz*jWO(A(GemUh+kFYCc#l>h($ literal 0 HcmV?d00001 diff --git a/target/classes/xyz/soukup/discordauthorizator/commands/link.class b/target/classes/xyz/soukup/discordauthorizator/commands/link.class new file mode 100644 index 0000000000000000000000000000000000000000..13913ef4ce695207b5d138bd97e367ddf1a2b815 GIT binary patch literal 7424 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 literal 0 HcmV?d00001 diff --git a/target/classes/xyz/soukup/discordauthorizator/commands/r.class b/target/classes/xyz/soukup/discordauthorizator/commands/r.class new file mode 100644 index 0000000000000000000000000000000000000000..fa4bf6e09f0477b1f131059e8dff8d04003a5706 GIT binary patch literal 3303 zcmc&$YjYD-7=BLMWRo<|l3pMP5?Uw?wfWQFG6u$T~{1tw1#AkQYcH0KVPdd|{J$cW2-plho?>Xo9zi-_I zun(6bs6)MkhA09E3N)XSr{$C;>yxSBiE~QM76@ikUA21!>bsL;5<&uN40AFyQ7#lz zJEiEhYFARnG`XUfVMNdDEWeP+!*|G-}%aSLRyg#;)=$SssI{7o5xaF! ztjCiAtBZ0$$r^f2w#QX_iZjcWb=wly+Fg5h(ihc;ZL0cYx)Bl*QEWs9bFdUWUqxa` z4pr^sm;=S8C^n;ukxnYCQdg~9eU7|px{kV|NMfr%NVSG_P1O~*v?pT_SSMizQ(7Q_ z=kY*U)$)oN!FJS#@RWc^IP+amJcHe2h+HZ$W`Q04Am)Pg1+mDQ8_V7(p2c$lE15*U zYL!T%A-TwiTDxn&6eC%C9Ng0a`)l}mq^laXBBa5-D0;D7jam^ zktkkrD7|uFo3n#;k@I<{*6h$hfhT=rtoBZ7RGv6^Udff&Pc%HDPBQqiNdS*{A^STh zG{5(yc~GY{1CL+L&yr&hM(Q!Jbly+O~mz-TrhD zHuS7_90;6U)HrjQR+mS}G{syL@Dh#m@?xD@E=ryxaV@v~oII9No*}KM+VwmNbofD9 z;w*wTo`23-YDCERoPJPP*tLFJiz`PfMeo=Yh%ZZ{+PU->@@$P7 zOl-uKa|Ir$Zowo>3M6V!E9=$6OHG2xFdnTXp|I%o@LFBM8M-rcI-<3brr0D+`9CSI z2Zc+2r62T1KmTF-Zw9pHxK5Z0~lvhmek~<{l zc-HWC{mOp;R~0>@hk2=MinVFLFnIOXXh$EAi#CoD{2J>1-l*PV{?oT=A}ed!h-xe8 z5Z)u9#gI~*z53v4qF@xu3A2)$(v*aeFB#MKujKDvu|xQP7nV58gZTcJ2}?;7c=FHQ zDJCq{N|Y>FOPo_5+)e0;KKnz$aPP?wKH^c)wYy8pWV+6Z`AG;LJMvv!T5qo-pPTSi zb41q_Gt0M)rC1U^6WF{A+*+7P_?*Z6<5gKz4`6KMv#XA`_W=LH&eMzEAwE&+FpLJy z`Lg49jFJ?;g5SW_8xTLaDlc<%mcebuIYvDNj9`?%1YW@yM{XA1(O4s8_qP28sVDF= z!tua$G<}WMIDfR=!V|zvY~XwHT6L|HiZ`)EU_ocwyv}WGKXC&)dxG(X9w{!}-5aXk z8*U4?g}%Z1xYQQj)f0&aW2x(SIv(LLelaY*fB1*bGIs@-LMswzLkCu457wZcufs#kXc+6DvM;9jy?_n4 zM6GX$_#Je*aGfUNDls3&tE>XSsRHNBPT-^q<~^LkX;#CLy+*xyclJ8Y5YQkYdjm3S zG>j4^kfY=h_99Q21cjPA(C`;JBuJeP8Dm6p{?1C6l5kFfM!AIToCuciPX;GYgidEp zxi9k@l6w9lv0 zKA%oIymTD;8B8RAH)-ABk|!}K@hE8_1e>-!LUy{a0FAfN%m|PEg0MqN;nv5aWfOxd lQ&z_syv6TYqIRAd@4Dmr?)afQUc@I{k8tf%V)zB({{T-KdTamy literal 0 HcmV?d00001 diff --git a/target/classes/xyz/soukup/discordauthorizator/commands/voting.class b/target/classes/xyz/soukup/discordauthorizator/commands/voting.class new file mode 100644 index 0000000000000000000000000000000000000000..a8633b7869a25d6f60bbbed8188f0463eb04a333 GIT binary patch literal 10931 zcmcIq3w%`7ng4%z-O1zza3E-^U=+|m2!o0s34#zJ2_^xP5CmULW-jEC$=q=sk${gX z)>2xuty?R$b&IvF*4kB+NTOIR+U>fwyW8&j(S3Dy-Ix1n_tE$NoO@?-2PP2QU4Hy- z?&F;Ae2@S4INzDKe?I;ifNSL&L6o4>K$(ehR0tL(tV}pId`-r765-vkNH~(T!vl^p zm=1T?>5P@IQfp(8WX4JfDpuJEJF{9)TEDQ*KtOQio{_!bw38joCc`m19d%N%NH#Oz zr0l(sjFSqlci*k`y$ixX&_oqXLFFzhvpJsKWhVs7>pONwh9lv4B(W>p5|5n5e}E z$dx-oaD`t5Qz8?@MVMn?u8E6LC%B=QeXU_Dkx7T`1kD&7=j>Qq~<=J7sk_ ziLPusF1XCkfjf*GOkmM_WnhV5#rtF|h(;_mafPyo0{z;wQco4G!ZHI_n^=w&f=h}K zr`jj%1cy8=XuiSkMrinD((G>iBILVM=eECTT*c~Gg6)1qcu4k1J?Wd`aPTulAN&kHYv6Mxp1`l>?3A&GtZ=&<{HTrD^MSVKvN01dYcq@0Aah1C#^)3#|#caPv=SB%L9 zYWAKn@fAGFl*p=sQENs0#$uCty=4^rTq-JHRZ04siLc?;n9qoW)}#|1=&=}=84DQF zHil4!7gRhss-)fMk650D19(Xg+UcZ*BAJX8>!q3)2ZoX%mW88g=F6vm_6(LeH7--s zhcRYi9Iuc+8h`x+HU+Ev2xu9Iq!l-iX2LB_ z++m=u*wnqYYeOrOg{#>7C(YAI6K~=zIy8CmCM@%~nHV?)qy_Nn%mi&ZDx5r$IQd-N z@JMFZdF!y1a8y|S4HIwUHw8i3h7u+c7Gqk=*(#=}J2IS2F#4p!omM&>*=2e2i3KO2 zh4{9K@8GwHyME=2g2uDa^$2M_HXHbzNs9h_rQsi6h40~a4g8*o-^U*a))b2j`H5#2 zfL@ul5;6Y@bc09hixzx&y8hwKH=o1U;-)N?p}ZwpQdT5mdD+gu9|=|#lei#JvJ_1^ z2{M}ww=+Pnc6J{F_!A%i=!IC(7TL_**4MMT{FZRm;AMzc=s?CjJrsBxo+S z-V_zj#aIHmM(9@Y`p){|MxT-yCW$I452nLIu8&PPo3?+qTN^cpP=WVM{0sh7Wp*k& z$#74wo@Jw$-LaIzLrCLy}D(YdY zPd6Fpr8A3QfJLHAH)V#}sFqSRrK~yJi^xn0!;jwh@D6Wd*xMiwJ(NaG~2{R}~Bf=E!pveb|(Ou167qCmdQ@jBhEa`zHF(E%%#jjJ7` zLcDKOI`@UHq}p5gk<9_Qn)YC`X)wFjsvGo-sH+U6!xg4nBP)rhs18-V1N;-q*BCbz zG0@a?RX{ASt!AaIRp$`Wi;xK+D636bBi9josVw_G$*JZ1|4pRS@axVd5|RG6<(2p4 z_gq&c>!sC@>rL4pZ441pu?o#eu6rZt!4B33G-r3c-1O*TakD8dF-bC=lFzWgc|taua-%BT zOS@awtLGk5dew9JhVItZu7LEBb$?x*9&{3K9@bLY3U2g4(UhGkpg0NVFGkxD3nfrtDAwyCP)`Im2Y2vd7+)h-9)U-e*pa@~evS za%xa3QX;H6ohjcNuY<6K^tQ2iY?7z&O)MxLX=uDJkeU7ciZ%BGo`@FRr_y z&^$9WZoIr51Ka4uspc%=l{b_*pm4mNZ80J+9vSM7MdnZHNb|4InQ@{5^*W62D-BMK zLFHA01i-@zl)Y|;zt{zBL%LBYgcdS;Q~H~Yrt z&J297JQAu;-(zPiR*#=nrxnWemvB47=4)N@t;2RQ%>vR{QrDI`dF0JQby7EU@>NA3QTi$xjX7ARD7knH(d1N4~OVF$u__^LH^0uyy2T*(4XIRdRJV~7GDU;Q}RVazGTXm2-{4EYN6?UyJAfWGPF^3@>so6ni@ zA$f3yun)X&iaxfmFCZ@nE_AIBiR+zWGUe2z>y)(}ZRi)-_C9q$#x59gtkA}iv$0HW z;~A)+nU5>R$4ogW9}UPW+;97kQb2{NtevgXl>RY*l{Vxx9y_0giDGVN$m@c+XCBHL z&h=4T!k-Y7u<>8Yoi2Cp5Q*@qMEZHtf>elL+2uhU2$n8U{W#hAf!V2e+tJ70FnEJv?Y+JMXaI6g^*@%|AZ+mCKNj>nrSYb$5r z^GEUID4uQ#)&@uM)fH8&{R!gFV@mfTq{spQCmHZV@i_ad_0O*NAV4^`pwfc z@U7awDBdYOf!`j(cS})z0)M!zH1uHTkB{R|d$yH@4ut;dIDXJGhQBM}A;r6kYReV% zar`r=#D6P+f<&2y#N)V(_X`NA%V_M&F&B&Y)PQAJ%tQA^9#${mfoqs2eoJwHKOQ*5 z!?wfxdW^ppcmpeV#&8YW^DFTK9@o5wX8ahdq=LWknU2+L46Tt%ah){r@O}-}Ne5b_ z2kYe)w8~B%vuCkE?m?S8jCOezH^?!zg~qT^zKu@#F8Vb*A0k&blICt1B#&=1%E##* z2%#ipM%$^e(jij&U^o~ks zd7v?LVB)E=F?2{hNsYoJDaiRHH029I3Dg*_Z|~cx@0SPia^~jEJAK}Pno8e1b-%n)NzY)jj~u+HWoT=vY79N# z-I_T+tgfX$=_uklqI&Q=kzY(QQCV9xF7rJPtM)u>aTy(HTd8uxcY4O;az+|y5TBDA z#HBQ?g$w8kwHTn2*mR5Cg#94aAdZdfdG{c}-$6LI14-P=>p>ppKgzK5G%|RGfO`>l z;#KUyw=jb5V=rBCAAX3t8NBb2*@Wf-94U1 z5M@710o%YGas^i!M1Z`^<648L#6h`0yH=1K^=p@@B41mzTV-o;hj znRnCelv6B3S?w=)9$RH#nt>k~Qet43KBE7(5#ff^fGzrsD`u3aV#0M59)YVw2dtp^ zYgIS+aIaTFS9?BJa&6A(bnG*o5iW zO#9u)@U=tha<#iePM183Pyt5e)D>Dfm6ca$iB;}gAs?oG%SfeO4#-DPJ|n1#2$x}L z^cdbxh8JmY4tFgoJt6I5a)Sq|0+*x{`&_cT;izm<5nm<6r%=VmZk+&T%9c^ty0u}k z`YhIRirKFPCIP}y#a5-5{aPI*q`1ceSv}_~@RX5qrv^{C28Ajv+))IDhC&eX zb9B=D3~K@TSiX>%N6@N&RbH-sQG&{TqLY-Wc|fa`$|3$Ok%yQvlt`w0oFg99*T?kr zaee))zCNL^pO+^&?-_ZP!CZ}gUSE&u>r49EsJtwr`gvSlC0(*8C*@&OQ5#tS?Y?k!hR$B?1-o4O`== zMva2Fidv`wO^%z__7r=2Ov83MD&cjORVzH8d~w1Qaz zXWNFa_2qW2rNnmLFf_ejYFSFBbsPKrjMGFAjOjIPOojEGzA}KJZPwzD{j-A#0 zZKmJDH_z8?-y_HRv0Fv#E;-JZ3SJ;^X4I0cHCTkj3hGoW!BTYaY;j$JKaXIoDh^Cr~SOV7M8_a$JF#p=3qhw6u-7*VC>S(s3-uSqjcp zaSrMQ&Ir_0PC+JF$M$v8_O37nP7^l7L%Lz7WYef(1)7Kns{b@SoT4jJO=(KODuIPj zR*)D81edBhSH)_aCs6Gf;iSOQ`nCy|r5m;?c%DE*6jfm2Ve_^WO)F=(H8>y7S8#!f z3y~sf$`Cdzj6mgv&8@8+0<+7ZI{ZDIfWSo(B^L`c)<@Gs;$aQu$FT;Nsc1$ET`cPw zx=-+~sBhR6dD7qvExJb>mSCEem|3TyRRSg++J3WR845NCERlN1^=>gP< zZPPamPm^Tw{F_uuRwcohq)BE~wDZ(!mmp7n|jg zy990>=g85DD8oa^DY2D& zg^oP}Q|U<~VhGevYSX}}auew>W0~3Bk{9J8KISb;flWYH&8O1m^qaJsR}$D%CMT|vb)U?7#c8(B56?ndaSJ81x4 zMG^fBWqK~xy5Dzo>Eh!6OpQXAR3T2#8qyPIwh8e4|1SKN9te@J1DH!VRYifnwgIxy~=oh#5=wJbHAQqZcemrv=hq z&g$gK;D5mGMip@Ao!o8+tXzMwI)TQZkHQvrcN}pTF z!L|)6j+^lg1@BaGi!1@OGI=J$F%&5bb8);2?^f_074MZ9vn=a|X_0lrG}pMMXu3v+ zV|NrSOTqg_RbnBZS{%d&6ns#{hj2Tql5zAbkf1e!iY7ct%fKeutg~FprT80dtKl?J zQia9?Ge7x8SSE!`SyA07aAA}TlUkpktKKC6d$+&^5u!zS<=ClO+<}j(xCb9&;o=!~ zuH+2@+savHdUUso3N{E}LMuvUsei-sJqJ6nsX-XJutM zcRXr3tZDCc;`khnEBL&MFW>}mSO)2qpn@mnh@4K_GHoNQ!wJo~qr_m1X0a(?`lBko zh%YJlvWlP;4^)Lz9%cv*`qjZD$SG6gZP?)udDb5zDe+o@Hs`o;-g3R zI#{CzJ;+YE;#(@djqmVeb}&7<=r5Ixd(a(u8nGBQLkb=fNS1RB+NUo_8w zt%Ns07=1<+-q}@okE|n)$~jvtl735KS-Yh z*y8dnLS(c`WpC8&oMpIDuU$^j%^EVvGO-QgeUa@jie2;}tq1|9ZoAahui79bW zA!3TCWIhm#s>_2A5ZpnScE8hWXkos}1TFY_hG)lRb9zg8j4u&}OhaM3y`Ddz~mH6k9LcoB)GF)C_(UcOFnn;8OA1b1ao zSl!qt8XHq}{5OkUNht(Nn@y}~+@Q8HXvC^h9ZXdi@D#xk=d3YWk5Z;0<_j#En3NlY zn#U6Si0z`lPk5UmpS)t?_&EP*dZd7Elbllr*bO>p$uWFK>IPw+;JFZcF1SbQOpJoV_qtD2n(AAvFuhPlBM^C<5)Qe z?HJbVIE1xFk(QK~4C2yMNOj19tDc?d7&84eu9OTh}@+NJ{1HhYoe zIG37FB7u1{?tI<>EkKF|Oa~TYJL-_*YynGg9j}OPaOhKN2Bvu@is7pNW!$*o?p6uata=$lz~$i_uoI@pn8)5I&0Q@ellyoS&fL|Al`; z!BgCI8Db}qQgEAsnfyJC9SZ()5_c;&sNiM=4?abbr%5Pb`d>aPaFXK`JR?!dBP#SY yA;PgHc&`n{slhls7|#gCnLIkEs2J}by2b3vl2mUtcs_z@Vh(D=Trp29K=N7XQEeaq literal 0 HcmV?d00001 diff --git a/target/classes/xyz/soukup/discordauthorizator/events/DiscordSendMessage.class b/target/classes/xyz/soukup/discordauthorizator/events/DiscordSendMessage.class new file mode 100644 index 0000000000000000000000000000000000000000..ffec1b95d75716437b6878b0ff471c543e2f1d0f GIT binary patch literal 4322 zcmbtY`*$3575{vjWM`8Mv@CtFg|;aTkhGMsV4x(WkZe;D*gVXur4{RB_uFKe&CD`0 z8=9ix6Y%|3s-jk@_(GxTHfa^BC@T0sd_Ruo_=7)sj{F1G&v$0B*`%AM2Xk`1Gjr$O zJNJ9<{oH%M`{IAkJO|(o{JjnJrr{r+5G%(4Y;ZAu?8r%WSf+G9p4XL?>+bJ}sojM2ixgykFg zfX@hc?jd6+*QV56u45%uh3Zm{eb^ckxTR@h)i7xT&ZET zjx|^-a9btU$SG<2o-rvs&m5CRPk0@W8EH+)Y^QoFP{)0x#!cInIe`={si?{JE#H!! zkqJ4Cg3TCsb1EbGVMT1K$5lvbSg+%1TqAJj|EW))h8A{b1y<9zdAASxu4Rw4#j#O9 zr&<2?$hJB(V6%p6b!BAS;sASy};&+ zx?D-nsg~E_F#Lqa0S&iur%Grtd#Hs;Y>!D9fJ^z+7?MZ*lrx!kY$l8{bf=En(Hf>s zlvDyu%UK$6(%4bM(S0vjrAk-1C7Ifp)}-_t&D@1g$Tf&O%-z@`8Ri#<|eZ%eR7-J|1Pqy^SZ zniC438Pnfq`QyCve3RHy*j`3Wg>2H$E3l=Ku|Yh#oGIxB=&eOR-k@PX#~_9TwqAlr zV|zxG6=vCBSKq!vL!J96cwgrWu6NDtiv$c)iSCh16Gn)#+9Zo z1-3OcA6$Cx9j3>iMv2dg+k?X@-B_{rSB~lu9=qgEG>@p9wsai9gurE<^yg!(5Vo|b z^L%a1BdQ!s>aZ2OG~%Y$oRkT+(!6qAqe8H&!voQ;np%&X990$JhUEdQ80m*8JgDKQ zj%gedxFV=^1>edUVKrmYU+%KnS+4AL?A}6-ePuxzohy1}#XKTucuSP{i@Q8wA2y)S z+Il>Mx9NBoZx@IMl_3CdVy;7&5Bf#`YG&&@X-{BdiKzPUyLG$=j|e2#69^}N$SI|n zz>cU!mn7KUD`Bf7LZ`IgF&*#4`)Cm37FCpMD~D`eE{u4U691r%58=ZUH?!H!qrPjZ z^sM;VjH=2DlT+#WC_bj)<2pWpPckfJIO_hT}RugU=GS^HH8>qOBH(Ej2v}tX-g~JEF7NKY`C{_=1ivs@9a4*E7e$ z933~kUN#xU`z0M;#*+foHVKP+eko19Ld(lG7-Yw^5$>uUC-GGsU&Gf4bT4m>sW!KT z)-5H_I2bT7hTp`~8os6D+bRy5mf>f=@T8rMI+TWI1$HhoVnzd5G-(dbOLM;|C(DAg zGR^4p78KBi%+VYviL{e3b0el}spp7T?T=fGUTgZbey~kth#lEJHxUZ#3KQ-E^esO~ zvg`! zW!l-C^cvGVDHZZcvI6_TGX4s+JW`P|bGbp52Ttg}VSvQJJ@+@n z@mr2+qAx4G-18@Fr{P#bHav9|;`kkhQPJAKS)iMT5jQwiNhW!0ZeodrIMwiH&czov zrP5wC{8eD%#aa1*&@tGIXV@gw-wMtdJaKY8#V3PT!E4Rd(-6-FufM}py#`j{yIl2< z0pCNBPXebg!r*T)WBAi0%47#D7TdR}RXVF7a-&qXvvhNJ;S8v{2gn1gWi1A1T zRkHt{ffLHrBx|Vmff*Fe;h|Z)RnSo0zGDXOD&kQka~kh&jU{8r>LNbCOHFXu&UFSK znZ>7AbhM;4i_Zxh$3}H`Lf{-uw#Jk3Sv)0>j1}>Xr_TRFIjRcEQM-BK1&0nDSMq?f zn$K&{hqcIK9UkRj@ku1{G}hCRSK}EQd?_!jDH42HkJ4emTF8m8W#`BEvPxyWZR-DI6h--L8 zLqbD?hL*DbCxG*4RKGz)uPIW6pK@J+7w|J)SM&MjRQu~-eK}ZP!SDHIJ>T?mX8gll TNj8>~_#^Y+PxuS|hUEVML>Ca( literal 0 HcmV?d00001 diff --git a/target/classes/xyz/soukup/discordauthorizator/events/playerDie.class b/target/classes/xyz/soukup/discordauthorizator/events/playerDie.class new file mode 100644 index 0000000000000000000000000000000000000000..b3d459a34f964214d1b8b193d93e73ca5f93dac2 GIT binary patch literal 2934 zcmbVO+ji4N6x|aWWE_zYb4|I^Kof{jxs(D1TE_{O;24^uNrAR>Vh#2rie#iw!1O|| zztGj+XdeQht6eeCF5;&=x{%S3)v*B^ z8Me&xC2m;UZWuS_=0#mGY`h?CsV*^O28U+y$YGO)ypC?@3@0D99~qwGFZeCPlwRF& zP426vgvr0O)F>i8%x1>RnB@I0c2hwK8 z7UzUH;!DdEZXTPF*@Qk6G;Gze4ci%d!W8%eWmFu?aTzv^mM5>@y)s$8Mfp`bXG=kZ zojP`*pCRW76|Xrx_@ZMv)Fc>+wHtdh?A5Uk`xyouw_(ir3ky;iVoBIE+DfXnans^$ z;f@Nfnqz^Tp_eEL-zS9U@rGd7M%=8O#guZT-3T{0sN)dcrmSemSQw9C4>>0{OKwx@ z#$g=M@Q#kb0M)KnITCXL3hA{7UX3q`0#(RS9mg=tuyc_wh>By^xtf)#N&h^>ZRIf> ziJ1y(CdQcxeKU^hFz_xxC!V8{V7Q&K{N==7wyf(oayY5u6i!EM-L(9Mv>DDMx2#y) z^GY4`wL(85WPhBlL$r>_&*6-Y_i;7~M;zRf4Te*le^VT2I6XQbd0qWsGR3=orNqLtmJPucQ@UX*#qX zSKRldD{78i^DXOzQ;cptk+N2Ru}Q;~4vmO5?8Y^WYq+kXiV3Qfv|Afq_yQH!w0Nj0 zQO+anYbL{uMWMjS_Z%H^#IL7x_;*Sir9^JwFdhA)Hm^cBOvno>!7$ypFaBqWuv zV_l{)cHB0@FG;D19iyNT7;m8JIP@)3N+@5fNC`{F!s&KPq`2Qn_@~He9HPQ4Yf36X z{ooshy-lTB-g(1VtQVVto8Ix@P7w!+y9T3vag7><8#XNAY50!e@Jnf@WuxH-hJCMh zrSp$c$3fhsPeKMx-9LEJXCaMsdNb(B=(*wO6R=;yX_Lla8t8$bQI8yO4-I-_XhKqu zVDaC`QYb(?g*Nd!Hs5-J-dgcDY+1&R+2XNfyv1lZuz~@GXBYyOQJgL0p5nxF;4w&@S7l1w;0gFKsM9gD>z-NgA3yYM1j$5$dAVceh(ZYS2b7^Iex<}6p6pdZ* Zu|&@tSs&2vYdog6JpKC?-{VL0{|k`~Y!Lte literal 0 HcmV?d00001 diff --git a/target/classes/xyz/soukup/discordauthorizator/events/playerJoin$1.class b/target/classes/xyz/soukup/discordauthorizator/events/playerJoin$1.class new file mode 100644 index 0000000000000000000000000000000000000000..b2a4b7f47cf0f63ec3ab75e8dc9fe2feaa274b54 GIT binary patch literal 860 zcmb7C+iuf95IviiICTv%1)Fx{cY5yt@_cU-5uI zJn#X06k^tn2yZBsy!ITOIWx0!e*OOO6Tk~RTtE%=5J8M{XfSMkK0Ql~c4Ie5Giipp z$hfmdx{znw>LL{BciI&kB$w3Roe)<{46b;yplOxNE`b59uiMjOhE-zp`F?VKAU4DON%o1i^_C5bm8 zd9z0EA}$kph5oiE_DHn$=quRTH-ukG&N7`1;s7zO(z#r*a1GZfB7UjHh;f4$mDVQV vJ|p;!^D~vG%xs~Kq*U^3;!KqS+@z?6Tew}KE7bFY5?Mi;z7er~fAstTCGgzv literal 0 HcmV?d00001 diff --git a/target/classes/xyz/soukup/discordauthorizator/events/playerJoin.class b/target/classes/xyz/soukup/discordauthorizator/events/playerJoin.class new file mode 100644 index 0000000000000000000000000000000000000000..4bcbf5f6e74c76655f59385c6b708f8d1123053b GIT binary patch literal 1263 zcmb7EYflqF6g>kiE8Erb#`*vss4XH3D5$BLAZUbCL?I=9oVJrPbeSc)vqbn;eiAhC z2l%6mcXkVGW0bHT=FZOCd*+^V@64~?-+uyliRU)D&}|{(Ad4P`z8${LU5~4#`=PcY z>YAbFg;Y|%V(2cGsx~g6*MjXJ2Zy2G51MW*YPFKX8|mwZ+t$jX{h!7{%3uz`7STrD9kpR?ZYz@^~1QI~eW7es1iuO4229 zl*YC5(-8YY>CoNt_<;ykeW@m9Z4_|Bl;S4Ce6ey4kG}xQrD~SSYQC`?ZsU%HyACFB zk6|KJhJVV(FnY4LaiHqU!lc&NF-^B3LoJkPhRl-R5DfW>RAMdKt%+dMoX9Xx@$1~H@<5vZ_F_hF%aGE)xR?xf zQk##FqhM|I~j6oBGm7N(Tm`m6-8pk9W6p?mHYG# z&^@EhF_zu}8Yk(`CCkWWC%=Jxjkh1tXtse~Ows5h4tRuV`ePI_Lm(!2i-5Ywjvv7~ z#$~F|;1Py@pzxW{t`A}C7`L+6I)gQ@kpUdTKny*Sgtwsy2(y@@BOa5NN#P0EZp_oz Ug#|n%o1xVLp3%&XXEXu+0P!DP3;+NC literal 0 HcmV?d00001 diff --git a/target/classes/xyz/soukup/discordauthorizator/events/playerLeave$1.class b/target/classes/xyz/soukup/discordauthorizator/events/playerLeave$1.class new file mode 100644 index 0000000000000000000000000000000000000000..72e2990e3499f7cfe3bc3910e6f78594f5d50f34 GIT binary patch literal 866 zcmbVK%Wl&^6g|_JICTv*1~>d1fNozhZ$v zEcgIE3USAd)JiO>V##CA)j8+B&hI}ze*t)b`}3GX!-p5*9GVPIz8oIKy0BwAi8HCw zqRhB8`$Z{_xGBn5OocK!p5**cl!@R|(djWX&A!x~$3#!g%H6;IBDrq(u8r`))fD2gk5rw$u;2WnTd{sB`@E>TrfQA{zp4&0|sxa$cVp~NF{dc=b=w36#cSybk5268k?V|V*;Z*@XsJf;1no2PvBJn0HC(3~;VU&p zh#LrJS{oF14DScdAFBivvyBE;DkX;|%uLB6eOJ>h+^(W+s`*|OX`@5mfY7c!dj0}k CFyCYV literal 0 HcmV?d00001 diff --git a/target/classes/xyz/soukup/discordauthorizator/events/playerLeave.class b/target/classes/xyz/soukup/discordauthorizator/events/playerLeave.class new file mode 100644 index 0000000000000000000000000000000000000000..28346ff66096af84e4db62f8387e26b485f58ca5 GIT binary patch literal 3439 zcmbVO=~vWN6#qRK%s50;T&WwisGwr%Qmc+#V899;a2X0!yM@Vf=0Qltb3oG#_4)`|i8%-rrsS`se!Z03N|l8PuU(LrO;j z7BMUvGbc^MHl31jY;=qlCBve_!V&UOhWhr7;SADPtRbVL5jw-33sV;j-wnotieU-A z=z5kJ$g=B+i>7ovqbH(uC1@nD#ASa^7sI;tj=aOAVND*8!gY)>%QVc2FlaNYp^2fj z)^6{_D7U%;VO!kGUy~NtkAI%s~DO>6U_6{$ho%bk=`eJd&shUH9f1&uFgkW=xIY$NW+W(^PMXu}qUwfABq`$;6>u5KJOCpg1Ok~{0x zg7kz_$~Kexx9Mm{2g8~PbDZZ~r)bI%Aus?Za&Nh8NTLo>!R(wVXNWG=F~d#cZ3IF@wB?I@}x zgK|Ph!F?mf%phcn9+%um2qh2)7!LmL^D0n}={SxP3=N~IkT7)KqZHj%Xn^~^S>j>V zlL7^XjyV-b@;4%nr*sTsgnZ?5$4YLJuP(ROEQ7W0KC=Mc+9{+WgZt7qJX+0S7{#$h zIggu?cZD=6Ij3-1!xoO_d; zD)*}D#4Chk(#rzZa8^eN1|GO>=>o{e>AnQ zqWf`4&vSE+o{fz-2Ty~qLn2^kOMrAw%_%2u?G>h+ zVh>l1#u_sHaca`-$+i;LzPRKi3c$(0am-PhXZt()G@NJHyOUr?WLZ#p?9DG&kt{#lgK-n-Y3x0e+S!t7es~%Oui?>~=$XNhI)tD3&S?zR z|Avz@7^=q%o@PXUb_PW%3hMj~h*PBd_)0i4s5D??)`-nCuYrdC6jqTDtLbYE_R~P0 zLkk?5$Uh=nl!5yqBVq%|9K4P<$j}tt$D4SIjMa(qHr_!!o$bfFcrV;~Szi6HU-tJ>TMc{D_u+0ifj#KL7v# literal 0 HcmV?d00001 diff --git a/target/classes/xyz/soukup/discordauthorizator/events/playerLogin.class b/target/classes/xyz/soukup/discordauthorizator/events/playerLogin.class new file mode 100644 index 0000000000000000000000000000000000000000..d3b2cbce2227dec92545a905611687b42eae37aa GIT binary patch literal 9610 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 literal 0 HcmV?d00001