From 203f21701ad22c070a18ab255b084436d5fc8d29 Mon Sep 17 00:00:00 2001 From: Xujiayao Date: Mon, 23 Mar 2026 01:03:32 +0800 Subject: [PATCH] Add method to retrieve all Discord members and enhance mention handling --- .../server/discord/DiscordManager.java | 19 +++++++++++++++++++ .../message/MinecraftMessageParser.java | 17 +++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/core/src/main/java/com/xujiayao/discord_mc_chat/server/discord/DiscordManager.java b/core/src/main/java/com/xujiayao/discord_mc_chat/server/discord/DiscordManager.java index b0951642..a4ad2d4d 100644 --- a/core/src/main/java/com/xujiayao/discord_mc_chat/server/discord/DiscordManager.java +++ b/core/src/main/java/com/xujiayao/discord_mc_chat/server/discord/DiscordManager.java @@ -347,6 +347,25 @@ public final class DiscordManager { return null; } + /** + * Gets all Discord members from every connected guild. + */ + public static List getAllMembers() { + if (jda == null) { + return List.of(); + } + Set seen = new LinkedHashSet<>(); + List members = new ArrayList<>(); + for (var guild : jda.getGuilds()) { + for (Member member : guild.getMembers()) { + if (seen.add(member.getId())) { + members.add(member); + } + } + } + return members; + } + /** * Gets all guild roles from every connected guild. */ diff --git a/core/src/main/java/com/xujiayao/discord_mc_chat/server/message/MinecraftMessageParser.java b/core/src/main/java/com/xujiayao/discord_mc_chat/server/message/MinecraftMessageParser.java index 4851bc3d..f4f14676 100644 --- a/core/src/main/java/com/xujiayao/discord_mc_chat/server/message/MinecraftMessageParser.java +++ b/core/src/main/java/com/xujiayao/discord_mc_chat/server/message/MinecraftMessageParser.java @@ -222,6 +222,7 @@ public final class MinecraftMessageParser { Map roleByAlias = new HashMap<>(); Map allMentionByAlias = new HashMap<>(); Map emojiByAlias = new HashMap<>(); + Map targetByDiscordId = new HashMap<>(); Map> allLinks = LinkedAccountManager.getAllLinks(); for (Map.Entry> entry : allLinks.entrySet()) { @@ -234,6 +235,7 @@ public final class MinecraftMessageParser { String roleColor = DiscordMessageParser.getRoleColorHex(member); MentionTarget target = new MentionTarget(MentionType.USER, discordId, displayName, roleColor, linkedUuids); + targetByDiscordId.put(discordId, target); if (user != null) { putMentionAlias(userByAlias, allMentionByAlias, user.getName(), target); @@ -249,6 +251,21 @@ public final class MinecraftMessageParser { } } + for (Member member : DiscordManager.getAllMembers()) { + String discordId = member.getId(); + MentionTarget target = targetByDiscordId.computeIfAbsent(discordId, id -> new MentionTarget( + MentionType.USER, + id, + member.getEffectiveName(), + DiscordMessageParser.getRoleColorHex(member), + List.of() + )); + + User user = member.getUser(); + putMentionAlias(userByAlias, allMentionByAlias, user.getName(), target); + putMentionAlias(userByAlias, allMentionByAlias, member.getEffectiveName(), target); + } + for (Role role : DiscordManager.getAllRoles()) { String color = "white"; Color roleColor = role.getColors().getPrimary();