package cc.fascinated.bat.service; import cc.fascinated.bat.model.guild.BatGuild; import cc.fascinated.bat.repository.GuildRepository; import lombok.NonNull; import lombok.extern.log4j.Log4j2; import net.dv8tion.jda.api.events.guild.GuildJoinEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.DependsOn; import org.springframework.stereotype.Service; import java.util.Optional; /** * @author Fascinated (fascinated7) */ @Service @Log4j2 @DependsOn("discordService") public class GuildService extends ListenerAdapter { /** * The guild repository to use */ private final GuildRepository guildRepository; @Autowired public GuildService(@NonNull GuildRepository guildRepository) { this.guildRepository = guildRepository; DiscordService.JDA.addEventListener(this); } /** * Gets a guild by its ID * * @param id The ID of the guild * @return The guild */ public BatGuild getGuild(@NonNull String id) { long start = System.currentTimeMillis(); Optional optionalGuild = guildRepository.findById(id); if (optionalGuild.isPresent()) { return optionalGuild.get(); } BatGuild guild = guildRepository.save(new BatGuild(id)); log.info("Created guild \"{}\" in {}ms", id, System.currentTimeMillis() - start); return guild; } /** * Saves a guild * * @param guild The guild to save */ public void saveGuild(@NonNull BatGuild guild) { guildRepository.save(guild); } @Override public final void onGuildJoin(GuildJoinEvent event) { log.info("Joined guild \"{}\"", event.getGuild().getId()); getGuild(event.getGuild().getId()); // Ensure the guild is in the database } }