package nl.voidcorp.yeetbot import com.github.salomonbrys.kotson.fromJson import net.dv8tion.jda.core.AccountType import net.dv8tion.jda.core.JDABuilder import net.dv8tion.jda.core.OnlineStatus import net.dv8tion.jda.core.entities.Game import org.apache.logging.log4j.LogManager import java.io.File import java.io.FileReader import java.io.FileWriter import java.util.* import kotlin.concurrent.fixedRateTimer import kotlin.concurrent.schedule lateinit var config: Config val logger = LogManager.getLogger("YeetBot")!! fun main(args: Array) { config = if (File("conf.json").exists()) { gson.fromJson(FileReader("conf.json")) } else { Config() } val token = if (args.isEmpty()) { throw IllegalArgumentException("missing the token string my dude!") } else { args[0] } val jda = JDABuilder(AccountType.BOT).setToken(token).build() jda.addEventListener(MessageListener()) jda.presence.setPresence(OnlineStatus.ONLINE, Game.playing("a banjo")) fixedRateTimer("ConfigThread", period = 1000 * 60 * 5, initialDelay = 1000 * 10) { logger.info("Writing config!") try { with(FileWriter("conf.json")) { gson.toJson(config, this) close() } } catch (e: Exception) { logger.fatal("Could not write config!", e) } } fixedRateTimer("StopTimer", period = 1000) { if (File("new").exists()) { File("new").delete() var tick = false val t = fixedRateTimer("ColorTick", period = 1000) { if (tick) { jda.presence.setPresence(OnlineStatus.DO_NOT_DISTURB, Game.watching("a restart timer!")) } else { jda.presence.setPresence(OnlineStatus.IDLE, Game.watching("a restart timer!")) } tick = !tick } Timer().schedule(1000 * 30) { t.cancel() jda.presence.setPresence(OnlineStatus.DO_NOT_DISTURB, Game.watching("myself restart!")) logger.info("Writing config!") try { with(FileWriter("conf.json")) { gson.toJson(config, this) close() } } catch (e: Exception) { logger.fatal("Could not write config!", e) } Timer().schedule(1000) { Runtime.getRuntime().exec("sudo service jservice-yeetbot restart") } } } } org.eclipse.jetty.util.log.Log.setLog(CustomLogging()) server() }