Webhook implementation

master
jakub 1 year ago
parent f8916e818e
commit af1ec4a2c8
  1. 22
      .idea/artifacts/DiscordAuthorizator_jar.xml
  2. 3
      .idea/inspectionProfiles/Project_Default.xml
  3. 5
      pom.xml
  4. 75
      src/main/java/xyz/soukup/discordauthorizator/DiscordAuthorizator.java
  5. 38
      src/main/java/xyz/soukup/discordauthorizator/WebHooks.java
  6. 19
      src/main/java/xyz/soukup/discordauthorizator/commands/authorize.java
  7. 21
      src/main/java/xyz/soukup/discordauthorizator/commands/link.java
  8. 6
      src/main/java/xyz/soukup/discordauthorizator/events/ChatEvent.java
  9. 24
      src/main/java/xyz/soukup/discordauthorizator/events/DiscordSendMessage.java
  10. 48
      src/main/java/xyz/soukup/discordauthorizator/events/initializeCrossChat.java
  11. 15
      src/main/java/xyz/soukup/discordauthorizator/events/playerDie.java
  12. 37
      src/main/java/xyz/soukup/discordauthorizator/events/playerJoin.java
  13. 16
      src/main/java/xyz/soukup/discordauthorizator/events/playerLeave.java
  14. 35
      src/main/java/xyz/soukup/discordauthorizator/events/playerLogin.java
  15. 13
      src/main/resources/config.yml
  16. 4
      target/classes/config.yml
  17. BIN
      target/classes/xyz/soukup/discordauthorizator/DiscordAuthorizator.class
  18. BIN
      target/classes/xyz/soukup/discordauthorizator/commands/authorize.class
  19. BIN
      target/classes/xyz/soukup/discordauthorizator/commands/link.class
  20. BIN
      target/classes/xyz/soukup/discordauthorizator/events/ChatEvent.class
  21. BIN
      target/classes/xyz/soukup/discordauthorizator/events/DiscordSendMessage.class
  22. BIN
      target/classes/xyz/soukup/discordauthorizator/events/playerDie.class
  23. BIN
      target/classes/xyz/soukup/discordauthorizator/events/playerJoin$1.class
  24. BIN
      target/classes/xyz/soukup/discordauthorizator/events/playerJoin.class
  25. BIN
      target/classes/xyz/soukup/discordauthorizator/events/playerLeave$1.class
  26. BIN
      target/classes/xyz/soukup/discordauthorizator/events/playerLeave.class
  27. BIN
      target/classes/xyz/soukup/discordauthorizator/events/playerLogin.class

@ -1,24 +1,26 @@
<component name="ArtifactManager">
<artifact type="jar" build-on-make="true" name="DiscordAuthorizator:jar">
<output-path>$USER_HOME$/mineconomia/dev-server/plugins</output-path>
<output-path>$USER_HOME$/Plocha/dev-server/plugins</output-path>
<root id="archive" name="DiscordAuthorizator.jar">
<element id="module-output" name="DiscordAuthorizator" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/squareup/okio/okio-jvm/3.6.0/okio-jvm-3.6.0.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.8.21/kotlin-stdlib-jdk8-1.8.21.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/net/sf/trove4j/core/3.1.0/core-3.1.0.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib/1.8.21/kotlin-stdlib-1.8.21.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/net/dv8tion/JDA/5.0.0-beta.23/JDA-5.0.0-beta.23.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/jetbrains/annotations/13.0/annotations-13.0.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.8.21/kotlin-stdlib-jdk7-1.8.21.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/neovisionaries/nv-websocket-client/2.14/nv-websocket-client-2.14.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/squareup/okio/okio-jvm/3.6.0/okio-jvm-3.6.0.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.16.0/jackson-databind-2.16.0.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.16.0/jackson-annotations-2.16.0.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/neovisionaries/nv-websocket-client/2.14/nv-websocket-client-2.14.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/json/json/20230618/json-20230618.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib/1.8.21/kotlin-stdlib-1.8.21.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/jetbrains/annotations/13.0/annotations-13.0.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/squareup/okhttp3/okhttp/4.12.0/okhttp-4.12.0.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/net/dv8tion/JDA/5.0.0-beta.23/JDA-5.0.0-beta.23.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.16.0/jackson-core-2.16.0.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/squareup/okio/okio/3.6.0/okio-3.6.0.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/commons/commons-collections4/4.4/commons-collections4-4.4.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.16.0/jackson-core-2.16.0.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-common/1.9.10/kotlin-stdlib-common-1.9.10.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/squareup/okhttp3/okhttp/4.12.0/okhttp-4.12.0.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/net/sf/trove4j/core/3.1.0/core-3.1.0.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/club/minnced/discord-webhooks/0.8.4/discord-webhooks-0.8.4.jar" path-in-jar="/" />
</root>
</artifact>
</component>

@ -1,6 +1,9 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="AutoCloseableResource" enabled="true" level="WARNING" enabled_by_default="true">
<option name="METHOD_MATCHER_CONFIG" value="java.util.Formatter,format,java.io.Writer,append,com.google.common.base.Preconditions,checkNotNull,org.hibernate.Session,close,java.io.PrintWriter,printf,java.io.PrintStream,printf,club.minnced.discord.webhook.WebhookClient,withUrl" />
</inspection_tool>
<inspection_tool class="StringTemplateMigration" enabled="false" level="WARNING" enabled_by_default="false" />
<inspection_tool class="UNCHECKED_WARNING" enabled="false" level="WARNING" enabled_by_default="false" />
</profile>

@ -79,5 +79,10 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>club.minnced</groupId>
<artifactId>discord-webhooks</artifactId>
<version>0.8.4</version>
</dependency>
</dependencies>
</project>

@ -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<String, ChatColor> playerColor = new HashMap<>();
public static HashMap<String, Role> playerRole = new HashMap<>();
public static HashMap<String, String> 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<Message, HashMap<String, Object>> entry : voting.activeVotings.entrySet()) {
HashMap<String, Object> 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());
});
}
}

@ -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);
}
}
}

@ -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<String> pp = playerLogin.ipToAdd.get(event.getUser().getId());
FileConfiguration config = DiscordAuthorizator.getPlugin(DiscordAuthorizator.class).getConfig();
List<String> 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();
}
}
}

@ -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());
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.")

@ -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);

@ -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() + ": ");
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());
}
}
}
}

@ -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<String> 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);
});
}
}
}

@ -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());
}
}

@ -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());
}
);

@ -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(){

@ -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<String, List<String>> 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));
}
}

@ -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"

@ -2,4 +2,6 @@ token: MTI1MTg1MjY2NDI2Mjg4NTQzNw.GB6jIc.QRulRHK5J-I88jvzCUkoKcx8r4vW2DrBOxHlR4
authorized-role: 1236261645723111465
guild: 1161967821815808030
chat-channel: 1247447721175027744
channels:
1261983819809161216: "Území Testů"
1247447721175027744: "KNKS Discord"
Loading…
Cancel
Save