use of net.robinfriedli.aiode.entities.xml.StartupTaskContribution in project aiode by robinfriedli.
the class SpringBootstrap method run.
@Override
public void run(String... args) {
Logger logger = LoggerFactory.getLogger(SpringBootstrap.class);
logger.info("Using java version " + System.getProperty("java.runtime.version"));
try {
Aiode aiode = Aiode.get();
CommandManager commandManager = aiode.getCommandManager();
HttpServerManager serverManager = aiode.getHttpServerManager();
JxpBackend jxpBackend = aiode.getJxpBackend();
CronJobService cronJobService = aiode.getCronJobService();
commandManager.initializeInterceptorChain();
serverManager.start();
// run startup tasks
InputStream startupTasksFile = getClass().getResourceAsStream("/xml-contributions/startupTasks.xml");
Context context = jxpBackend.createContext(startupTasksFile);
for (StartupTaskContribution element : context.getInstancesOf(StartupTaskContribution.class)) {
if (!aiode.isMainInstance() && element.getAttribute("mainInstanceOnly").getBool()) {
continue;
}
if (!element.getAttribute("runForEachShard").getBool()) {
element.instantiate().runTask(null);
}
}
cronJobService.scheduleAll();
Aiode.registerListeners();
logger.info("All starters done");
} catch (Throwable e) {
logger.error("Exception in starter. Application will terminate.", e);
System.exit(1);
}
}
use of net.robinfriedli.aiode.entities.xml.StartupTaskContribution in project aiode by robinfriedli.
the class StartupListener method onReady.
@Override
public void onReady(@NotNull ReadyEvent event) {
STARTUP_TASK_EXECUTOR.execute(() -> {
JDA jda = event.getJDA();
if (discordBotListAPI != null) {
try {
JDA.ShardInfo shardInfo = jda.getShardInfo();
discordBotListAPI.setStats(shardInfo.getShardId(), shardInfo.getShardTotal(), (int) jda.getGuildCache().size());
} catch (Exception e) {
logger.error("Exception setting discordBotListAPI stats", e);
}
}
CommandExecutionQueueManager executionQueueManager = aiode.getExecutionQueueManager();
GuildManager guildManager = aiode.getGuildManager();
StaticSessionProvider.consumeSession(session -> {
// setup current thread session and handle all guilds within one session instead of opening a new session for each
for (Guild guild : jda.getGuilds()) {
executionQueueManager.addGuild(guild);
guildManager.addGuild(guild);
}
});
for (StartupTaskContribution element : startupTaskContributions) {
if (element.getAttribute("runForEachShard").getBool()) {
try {
element.instantiate().runTask(jda);
} catch (Exception e) {
String msg = String.format("Startup task %s has thrown an exception for shard %s", element.getAttribute("implementation").getValue(), jda);
logger.error(msg, e);
}
}
}
});
}
Aggregations