From 20c5f71cd4429775c37c110300979f078aeca125 Mon Sep 17 00:00:00 2001 From: Liam Date: Mon, 1 Jul 2024 19:40:32 +0100 Subject: [PATCH] fix user leaving guild npe --- .../java/cc/fascinated/bat/common/ProfileHolder.java | 6 +++--- src/main/java/cc/fascinated/bat/model/BatUser.java | 12 +++++++++++- .../java/cc/fascinated/bat/service/GuildService.java | 8 +++++++- .../java/cc/fascinated/bat/service/UserService.java | 7 +++++++ 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/main/java/cc/fascinated/bat/common/ProfileHolder.java b/src/main/java/cc/fascinated/bat/common/ProfileHolder.java index 21a6e39..91eec2a 100644 --- a/src/main/java/cc/fascinated/bat/common/ProfileHolder.java +++ b/src/main/java/cc/fascinated/bat/common/ProfileHolder.java @@ -38,10 +38,10 @@ public abstract class ProfileHolder { Serializable profile = getProfiles().get(clazz.getSimpleName()); if (profile == null) { T newProfile = clazz.cast(clazz.getDeclaredConstructors()[0].newInstance()); - org.bson.Document profiles = document.get("profiles", new org.bson.Document()); - org.bson.Document profileDocument = profiles.isEmpty() ? new org.bson.Document() : profiles.get(clazz.getSimpleName(), new org.bson.Document()); + Document profiles = document.get("profiles", new org.bson.Document()); + Document profileDocument = (Document) profiles.get(clazz.getSimpleName()); - newProfile.load(profileDocument, BatApplication.GSON); + newProfile.load(profileDocument == null ? new Document() : profileDocument, BatApplication.GSON); getProfiles().put(clazz.getSimpleName(), newProfile); return newProfile; } diff --git a/src/main/java/cc/fascinated/bat/model/BatUser.java b/src/main/java/cc/fascinated/bat/model/BatUser.java index 11bcfb9..5f709b2 100644 --- a/src/main/java/cc/fascinated/bat/model/BatUser.java +++ b/src/main/java/cc/fascinated/bat/model/BatUser.java @@ -43,6 +43,11 @@ public class BatUser extends ProfileHolder { @Id private final String id; + /** + * The global name of the user + */ + private String globalName; + /** * The time this user was created */ @@ -53,13 +58,18 @@ public class BatUser extends ProfileHolder { this.document = document; boolean newAccount = this.document.isEmpty(); this.createdAt = newAccount ? new Date() : document.getDate("createdAt"); + + User user = DiscordService.JDA.getUserById(id); + if (user != null) { + this.globalName = user.getGlobalName(); + } } /** * The name of the user */ public String getName() { - return getDiscordUser().getEffectiveName(); + return this.getGlobalName(); } /** diff --git a/src/main/java/cc/fascinated/bat/service/GuildService.java b/src/main/java/cc/fascinated/bat/service/GuildService.java index 205cf8b..cacdab8 100644 --- a/src/main/java/cc/fascinated/bat/service/GuildService.java +++ b/src/main/java/cc/fascinated/bat/service/GuildService.java @@ -50,6 +50,12 @@ public class GuildService extends ListenerAdapter implements EventListener { DiscordService.JDA.addEventListener(this); } + /** + * Validates the premium status of all guilds + *

+ * This method is scheduled to run every day at midnight + *

+ */ @Scheduled(cron = "0 0 0 * * *") private void validatePremiumStatus() { for (BatGuild guild : guilds.values()) { @@ -83,7 +89,7 @@ public class GuildService extends ListenerAdapter implements EventListener { if (document != null) { BatGuild guild = new BatGuild(id, document); guilds.put(id, guild); - log.info("Loaded guild \"{}\" in {}ms", guild.getName(),System.currentTimeMillis() - before); + log.info("Loaded guild \"{}\" in {}ms", guild.getName(), System.currentTimeMillis() - before); return guild; } // New guild diff --git a/src/main/java/cc/fascinated/bat/service/UserService.java b/src/main/java/cc/fascinated/bat/service/UserService.java index 7fa3720..2c400a2 100644 --- a/src/main/java/cc/fascinated/bat/service/UserService.java +++ b/src/main/java/cc/fascinated/bat/service/UserService.java @@ -7,6 +7,7 @@ import com.mongodb.client.model.Filters; import lombok.Getter; import lombok.NonNull; import lombok.extern.log4j.Log4j2; +import net.dv8tion.jda.api.events.user.update.UserUpdateGlobalNameEvent; import org.bson.Document; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.DependsOn; @@ -81,4 +82,10 @@ public class UserService implements EventListener { } log.info("Saved all users."); } + + @Override + public void onUserUpdateGlobalName(@NonNull BatUser user, String oldName, String newName, @NonNull UserUpdateGlobalNameEvent event) { + log.info("User \"{}\" changed their name from \"{}\" to \"{}\"", user.getName(), oldName, newName); + user.setGlobalName(newName); + } }