package nl.voidcorp.dbot import com.jagrosh.jdautilities.command.Command import com.jagrosh.jdautilities.command.CommandClientBuilder import com.sedmelluq.discord.lavaplayer.jdaudp.NativeAudioSendFactory import com.sedmelluq.discord.lavaplayer.player.DefaultAudioPlayerManager import com.sedmelluq.discord.lavaplayer.source.soundcloud.SoundCloudAudioSourceManager import com.sedmelluq.discord.lavaplayer.source.youtube.YoutubeAudioSourceManager 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.JDA import net.dv8tion.jda.core.JDABuilder import net.dv8tion.jda.core.MessageBuilder import net.dv8tion.jda.core.entities.Game import net.dv8tion.jda.webhook.WebhookClient import net.dv8tion.jda.webhook.WebhookClientBuilder import nl.voidcorp.dbot.commands.helloCommand import nl.voidcorp.dbot.commands.initMusic import nl.voidcorp.dbot.commands.pingCommand import nl.voidcorp.dbot.storage.GitlabWebhook import org.slf4j.LoggerFactory import java.io.File import java.io.FileReader val playerManager = DefaultAudioPlayerManager() val cb = CommandClientBuilder() val log = LoggerFactory.getLogger("UnityBot") val commands = mutableListOf() @Suppress("JoinDeclarationAndAssignment") fun main(args: Array) { playerManager.registerSourceManager(YoutubeAudioSourceManager(true)) playerManager.registerSourceManager(SoundCloudAudioSourceManager(true)) 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") } cb.setOwnerId("168743656738521088") cb.setPrefix("!") cb.setAlternativePrefix("+") commands.addAll(helloCommand, pingCommand) cb.setGame(Game.watching("fraud and \uD83C\uDFB5")) val replies = listOf("Hello %%", "Why hello there %%!", "Hello there %%", "General %%. You are a bold one", "A wild %% appeared!") cb.setHelpConsumer { event -> val greeting = replies.random().replace("%%", event.member.effectiveName) val mb = MessageBuilder("$greeting\n").append { var st = "" for (c in commands) { st += "`${c.name}`: ${c.help}${if (c.aliases.isNotEmpty()) " (alias: `${c.aliases.first()}`)" else ""}\n" } st } event.reply(mb.build()) } initMusic() cb.addCommands(*commands.toTypedArray()) val client = cb.build() bot = JDABuilder(args[0]).addEventListener(client).addEventListener(nl.voidcorp.dbot.Events).setAudioSendFactory(NativeAudioSendFactory()).build() } lateinit var bot: JDA