Add support for marking and processing web-originated chat messages.
This commit is contained in:
parent
421f6655fd
commit
5a4140c2e2
|
|
@ -3,7 +3,10 @@ package com.alttd.chat.objects;
|
||||||
import com.alttd.chat.database.Queries;
|
import com.alttd.chat.database.Queries;
|
||||||
import com.alttd.chat.objects.channels.Channel;
|
import com.alttd.chat.objects.channels.Channel;
|
||||||
import com.alttd.chat.util.Utility;
|
import com.alttd.chat.util.Utility;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.ComponentLike;
|
import net.kyori.adventure.text.ComponentLike;
|
||||||
|
import net.kyori.adventure.text.TextComponent;
|
||||||
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -89,9 +92,15 @@ public class ChatUser {
|
||||||
return Utility.getStaffPrefix(uuid);
|
return Utility.getStaffPrefix(uuid);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ComponentLike getPrefixAll() {
|
public ComponentLike getPrefixAll(boolean isWebMessage) {
|
||||||
//return prefixAll;
|
//return prefixAll;
|
||||||
return Utility.getPrefix(uuid, false);
|
ComponentLike prefix = Utility.getPrefix(uuid, false);
|
||||||
|
if (isWebMessage) {
|
||||||
|
//TODO [Stijn] [2026-08-08]: Check icon
|
||||||
|
TextComponent webIcon = Component.text("\uD83D\uDEDC").color(NamedTextColor.DARK_AQUA);
|
||||||
|
prefix = webIcon.append(prefix);
|
||||||
|
}
|
||||||
|
return prefix;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getReplyTarget() {
|
public String getReplyTarget() {
|
||||||
|
|
|
||||||
|
|
@ -50,27 +50,28 @@ public class ChatMessageSender {
|
||||||
private final MiniMessage miniMessage = MiniMessage.miniMessage();
|
private final MiniMessage miniMessage = MiniMessage.miniMessage();
|
||||||
|
|
||||||
public void sendMessage(UUID sender, String message) {
|
public void sendMessage(UUID sender, String message) {
|
||||||
|
//TODO [Stijn] [2026-08-02]: Mark as from website
|
||||||
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(sender);
|
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(sender);
|
||||||
Component component = miniMessage.deserialize(message);
|
Component component = miniMessage.deserialize(message);
|
||||||
sendMessage(offlinePlayer, component);
|
sendMessage(offlinePlayer, component, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendMessage(@NotNull OfflinePlayer offlinePlayer, Component message) {
|
public void sendMessage(@NotNull OfflinePlayer offlinePlayer, Component message, boolean isFromWeb) {
|
||||||
UUID uuid = offlinePlayer.getUniqueId();
|
UUID uuid = offlinePlayer.getUniqueId();
|
||||||
if (luckPerms.getUserManager().isLoaded(uuid)) {
|
if (luckPerms.getUserManager().isLoaded(uuid)) {
|
||||||
User user = luckPerms.getUserManager().getUser(uuid);
|
User user = luckPerms.getUserManager().getUser(uuid);
|
||||||
sendMessage(user, offlinePlayer, message);
|
sendMessage(user, offlinePlayer, message, isFromWeb);
|
||||||
} else {
|
} else {
|
||||||
luckPerms.getUserManager().loadUser(uuid).whenComplete((user, throwable) -> {
|
luckPerms.getUserManager().loadUser(uuid).whenComplete((user, throwable) -> {
|
||||||
if (throwable != null) {
|
if (throwable != null) {
|
||||||
ALogger.error("Failed to load user: " + uuid, throwable);
|
ALogger.error("Failed to load user: " + uuid, throwable);
|
||||||
}
|
}
|
||||||
sendMessage(user, offlinePlayer, message);
|
sendMessage(user, offlinePlayer, message, isFromWeb);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendMessage(User user, OfflinePlayer offlinePlayer, Component message) {
|
private void sendMessage(User user, OfflinePlayer offlinePlayer, Component message, boolean isFromWeb) {
|
||||||
if (offlinePlayer == null) {
|
if (offlinePlayer == null) {
|
||||||
ALogger.error("OfflinePlayer is null");
|
ALogger.error("OfflinePlayer is null");
|
||||||
return;
|
return;
|
||||||
|
|
@ -87,7 +88,7 @@ public class ChatMessageSender {
|
||||||
|
|
||||||
ModifiableString modifiableString = new ModifiableString(inputComponent);
|
ModifiableString modifiableString = new ModifiableString(inputComponent);
|
||||||
|
|
||||||
if (parseMessage(offlinePlayer, uuid, modifiableString, inputComponent)) {
|
if (parseMessage(offlinePlayer, uuid, modifiableString, inputComponent, isFromWeb)) {
|
||||||
//Parse message failed likely due to something the player said, already logged
|
//Parse message failed likely due to something the player said, already logged
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -142,7 +143,7 @@ public class ChatMessageSender {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean parseMessage(OfflinePlayer offlinePlayer, UUID uuid, ModifiableString modifiableString, Component inputComponent) {
|
private boolean parseMessage(OfflinePlayer offlinePlayer, UUID uuid, ModifiableString modifiableString, Component inputComponent, boolean isWebMessage) {
|
||||||
// todo a better way for this
|
// todo a better way for this
|
||||||
if (!RegexManager.filterText(offlinePlayer.getName(), uuid, modifiableString, true, "chat",
|
if (!RegexManager.filterText(offlinePlayer.getName(), uuid, modifiableString, true, "chat",
|
||||||
filterType -> punishOnlinePlayer(filterType, uuid, modifiableString)
|
filterType -> punishOnlinePlayer(filterType, uuid, modifiableString)
|
||||||
|
|
@ -152,7 +153,10 @@ public class ChatMessageSender {
|
||||||
""
|
""
|
||||||
);
|
);
|
||||||
String originalMessage = PlainTextComponentSerializer.plainText().serialize(inputComponent);
|
String originalMessage = PlainTextComponentSerializer.plainText().serialize(inputComponent);
|
||||||
Optional<Component> component = render(offlinePlayer, inputComponent).map(ComponentLike::asComponent);
|
Optional<Component> component = render(offlinePlayer,
|
||||||
|
inputComponent,
|
||||||
|
isWebMessage
|
||||||
|
).map(ComponentLike::asComponent);
|
||||||
if (component.isEmpty()) {
|
if (component.isEmpty()) {
|
||||||
//Already logged
|
//Already logged
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -220,7 +224,7 @@ public class ChatMessageSender {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Optional<ComponentLike> render(@NotNull OfflinePlayer offlinePlayer, @NotNull Component message) {
|
private Optional<ComponentLike> render(@NotNull OfflinePlayer offlinePlayer, @NotNull Component message, boolean isWebMessage) {
|
||||||
if (offlinePlayer.getName() == null) {
|
if (offlinePlayer.getName() == null) {
|
||||||
ALogger.error("Invalid offline player");
|
ALogger.error("Invalid offline player");
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
|
|
@ -231,7 +235,7 @@ public class ChatMessageSender {
|
||||||
Placeholder.component("sender", user.getDisplayName()),
|
Placeholder.component("sender", user.getDisplayName()),
|
||||||
Placeholder.parsed("sendername", offlinePlayer.getName()),
|
Placeholder.parsed("sendername", offlinePlayer.getName()),
|
||||||
Placeholder.component("prefix", user.getPrefix()),
|
Placeholder.component("prefix", user.getPrefix()),
|
||||||
Placeholder.component("prefixall", user.getPrefixAll()),
|
Placeholder.component("prefixall", user.getPrefixAll(isWebMessage)),
|
||||||
Placeholder.component("staffprefix", user.getStaffPrefix()),
|
Placeholder.component("staffprefix", user.getStaffPrefix()),
|
||||||
Placeholder.component("message", message)
|
Placeholder.component("message", message)
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,7 @@ public class ChatListener implements Listener {
|
||||||
toggleable.sendMessage(event.getPlayer(), event.message());
|
toggleable.sendMessage(event.getPlayer(), event.message());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
chatMessageSender.sendMessage(event.getPlayer(), event.message());
|
chatMessageSender.sendMessage(event.getPlayer(), event.message(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private ComponentLike parseMessageContent(Player player, String rawMessage) {
|
private ComponentLike parseMessageContent(Player player, String rawMessage) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user