diff --git a/core/src/main/java/com/xujiayao/discord_mc_chat/server/discord/DiscordMessageParser.java b/core/src/main/java/com/xujiayao/discord_mc_chat/server/discord/DiscordMessageParser.java index eaa3f1bc..8694dbb6 100644 --- a/core/src/main/java/com/xujiayao/discord_mc_chat/server/discord/DiscordMessageParser.java +++ b/core/src/main/java/com/xujiayao/discord_mc_chat/server/discord/DiscordMessageParser.java @@ -58,6 +58,7 @@ public class DiscordMessageParser { // Discord custom emoji patterns private static final Pattern CUSTOM_EMOJI_PATTERN = Pattern.compile(""); + private static final Pattern DISCORD_ALIAS_EMOJI_PATTERN = Pattern.compile("(? splitSegmentsByDiscordAliasEmoji(List segments) { + List out = new ArrayList<>(); + for (TextSegment segment : segments) { + if (segment.clickUrl != null || segment.text == null || segment.text.isEmpty()) { + out.add(segment); + continue; + } + Matcher matcher = DISCORD_ALIAS_EMOJI_PATTERN.matcher(segment.text); + int cursor = 0; + boolean matched = false; + while (matcher.find()) { + String alias = matcher.group(); + if (EmojiManager.getByDiscordAlias(alias).isEmpty()) { + continue; + } + if (matcher.start() > cursor) { + out.add(copySegment(segment, segment.text.substring(cursor, matcher.start()))); + } + TextSegment emojiSegment = copySegment(segment, alias); + emojiSegment.color = "yellow"; + out.add(emojiSegment); + cursor = matcher.end(); + matched = true; + } + if (!matched) { + out.add(segment); + } else if (cursor < segment.text.length()) { + out.add(copySegment(segment, segment.text.substring(cursor))); + } + } + return out; + } + private static List splitSegmentsByUnicodeEmoji(List segments) { List out = new ArrayList<>(); for (TextSegment segment : segments) {