Skip to content

Commit 05b8485

Browse files
committed
Add MiniMessage filter
1 parent 4d1ceb5 commit 05b8485

File tree

4 files changed

+61
-4
lines changed

4 files changed

+61
-4
lines changed

src/main/java/net/voxelarc/allaychat/AllayChatPlugin.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ private void setupFilters() {
166166
addFilter(new PhoneFilter(this));
167167
addFilter(new RegexFilter(this));
168168
addFilter(new SimilarityFilter(this));
169+
addFilter(new MiniMessageFilter(this));
169170

170171
for (ChatFilter filter : getFilters()) {
171172
filter.onEnable();

src/main/java/net/voxelarc/allaychat/chat/LocalChatManager.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ public boolean handleMessage(Player player, String message) {
202202
Component component = ChatUtils.format(
203203
plugin.getMessagesConfig().getString("messages.message-cancelled-operator"),
204204
Placeholder.unparsed("player", player.getName()),
205-
Placeholder.unparsed("message", ChatUtils.removeColorCodes(message)),
205+
Placeholder.unparsed("message", ChatUtils.MINI_MESSAGE.stripTags(ChatUtils.removeColorCodes(message))), // strip here too so staff does not click accidentally
206206
Placeholder.unparsed("flag", filter.getClass().getSimpleName()
207207
.replace("Filter", "").toUpperCase())
208208
);
@@ -314,19 +314,19 @@ && handleMessage(from, message)) {
314314
plugin.getPrivateMessageConfig().getString("messages.spy"),
315315
Placeholder.unparsed("from", from.getName()),
316316
Placeholder.unparsed("to", to),
317-
Placeholder.unparsed("message", message)
317+
Placeholder.unparsed("message", ChatUtils.MINI_MESSAGE.stripTags(message))
318318
);
319319

320320
Component msgTarget = ChatUtils.format(
321321
plugin.getPrivateMessageConfig().getString("messages.format-target"),
322322
Placeholder.unparsed("player", from.getName()),
323-
Placeholder.unparsed("message", message)
323+
Placeholder.unparsed("message", ChatUtils.MINI_MESSAGE.stripTags(message))
324324
);
325325

326326
Component msgSender = ChatUtils.format(
327327
plugin.getPrivateMessageConfig().getString("messages.format-self"),
328328
Placeholder.unparsed("player", target.getName()),
329-
Placeholder.unparsed("message", message)
329+
Placeholder.unparsed("message", ChatUtils.MINI_MESSAGE.stripTags(message))
330330
);
331331

332332
ChatUtils.sendMessage(target, msgTarget);
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package net.voxelarc.allaychat.filter;
2+
3+
import lombok.RequiredArgsConstructor;
4+
import net.kyori.adventure.text.Component;
5+
import net.voxelarc.allaychat.AllayChatPlugin;
6+
import net.voxelarc.allaychat.api.filter.ChatFilter;
7+
import net.voxelarc.allaychat.api.util.ChatUtils;
8+
import org.bukkit.entity.Player;
9+
10+
import java.util.regex.Pattern;
11+
12+
@RequiredArgsConstructor
13+
public class MiniMessageFilter implements ChatFilter {
14+
15+
private final Pattern allPattern = Pattern.compile("(?i).*(<|&[0-9a-fk-or])(click|hover|insert|gradient|rainbow|transition|score|selector|key|lang|[#x][0-9a-f]{6}|red|blue|green|yellow|white|black|gold|gray|aqua|dark_|light_|bold|italic|underlined|strikethrough|obfuscated|reset).*");
16+
private final Pattern functionalPattern = Pattern.compile("(?i).*(<|&[0-9a-fk-or])(click|hover|insert|score|selector|key|lang|bold|italic|underlined|strikethrough|obfuscated|reset).*");
17+
18+
private final AllayChatPlugin plugin;
19+
20+
private boolean enabled = true;
21+
private boolean blockAll = true;
22+
23+
private Component blockedMessage;
24+
25+
@Override
26+
public void onEnable() {
27+
enabled = plugin.getFilterConfig().getBoolean("minimessage.enabled", true);
28+
blockAll = plugin.getFilterConfig().getBoolean("minimessage.block-all", true);
29+
blockedMessage = ChatUtils.format(plugin.getFilterConfig().getString("minimessage.message", "<prefix> <red>You can not send MiniMessage tags."));
30+
}
31+
32+
@Override
33+
public boolean checkMessage(Player player, String message) {
34+
if (!enabled) return false;
35+
if (player.hasPermission("allaychat.bypass.minimessage")) return false;
36+
37+
if (blockAll && allPattern.matcher(message).find()) {
38+
ChatUtils.sendMessage(player, blockedMessage);
39+
return true;
40+
} else if (functionalPattern.matcher(message).find()) {
41+
ChatUtils.sendMessage(player, blockedMessage);
42+
return true;
43+
}
44+
45+
return false;
46+
}
47+
48+
}

src/main/resources/filter.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,14 @@ domain:
88
enabled: true
99
message: "<prefix> <red>You can not send domains in the chat."
1010

11+
minimessage:
12+
enabled: true
13+
# should we block ALL the minimessage tags? (including color tags).
14+
# if disabled, we only block a select few such as: click, hover, etc.
15+
# however, I recommend you keep this true
16+
block-all: true
17+
message: "<prefix> <red>You can not send MiniMessage tags."
18+
1119
phone:
1220
enabled: true
1321
message: "<prefix> <red>You can not send phone numbers."

0 commit comments

Comments
 (0)