CapslockFilter.java
package dev.aura.bungeechat.filter;
import com.google.common.annotations.VisibleForTesting;
import dev.aura.bungeechat.api.account.BungeeChatAccount;
import dev.aura.bungeechat.api.filter.BlockMessageException;
import dev.aura.bungeechat.api.filter.BungeeChatFilter;
import dev.aura.bungeechat.api.filter.FilterManager;
import dev.aura.bungeechat.message.Messages;
import dev.aura.bungeechat.permission.Permission;
import dev.aura.bungeechat.permission.PermissionManager;
public class CapslockFilter implements BungeeChatFilter {
private final int minimumLetterCount;
private final int maximumCapsPercentage;
private final boolean noPermissions;
public CapslockFilter(int minimumLetterCount, int maximumCapsPercentage) {
this(minimumLetterCount, maximumCapsPercentage, false);
}
@VisibleForTesting
CapslockFilter(int minimumLetterCount, int maximumCapsPercentage, boolean noPermissions) {
this.minimumLetterCount = minimumLetterCount;
this.maximumCapsPercentage = maximumCapsPercentage;
this.noPermissions = noPermissions;
}
@Override
public String applyFilter(BungeeChatAccount sender, String message) throws BlockMessageException {
if (!noPermissions && PermissionManager.hasPermission(sender, Permission.BYPASS_ANTI_CAPSLOCK))
return message;
int uppercase = 0;
int lowercase = 0;
for (char c : message.toCharArray()) {
if (Character.isUpperCase(c)) {
uppercase++;
} else if (Character.isLowerCase(c)) {
lowercase++;
}
}
int total = uppercase + lowercase;
if (total < minimumLetterCount) return message;
if (((uppercase * 100) / total) > maximumCapsPercentage)
throw new ExtendedBlockMessageException(Messages.ANTI_CAPSLOCK, sender, message);
return message;
}
@Override
public int getPriority() {
return FilterManager.CAPSLOCK_FILTER_PRIORITY;
}
}