package xyz.etztech.qol.listeners; import net.md_5.bungee.api.chat.ClickEvent; import net.md_5.bungee.api.chat.TextComponent; import org.apache.commons.lang.StringUtils; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerCommandPreprocessEvent; import xyz.etztech.qol.QoL; import xyz.etztech.qol.other.LinkCommand; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class CommandPreprocessListener implements Listener { QoL plugin; public CommandPreprocessListener(QoL plugin) { this.plugin = plugin; } @EventHandler public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) { String command = event.getMessage(); String base = command.split(" ")[0].substring(1).toLowerCase(); // Strip the slash Player sender = event.getPlayer(); // Command Auditing if (plugin.getConfig().getBoolean("audit.enabled") && QoL.getAudits().contains(base)) { Map post = new HashMap<>(); post.put("username", "QoL Auditor"); post.put("content", sender.getName() + " executed command: " + command); String webhook = plugin.getConfig().getString("audit.webhook"); if (StringUtils.isNotEmpty(webhook)) { POST(webhook, post); } } // Links for (LinkCommand linkCommand : QoL.getLinks()) { if (base.equalsIgnoreCase(linkCommand.getCommand())) { event.setCancelled(true); TextComponent link = new TextComponent(ChatColor.GREEN + linkCommand.getMessage()); link.setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, linkCommand.getUrl())); sender.spigot().sendMessage(link); return; } } } private static String POST(String url, Map data) { StringBuffer result = new StringBuffer(); try { HttpClient client = HttpClients.createDefault(); HttpPost post = new HttpPost(url); List params = new ArrayList<>(); for (String key : data.keySet()) { params.add(new BasicNameValuePair(key, data.get(key))); } post.setEntity(new UrlEncodedFormEntity(params, "UTF-8")); client.execute(post); } catch (Exception ex) { log("POST request failed. (" + url + ")"); } return result.toString(); } private static void log(String message) { try { Bukkit.getConsoleSender().sendMessage(message); } catch (Exception ex) { System.out.println(message); } } }