Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public AboutCommand(ChatGuard plugin) {
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
// Contributors: If you've contributed code, you can add your name here to be credited.
List<String> contributors = Arrays.asList(
"moderator_man", "zavdav"
"moderator_man", "zavdav", "RitzKid76"
);
AboutUtil.aboutPlugin(sender, plugin, contributors);
return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
.filter(key -> key.equalsIgnoreCase(playerName))
.findFirst()
.orElse(null);
int playerStrikeTier = foundKey != null ? PenaltyConfig.getPlayerStrike(foundKey) : -1;
int playerStrikeTier = foundKey != null ? PenaltyConfig.getPlayerStrikes(foundKey) : -1;

if (foundKey == null) {
sender.sendMessage(ColorUtil.translateColorCodes(String.format(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,10 @@ public static boolean getStrikeDecayEnabled() {
return ChatGuard.getConfig().getBoolean("filter.auto-mute.strike-decay.enabled", true);
}

public static boolean getWarningDecayEnabled() {
return ChatGuard.getConfig().getBoolean("filter.auto-mute.warning-decay.enabled", true);
}

public static long getStrikeDecayPeriod() {
final String configString = ChatGuard.getConfig().getString("filter.auto-mute.strike-decay.period");

Expand All @@ -57,6 +61,18 @@ public static long getStrikeDecayPeriod() {
}
}

public static long getWarningDecayPeriod() {
final String configString = ChatGuard.getConfig().getString("filter.auto-mute.warning-decay.period");

try {
final long futureTime = TimeFormatter.parseDateDiff(configString, true);

return futureTime - System.currentTimeMillis();
} catch(Exception e) {
throw new RuntimeException(e);
}
}

public static int getWarningcount() {
return ChatGuard.getConfig().getInt("filter.auto-mute.warnings.warning-count", 0);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,11 @@ public static List<String> getStrikesKeys() {
return ChatGuard.getStrikes().getKeys();
}

public static int getPlayerStrike(Player player) {
return getPlayerStrike(player.getName());
public static int getPlayerStrikes(Player player) {
return getPlayerStrikes(player.getName());
}

public static int getPlayerStrike(String playerName) {
public static int getPlayerStrikes(String playerName) {
return ChatGuard.getStrikes().getInt(playerName + ".strikes", 0);
}

Expand All @@ -31,23 +31,23 @@ public static int getPlayerWarnings(String playerName) {
return ChatGuard.getStrikes().getInt(playerName + ".warnings", 0);
}

public static void setPlayerStrike(Player player, int newStrike) {
public static void setPlayerStrikes(Player player, int newStrike) {
setPlayerStrike(player.getName(), newStrike);
}

public static void decrementPlayerStrike(Player player, int amount, long updateTime) {
setPlayerStrike(player.getName(), getPlayerStrike(player) - amount, updateTime);
setPlayerStrikes(player.getName(), getPlayerStrikes(player) - amount, updateTime);
}

public static void incrementPlayerStrike(Player player, int amount) {
setPlayerStrike(player, getPlayerStrike(player) + amount);
setPlayerStrikes(player, getPlayerStrikes(player) + amount);
}

public static void setPlayerStrike(String playerName, int newStrike) {
setPlayerStrike(playerName, newStrike, System.currentTimeMillis());
setPlayerStrikes(playerName, newStrike, System.currentTimeMillis());
}

public static void setPlayerStrike(String playerName, int newStrike, long updateTime) {
public static void setPlayerStrikes(String playerName, int newStrike, long updateTime) {
ConfigUtil strikes = ChatGuard.getStrikes();

newStrike = Math.max(newStrike, 0);
Expand All @@ -56,12 +56,16 @@ public static void setPlayerStrike(String playerName, int newStrike, long update
strikes.removeProperty(playerName);
else {
strikes.setProperty(playerName + ".strikes", newStrike);
strikes.setProperty(playerName + ".updated", updateTime);
strikes.setProperty(playerName + ".muteUpdated", updateTime);
}

ChatGuard.getStrikes().save();
}

public static void decrementPlayerWarning(Player player, int amount, long updateTime) {
setPlayerWarnings(player.getName(), getPlayerWarnings(player) - amount, updateTime);
}

public static void incrementPlayerWarnings(Player player) {
setPlayerWarnings(player, getPlayerWarnings(player) + 1);
}
Expand All @@ -71,14 +75,29 @@ public static void setPlayerWarnings(Player player, int warnings) {
}

public static void setPlayerWarnings(String playerName, int warnings) {
ChatGuard.getStrikes().setProperty(playerName + ".warnings", warnings);
setPlayerWarnings(playerName, warnings, System.currentTimeMillis());
}

public static void setPlayerWarnings(String playerName, int newWarning, long updateTime) {
ConfigUtil strikes = ChatGuard.getStrikes();

newWarning = Math.max(newWarning, 0);

if(newWarning == 0 && getPlayerStrikes(playerName) <= 0)
strikes.removeProperty(playerName);
else {
strikes.setProperty(playerName + ".warnings", newWarning);
strikes.setProperty(playerName + ".warnUpdated", updateTime);
}

ChatGuard.getStrikes().save();
}

public static String getAutoMuteDuration(Player player) {
final List<String> penalties = FilterConfig.getAutoMuteDurations();
final int maxPenalty = penalties.size() - 1;

int playerPenalty = getPlayerStrike(player);
int playerPenalty = getPlayerStrikes(player);

if (playerPenalty > maxPenalty)
return penalties.get(maxPenalty);
Expand All @@ -91,7 +110,23 @@ public static long getLastMuteTime(Player player) {
}

public static long getLastMuteTime(String playerName) {
final String lastUpdatedString = ChatGuard.getStrikes().getString(playerName + ".updated");
final String lastUpdatedString = ChatGuard.getStrikes().getString(playerName + ".muteUpdated");
if(lastUpdatedString == null)
return -1;

try {
return Long.parseLong(lastUpdatedString);
} catch (NumberFormatException e) {
throw new RuntimeException(e);
}
}

public static long getLastWarnTime(Player player) {
return getLastWarnTime(player.getName());
}

public static long getLastWarnTime(String playerName) {
final String lastUpdatedString = ChatGuard.getStrikes().getString(playerName + ".warnUpdated");
if(lastUpdatedString == null)
return -1;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ protected void setupEmbedDetails() {
else {
embed.setDescription(String.format(
"Strike: %d - Mute Duration: %s",
PenaltyConfig.getPlayerStrike(player) + severity,
PenaltyConfig.getPlayerStrikes(player) + severity,
PenaltyConfig.getAutoMuteDuration(player)
));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public SignEmbed(JavaPlugin plugin, Player player, String content, String trigge
protected void setupEmbedDetails() {
embed.setDescription(String.format(
"Strike: %d",
PenaltyConfig.getPlayerStrike(player) + 1
PenaltyConfig.getPlayerStrikes(player) + 1
));

embed.setTitle("Sign Filter")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,10 @@ public static void finalizeActions(LogType logType, Player player, String conten
final String flaggedSection = trigger.getSection();

player.sendMessage(ColorUtil.translateColorCodes(
String.format("&cYour message contains the flagged word: '%s'.", badWord)
String.format("&cYour message contains the flagged word: '%s'", badWord)
));
player.sendMessage(ColorUtil.translateColorCodes(
String.format("&cSection flagged: '%s'.", flaggedSection)
String.format("&cSection flagged: '%s'", flaggedSection)
));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,24 +73,69 @@ public static IMuteHandler getMuteHandler() {
return muteHandler;
}

public static void updatePlayerStrikes(Player player) {
if(!FilterConfig.getStrikeDecayEnabled())
return;
public static void updatePlayerData(Player player) {
if(FilterConfig.getStrikeDecayEnabled())
updatePlayerStrikes(player);
if(FilterConfig.getWarningDecayEnabled())
updatePlayerWarnings(player);
}

private static void updatePlayerStrikes(Player player) {
final int playerStrikeCount = PenaltyConfig.getPlayerStrikes(player);
if(playerStrikeCount <= 0)
return; // player has no strikes

final long lastMuteTime = PenaltyConfig.getLastMuteTime(player);
if(lastMuteTime == -1) // player has no strikes
return;

final long timePassed = System.currentTimeMillis() - lastMuteTime;
final long decayPeriod = FilterConfig.getStrikeDecayPeriod();

final int strikesToRevoke = (int) (timePassed / decayPeriod);
final int strikesToRevoke = Math.min(
(int) (timePassed / decayPeriod),
playerStrikeCount
);

// this is only really done to prevent longer decay times than would normally happen under the config
final long totalRevokePeriod = strikesToRevoke * decayPeriod;
final long newPlayerUpdatedTime = lastMuteTime + totalRevokePeriod;

PenaltyConfig.decrementPlayerStrike(player, strikesToRevoke, newPlayerUpdatedTime);

String pointsString = "point";
if(strikesToRevoke != 1)
pointsString += "s";

final String coloredMessage = ColorUtil.translateColorCodes(String.format("&aYour ChatGuard strike count has been reduced by %d %s! You have %d remaining", strikesToRevoke, pointsString, playerStrikeCount - strikesToRevoke));
player.sendMessage(coloredMessage);
}

private static void updatePlayerWarnings(Player player) {
final int playerWarningCount = PenaltyConfig.getPlayerWarnings(player);
if(playerWarningCount <= 0)
return; // player has no warnings

final long lastWarnTime = PenaltyConfig.getLastWarnTime(player);

final long timePassed = System.currentTimeMillis() - lastWarnTime;
final long decayPeriod = FilterConfig.getWarningDecayPeriod();

final int warningsToRevoke = Math.min(
(int) (timePassed / decayPeriod),
playerWarningCount
);

// this is only really done to prevent longer decay times than would normally happen under the config
final long totalRevokePeriod = warningsToRevoke * decayPeriod;
final long newPlayerUpdatedTime = lastWarnTime + totalRevokePeriod;

PenaltyConfig.decrementPlayerWarning(player, warningsToRevoke, newPlayerUpdatedTime);

String pointsString = "point";
if(warningsToRevoke != 1)
pointsString += "s";

final String coloredMessage = ColorUtil.translateColorCodes(String.format("&aYour ChatGuard warning count has been reduced by %d %s! You have %d remaining", warningsToRevoke, pointsString, playerWarningCount - warningsToRevoke));
player.sendMessage(coloredMessage);
}

public static void handleWarning(Player player) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public static boolean isPlayerChatSpamming(Player player) {

if (lastTimestamp != 0) {
long elapsed = timestamp - lastTimestamp;
int cooldown = SpamPreventionConfig.getCooldownMsChat().get(PenaltyConfig.getPlayerStrike(player));
int cooldown = SpamPreventionConfig.getCooldownMsChat().get(PenaltyConfig.getPlayerStrikes(player));

if (elapsed <= cooldown) {
if (SpamPreventionConfig.getWarnPlayerEnabled()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public static boolean isPlayerCommandSpamming(Player player, String message) {

if (lastTimestamp != 0) {
long elapsed = timestamp - lastTimestamp;
int cooldown = SpamPreventionConfig.getCooldownMsCommand().get(PenaltyConfig.getPlayerStrike(player));
int cooldown = SpamPreventionConfig.getCooldownMsCommand().get(PenaltyConfig.getPlayerStrikes(player));

if (elapsed <= cooldown) {
if (SpamPreventionConfig.getWarnPlayerEnabled()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,6 @@ public void onPlayerJoin(PlayerJoinEvent event) {
return;
}

PenaltyEnforcer.updatePlayerStrikes(player);
PenaltyEnforcer.updatePlayerData(player);
}
}
3 changes: 3 additions & 0 deletions src/main/resources/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,9 @@ filter:
strike-decay:
enabled: true
period: 1w
warning-decay:
enabled: true
period: 2w
warnings:
warning-count: 3
severity-bypass-threshold: 3
Expand Down