use of de.kaktushose.levelbot.shop.ShopListener in project Levelbot by Kaktushose.
the class Levelbot method start.
public Levelbot start() throws LoginException, InterruptedException {
log.info("Bot is running at version {}", settingsService.getVersion(guildId));
embedCache.loadEmbedsToCache();
log.debug("Starting jda...");
String token = settingsService.getBotToken(guildId);
jda = JDABuilder.create(token, GatewayIntent.GUILD_MEMBERS, GatewayIntent.GUILD_VOICE_STATES, GatewayIntent.GUILD_MESSAGES, GatewayIntent.GUILD_MESSAGE_REACTIONS, GatewayIntent.GUILD_PRESENCES).disableCache(CacheFlag.EMOTE, CacheFlag.CLIENT_STATUS).enableCache(CacheFlag.ACTIVITY).setChunkingFilter(ChunkingFilter.ALL).setMemberCachePolicy(MemberCachePolicy.NONE).setActivity(Activity.playing("starting...")).setStatus(OnlineStatus.DO_NOT_DISTURB).build().awaitReady();
log.debug("Registering event listeners...");
jda.addEventListener(new JoinLeaveListener(this), new LevelListener(this), new VoiceTextLink(jda.getTextChannelById(839226183409467442L)), new ShopListener(this), new DailyRewardListener(this), new ContestEventListener(settingsService, eventService));
log.debug("Starting ReactionListener...");
ReactionListener.setAutoRemove(true);
ReactionListener.setAutoRemoveDelay(60, TimeUnit.SECONDS);
ReactionListener.startListening(jda);
log.debug("Starting jda-commands...");
jdaCommands = JDACommands.start(jda, Bootstrapper.class, "de.kaktushose.levelbot");
EmbedCache embeds = new EmbedCache("jdacEmbeds.json");
embeds.loadEmbedsToCache();
jdaCommands.getImplementationRegistry().setHelpMessageFactory(new JsonHelpMessageFactory(embeds));
jdaCommands.getImplementationRegistry().setErrorMessageFactory(new JsonErrorMessageFactory(embeds));
guild = jda.getGuildById(guildId);
botChannel = guild.getTextChannelById(settingsService.getBotChannelId(guildId));
logChannel = guild.getTextChannelById(settingsService.getLogChannelId(guildId));
// first start of bot, check for expired items immediately
shopService.checkForExpiredItems();
// get offset time until it's 0 am, also ensures that this task only runs once every 24 hours
long current = TimeUnit.HOURS.toMinutes(Calendar.getInstance().get(Calendar.HOUR_OF_DAY)) + Calendar.getInstance().get(Calendar.MINUTE);
long delay = TimeUnit.HOURS.toMinutes(24) - current;
taskScheduler.addRepetitiveTask(() -> {
log.info("Starting daily tasks!");
try {
log.info("Sending dm rank infos...");
dmRankInfo();
log.info("Checking for expired items...");
shopService.checkForExpiredItems();
log.info("Checking for new nitro boosters...");
boosterService.updateBoosterStatus(guild, botChannel, embedCache);
log.info("Checking for booster rewards...");
checkForNitroBoostersRewards();
log.info("Update user statistics...");
updateUserStatistics();
log.info("Done!");
} catch (Throwable t) {
log.error("An exception has occurred while executing daily tasks!", t);
}
}, delay, TimeUnit.HOURS.toMinutes(24), TimeUnit.MINUTES);
taskScheduler.addRepetitiveTask(() -> {
try {
updateStatistics();
} catch (Throwable t) {
log.error("An exception has occurred while updating statistics!", t);
}
}, 0, 4, TimeUnit.HOURS);
String version = settingsService.getVersion(guildId);
jda.getPresence().setStatus(OnlineStatus.ONLINE);
jda.getPresence().setActivity(Activity.playing(version));
getBotChannel().sendMessageEmbeds(embedCache.getEmbed("botStart").injectValue("version", version).toMessageEmbed()).queue();
httpServer.start();
return this;
}
Aggregations