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

83 lines
2.5 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.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.core.CoreUtils;
import xyz.etztech.core.web.CoreWeb;
import xyz.etztech.qol.QoL;
import xyz.etztech.qol.other.LinkCommand;
import java.util.HashMap;
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 (sender.hasPermission("qol.audit") && plugin.getConfig().getBoolean("audit.enabled")) {
boolean auditable = false;
for (String audit : QoL.getAudits()) {
if (noSlash(command).startsWith(noSlash(audit))) {
auditable = true;
break;
}
}
if (auditable) {
Map<String, String> post = new HashMap<>();
post.put("username", "QoL Auditor");
post.put("content", "[" + StringUtils.capitalize(sender.getGameMode().name().toLowerCase()) + "] " + sender.getName() + " executed command: " + command);
String webhook = plugin.getConfig().getString("audit.webhook");
if (StringUtils.isNotEmpty(webhook)) {
CoreWeb.asyncPost(plugin, 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;
}
}
}
public String noSlash(String command) {
return command.startsWith("/") ? command.substring(1) : command;
}
}