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.objects.channels.Channel;
|
||||
import com.alttd.chat.util.Utility;
|
||||
import net.kyori.adventure.text.Component;
|
||||
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.List;
|
||||
|
|
@ -89,9 +92,15 @@ public class ChatUser {
|
|||
return Utility.getStaffPrefix(uuid);
|
||||
}
|
||||
|
||||
public ComponentLike getPrefixAll() {
|
||||
public ComponentLike getPrefixAll(boolean isWebMessage) {
|
||||
//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() {
|
||||
|
|
|
|||
|
|
@ -50,27 +50,28 @@ public class ChatMessageSender {
|
|||
private final MiniMessage miniMessage = MiniMessage.miniMessage();
|
||||
|
||||
public void sendMessage(UUID sender, String message) {
|
||||
//TODO [Stijn] [2026-08-02]: Mark as from website
|
||||
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(sender);
|
||||
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();
|
||||
if (luckPerms.getUserManager().isLoaded(uuid)) {
|
||||
User user = luckPerms.getUserManager().getUser(uuid);
|
||||
sendMessage(user, offlinePlayer, message);
|
||||
sendMessage(user, offlinePlayer, message, isFromWeb);
|
||||
} else {
|
||||
luckPerms.getUserManager().loadUser(uuid).whenComplete((user, throwable) -> {
|
||||
if (throwable != null) {
|
||||
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) {
|
||||
ALogger.error("OfflinePlayer is null");
|
||||
return;
|
||||
|
|
@ -87,7 +88,7 @@ public class ChatMessageSender {
|
|||
|
||||
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
|
||||
return;
|
||||
}
|
||||
|
|
@ -142,7 +143,7 @@ public class ChatMessageSender {
|
|||
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
|
||||
if (!RegexManager.filterText(offlinePlayer.getName(), uuid, modifiableString, true, "chat",
|
||||
filterType -> punishOnlinePlayer(filterType, uuid, modifiableString)
|
||||
|
|
@ -152,7 +153,10 @@ public class ChatMessageSender {
|
|||
""
|
||||
);
|
||||
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()) {
|
||||
//Already logged
|
||||
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) {
|
||||
ALogger.error("Invalid offline player");
|
||||
return Optional.empty();
|
||||
|
|
@ -231,7 +235,7 @@ public class ChatMessageSender {
|
|||
Placeholder.component("sender", user.getDisplayName()),
|
||||
Placeholder.parsed("sendername", offlinePlayer.getName()),
|
||||
Placeholder.component("prefix", user.getPrefix()),
|
||||
Placeholder.component("prefixall", user.getPrefixAll()),
|
||||
Placeholder.component("prefixall", user.getPrefixAll(isWebMessage)),
|
||||
Placeholder.component("staffprefix", user.getStaffPrefix()),
|
||||
Placeholder.component("message", message)
|
||||
);
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ public class ChatListener implements Listener {
|
|||
toggleable.sendMessage(event.getPlayer(), event.message());
|
||||
return;
|
||||
}
|
||||
chatMessageSender.sendMessage(event.getPlayer(), event.message());
|
||||
chatMessageSender.sendMessage(event.getPlayer(), event.message(), false);
|
||||
}
|
||||
|
||||
private ComponentLike parseMessageContent(Player player, String rawMessage) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user