fix user leaving guild npe

This commit is contained in:
Lee 2024-07-01 19:40:32 +01:00
parent a6e490dbe5
commit 20c5f71cd4
4 changed files with 28 additions and 5 deletions

@ -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;
}

@ -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();
}
/**

@ -50,6 +50,12 @@ public class GuildService extends ListenerAdapter implements EventListener {
DiscordService.JDA.addEventListener(this);
}
/**
* Validates the premium status of all guilds
* <p>
* This method is scheduled to run every day at midnight
* </p>
*/
@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

@ -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);
}
}