72 lines
2.4 KiB
Kotlin
72 lines
2.4 KiB
Kotlin
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<String>) {
|
|
val log = LoggerFactory.getLogger("UnityBot")
|
|
|
|
JavalinJson.apply {
|
|
toJsonMapper = object : ToJsonMapper {
|
|
override fun map(obj: Any): String = gson.toJson(obj)
|
|
}
|
|
fromJsonMapper = object : FromJsonMapper {
|
|
override fun <T> map(json: String, targetClass: Class<T>): 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<WebhookClient>()
|
|
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<GitlabWebhook>()
|
|
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()
|
|
} |