- ChatFilterManager.shouldBlockUrl(): 下划线分隔的必须命中非法域名后缀才拦截 - 玩家名下划线误匹配(如 player_name)后缀不在黑名单 → 跳过不处罚 - 点分隔域名正常拦截不变 - 改进: onChat + filterLinkInContent 两处调用
This commit is contained in:
@@ -958,6 +958,21 @@ public class ChatFilterManager {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断URL是否应被拦截
|
||||
* 下划线分隔的字符串(如 player_name),必须命中非法域名后缀才拦截
|
||||
* 点分隔或标准URL正常拦截
|
||||
*/
|
||||
public boolean shouldBlockUrl(String url) {
|
||||
if (isWhitelisted(url)) return false;
|
||||
// 下划线分隔 → 检查是否非法域名,不在列表则跳过(合法玩家名下划线误匹配)
|
||||
if (url.contains("_")) {
|
||||
return containsIllegalDomain(url);
|
||||
}
|
||||
// 点分隔或标准URL正常拦截
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean isLikelyDomain(String url) {
|
||||
int lastDot = url.lastIndexOf('.');
|
||||
if (lastDot < 0
|
||||
|
||||
@@ -3437,10 +3437,10 @@ public class Main extends JavaPlugin
|
||||
chatFilter.extractUrls(msg);
|
||||
if (urls.isEmpty()) return;
|
||||
|
||||
// 过滤白名单
|
||||
// 过滤白名单 + 下划线误匹配(player_name 不在非法域名列表则跳过)
|
||||
List<String> blocked = new ArrayList<>();
|
||||
for (String url : urls) {
|
||||
if (!chatFilter.isWhitelisted(url)) {
|
||||
if (chatFilter.shouldBlockUrl(url)) {
|
||||
blocked.add(url);
|
||||
}
|
||||
}
|
||||
@@ -3538,7 +3538,7 @@ public class Main extends JavaPlugin
|
||||
|
||||
List<String> blocked = new ArrayList<>();
|
||||
for (String url : urls) {
|
||||
if (!chatFilter.isWhitelisted(url)) {
|
||||
if (chatFilter.shouldBlockUrl(url)) {
|
||||
blocked.add(url);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user