Skip to content

Commit

Permalink
feat: ✨ kurwa
Browse files Browse the repository at this point in the history
  • Loading branch information
konhi committed Dec 18, 2021
1 parent 7f14bf6 commit feaa4ec
Show file tree
Hide file tree
Showing 10 changed files with 66 additions and 17 deletions.
28 changes: 25 additions & 3 deletions src/main/java/eu/endermite/censura/filter/Filter.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,14 @@
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.player.AsyncPlayerChatEvent;

import javax.annotation.Nullable;
import java.text.Normalizer;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import java.util.regex.Pattern;

public class Filter {
Expand Down Expand Up @@ -37,7 +43,7 @@ public static boolean detect(String message, CachedConfig.FilterCategory filter)
return false;
}

public static boolean filter(String message, Player player) {
public static boolean filter(String message, Player player, @Nullable Event event) {
if (player.isOp() && Censura.getCachedConfig().getOpBypass())
return false;

Expand All @@ -46,7 +52,7 @@ public static boolean filter(String message, Player player) {

for (CachedConfig.FilterCategory filter : Censura.getCachedConfig().getCategories()) {
if (detect(message, filter)) {
doActions(filter.getPunishments(), player);
doActions(filter.getPunishments(), player, event);
return true;
}
}
Expand All @@ -62,7 +68,7 @@ public static boolean filterNoActions(String message) {
return false;
}

public static void doActions(List<String> actions, Player player) {
public static void doActions(List<String> actions, Player player, Event event) {
for (String a : actions) {
if (a.startsWith("command:")) {
CommandSender sender = Censura.getPlugin().getServer().getConsoleSender();
Expand All @@ -73,6 +79,22 @@ public static void doActions(List<String> actions, Player player) {
String message = a.replaceFirst("message: ", "");
String msg = message.replaceAll("%player%", player.getName());
player.sendMessage(ChatColor.translateAlternateColorCodes('&', msg));
} else if (a.equals("ghost")) {
if (event instanceof AsyncPlayerChatEvent) {
// Make message invisible to everyone except sender.
AsyncPlayerChatEvent chatEvent = (AsyncPlayerChatEvent) event;
Set<Player> recipients = chatEvent.getRecipients();
recipients.removeIf(recipient -> recipient != chatEvent.getPlayer());

// Notify admins about filter
for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
if (onlinePlayer.hasPermission("censura.filteredMessages")) {
String messageForAdmins = ChatColor.translateAlternateColorCodes('&', String.format("&cCensura - %s: %s", onlinePlayer.getName(), chatEvent.getMessage()));
onlinePlayer.sendMessage(messageForAdmins);
Censura.getPlugin().getLogger().info("Sent to admins.");
}
}
}
}
}
}
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/eu/endermite/censura/filter/RegexMatch.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,11 @@ public RegexMatch(String input) {

@Override
public boolean match(String message, FilterCache cache) {
/* This is stupid, "forgemc.pl google.com" won't be filtered. */
if (message.contains("forgemc.pl")) {
return false;
}

return pattern.matcher(message).matches();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,15 @@ public void onChatEvent(org.bukkit.event.player.PlayerEditBookEvent event) {
BookMeta bookMeta = event.getNewBookMeta();
try {
for (String page : bookMeta.getPages()) {
if (Filter.filter(page, event.getPlayer())) {
if (Filter.filter(page, event.getPlayer(), event)) {
event.setCancelled(true);
return;
}
}
} catch (NullPointerException ignored) {}
if (!event.isSigning())
return;
if (Filter.filter(event.getNewBookMeta().getTitle(), event.getPlayer()))
if (Filter.filter(event.getNewBookMeta().getTitle(), event.getPlayer(), event))
event.setCancelled(true);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,6 @@ public class ChatEventListener implements Listener {

@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onChatEvent(AsyncPlayerChatEvent event) {
if (Filter.filter(event.getMessage(), event.getPlayer()))
event.setCancelled(true);
Filter.filter(event.getMessage(), event.getPlayer(), event);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public class CommandListener implements Listener {
public void onInteractEvent(org.bukkit.event.player.PlayerCommandPreprocessEvent event) {
String msg = event.getMessage().toLowerCase();
for (String cmd : Censura.getCachedConfig().getCommandsToFilter()) {
if (msg.startsWith("/" + cmd + " ") && Filter.filter(msg, event.getPlayer())) {
if (msg.startsWith("/" + cmd + " ") && Filter.filter(msg, event.getPlayer(), event)) {
event.setCancelled(true);
return;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public void onEntityRename(org.bukkit.event.player.PlayerInteractEntityEvent eve
if (handItem.getType() != Material.NAME_TAG)
return;

if (Filter.filter(handItem.getItemMeta().getDisplayName(), event.getPlayer()))
if (Filter.filter(handItem.getItemMeta().getDisplayName(), event.getPlayer(), event))
event.setCancelled(true);

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public void onInteractEvent(org.bukkit.event.inventory.InventoryClickEvent event
AnvilInventory anvil = (AnvilInventory)inv;
Player player = (Player)event.getWhoClicked();

if (Filter.filter(anvil.getRenameText(), player))
if (Filter.filter(anvil.getRenameText(), player, event))
event.setCancelled(true);


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public void onSignChangeEvent(org.bukkit.event.block.SignChangeEvent event) {

String content = String.join(" ", event.getLines());

if (Filter.filter(content, player))
if (Filter.filter(content, player, event))
event.setCancelled(true);

}
Expand Down
31 changes: 26 additions & 5 deletions src/main/resources/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -61,29 +61,50 @@ replacements:
filter:
severe:
action:
- "command: tempmute %player% 4h Censura: Używanie obraźliwych słów"
- "command: tempmute %player% 4h Używanie obraźliwych słów"
match:
- nigger: "contain"
- nibber: "contain"
- niga: "contain"
- niba: "contain"
- pedal: "contain"
- niger: "contain"
- zjeb
- chuj
- huj
- : "contain"
- : "contain"
normal:
action:
- "message: Censura - nie używaj wulgaryzmów, %player%!"
- "ghost"
match:
- hitler: "contain"
- kurwa
light:
- (kurw[a-z]*): "regex"
- (jeba[a-zęóąśłżźćń]*): "regex"
- (pierd[ao][^ł]l*): "regex"
- (cip[a-zęóąśłżźćń]*): "regex"
- (pi[zź]d): "regex"
- (g[^łl]([óo]wn)): "regex"
- (dup[ay]): "regex"
- (dupie): "regex"
- (kutas): "regex"
- (penis): "regex"
- (dziwk[aoi]): "regex"
- (dziwek): "regex"
advertise:
action:
- "ghost"
match:
- zbiaks
- pronko
- ([ &.,]|^)([\w]{5,})([., ]){1,}(pl|com|org|net|biz|mobi|kz|tk|server.pro|serv.nu)([ &.,]|$): "regex"
- ([\d]{1,3}[.,]{1,}){3,}([\d]{1,3}): "regex"
- aternos

# Messages used by the plugin
messages:
no-permission: "Censura - &cNie masz uprawnień, by to zrobić."
no-such-command: "Censura - &cNie istnieje taka komenda."
config-reloaded: "Censura - &aKonfiguracja przeładowana."
kick-bad-name: "Censura\n&cTwój nick zawiera zakazane słowa!"

# Regex whitelist is configured in RegexMatch.
3 changes: 3 additions & 0 deletions src/main/resources/plugin.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,6 @@ permissions:
censura.bypass:
default: false
description: Allows to bypass filters of Censura
censura.filteredMessages:
default: false
description: Show filtered messages on chat

0 comments on commit feaa4ec

Please sign in to comment.