forked from Fascinated/Bat
67 lines
1.7 KiB
Java
67 lines
1.7 KiB
Java
|
package cc.fascinated.bat.model.guild;
|
||
|
|
||
|
import cc.fascinated.bat.common.Profile;
|
||
|
import cc.fascinated.bat.service.DiscordService;
|
||
|
import lombok.Getter;
|
||
|
import lombok.NonNull;
|
||
|
import lombok.RequiredArgsConstructor;
|
||
|
import lombok.Setter;
|
||
|
import net.dv8tion.jda.api.entities.Guild;
|
||
|
import org.springframework.data.annotation.Id;
|
||
|
import org.springframework.data.mongodb.core.mapping.Document;
|
||
|
|
||
|
import java.util.HashMap;
|
||
|
import java.util.Map;
|
||
|
|
||
|
/**
|
||
|
* @author Fascinated (fascinated7)
|
||
|
*/
|
||
|
@RequiredArgsConstructor
|
||
|
@Getter @Setter
|
||
|
@Document(collection = "guilds")
|
||
|
public class BatGuild {
|
||
|
|
||
|
/**
|
||
|
* The ID of the guild
|
||
|
*/
|
||
|
@NonNull @Id private final String id;
|
||
|
|
||
|
/**
|
||
|
* The profiles for this guild
|
||
|
*/
|
||
|
private Map<String, Profile> profiles;
|
||
|
|
||
|
/**
|
||
|
* Gets the profile for the guild
|
||
|
*
|
||
|
* @param clazz The class of the profile
|
||
|
* @param <T> The type of the profile
|
||
|
* @return The profile
|
||
|
*/
|
||
|
public <T extends Profile> T getProfile(Class<?> clazz) {
|
||
|
if (profiles == null) {
|
||
|
profiles = new HashMap<>();
|
||
|
}
|
||
|
|
||
|
Profile profile = profiles.values().stream().filter(p -> p.getClass().equals(clazz)).findFirst().orElse(null);
|
||
|
if (profile == null) {
|
||
|
try {
|
||
|
profile = (Profile) clazz.newInstance();
|
||
|
profiles.put(profile.getProfileKey(), profile);
|
||
|
} catch (InstantiationException | IllegalAccessException e) {
|
||
|
e.printStackTrace();
|
||
|
}
|
||
|
}
|
||
|
return (T) profile;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Gets the guild as the JDA Guild
|
||
|
*
|
||
|
* @return the guild
|
||
|
*/
|
||
|
public Guild getDiscordGuild() {
|
||
|
return DiscordService.JDA.getGuildById(id);
|
||
|
}
|
||
|
}
|