package nl.voidcorp.dbot import io.javalin.Javalin import io.javalin.json.FromJsonMapper import io.javalin.json.JavalinJson import io.javalin.json.ToJsonMapper import net.dv8tion.jda.core.EmbedBuilder import net.dv8tion.jda.core.JDABuilder import net.dv8tion.jda.core.OnlineStatus import net.dv8tion.jda.core.entities.Game import net.dv8tion.jda.webhook.WebhookClient import net.dv8tion.jda.webhook.WebhookClientBuilder import nl.voidcorp.dbot.storage.GitlabWebhook import org.slf4j.LoggerFactory import java.io.File import java.io.FileReader fun main(args: Array) { val log = LoggerFactory.getLogger("UnityBot") JavalinJson.apply { toJsonMapper = object : ToJsonMapper { override fun map(obj: Any): String = gson.toJson(obj) } fromJsonMapper = object : FromJsonMapper { override fun map(json: String, targetClass: Class): T = gson.fromJson(json, targetClass) } } if (!File(".hooks").exists()) { log.error("The .hooks file does not exist!") log.error("Exiting") System.exit(1) } val hooks = mutableListOf() FileReader(".hooks").forEachLine { val wh = WebhookClientBuilder(it).build() hooks += wh } log.info(hooks.toString()) val app = Javalin.create().requestLogger { ctx, timeMs -> if (ctx.res.status >= 400) { log.error("${ctx.method()} ${ctx.path()} -> ${ctx.status()} (${timeMs}ms)") } else { log.info("${ctx.method()} ${ctx.path()} -> ${ctx.status()} (${timeMs}ms)") } }.disableStartupBanner().start(4466) app.post("/gitlab.json") { ctx -> val bod = ctx.validatedBody() if (bod.value != null) { bod.value!!.apply { val embed = EmbedBuilder() embed.setTitle(project.name, project.web_url) val builder = embed.descriptionBuilder var url = "" commits.forEach { builder.append("${it.message} (${it.timestamp})") url = it.url } embed.setAuthor("$user_name ($user_username)", url, user_avatar) hooks.forEach { it.send(embed.build()) } } } ctx.status(200).result("OK") } val bot = JDABuilder(args[0]).setStatus(OnlineStatus.ONLINE).setGame(Game.watching("fraud")).addEventListener(Events).build() }