forked from Minecraft/Hush
100 lines
3.4 KiB
Java
100 lines
3.4 KiB
Java
|
package com.zerohighdef.hush.listeners;
|
||
|
|
||
|
import com.zerohighdef.hush.Hush;
|
||
|
import com.zerohighdef.hush.WatchList;
|
||
|
import org.apache.commons.lang.ObjectUtils;
|
||
|
import org.bukkit.BanList;
|
||
|
import org.bukkit.Bukkit;
|
||
|
import org.bukkit.entity.Player;
|
||
|
import org.bukkit.event.EventHandler;
|
||
|
import org.bukkit.event.EventPriority;
|
||
|
import org.bukkit.event.Listener;
|
||
|
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
||
|
import xyz.etztech.Javacord;
|
||
|
import xyz.etztech.Webhook;
|
||
|
import xyz.etztech.embed.Author;
|
||
|
import xyz.etztech.embed.Embed;
|
||
|
|
||
|
import java.time.OffsetDateTime;
|
||
|
import java.util.List;
|
||
|
import java.util.regex.Pattern;
|
||
|
|
||
|
interface Action {
|
||
|
void action();
|
||
|
}
|
||
|
|
||
|
public class HushAsyncChatListener implements Listener {
|
||
|
private final Hush plugin;
|
||
|
|
||
|
public HushAsyncChatListener(Hush plugin) {
|
||
|
this.plugin = plugin;
|
||
|
plugin.getServer().getPluginManager().registerEvents(this, plugin);
|
||
|
}
|
||
|
|
||
|
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = false)
|
||
|
public boolean onChat(AsyncPlayerChatEvent event) {
|
||
|
String chatMessage = event.getMessage();
|
||
|
Player sender = event.getPlayer();
|
||
|
for (WatchList list : plugin.getWatchLists()) {
|
||
|
if (sender.hasPermission(list.getPermission())) {
|
||
|
boolean phraseFound = checkPhraseList(list.getBanPatterns(), sender, chatMessage, (() -> {
|
||
|
banPlayer(sender, list.getBanMessage());
|
||
|
}));
|
||
|
|
||
|
if (phraseFound) {
|
||
|
event.setCancelled(true);
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
checkPhraseList(list.getMonitorPatterns(), sender, chatMessage, null);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
private void banPlayer(Player player, String banMessage) {
|
||
|
Bukkit.getBanList(BanList.Type.NAME)
|
||
|
.addBan(player.getName(), banMessage, null, null);
|
||
|
Bukkit.getScheduler().runTask(plugin, new Runnable() {
|
||
|
@Override
|
||
|
public void run() {
|
||
|
player.kickPlayer("You have been banned: " + banMessage);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
private boolean checkPhraseList(List<Pattern> patternList, Player player, String chatMessage, Action action) {
|
||
|
for (Pattern pattern: patternList) {
|
||
|
if (pattern.matcher(chatMessage).find()) {
|
||
|
if (action != null) {
|
||
|
action.action();
|
||
|
}
|
||
|
|
||
|
String playerName = player.getName();
|
||
|
String webhook = plugin.getConfig().getString("webhook");
|
||
|
|
||
|
if (webhook != null) {
|
||
|
String message = playerName + " said: " + "`" + Javacord.escapeFormat(chatMessage) + "`";
|
||
|
Embed embed = new Embed()
|
||
|
.color(0xC70039)
|
||
|
.description(message)
|
||
|
.author(new Author(playerName, "", String.format("https://minotar.net/helm/%s/100.png", playerName), ""))
|
||
|
.timestamp(OffsetDateTime.now());
|
||
|
|
||
|
this.plugin.getServer().getScheduler().runTaskAsynchronously(this.plugin, () -> {
|
||
|
try {
|
||
|
Javacord.sendWebhook(webhook, new Webhook("@here", embed));
|
||
|
} catch (Exception e) {
|
||
|
this.plugin.log("Webhook failed to send");
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
}
|