QoL/src/main/java/xyz/etztech/qol/listeners/CommandPreprocessListener.java

101 lines
3.1 KiB
Java

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<String, String> 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<String, String> data) {
StringBuffer result = new StringBuffer();
try {
HttpClient client = HttpClients.createDefault();
HttpPost post = new HttpPost(url);
List<NameValuePair> 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);
}
}
}