2019-06-08 21:52:30 +02:00
package moe.kageru.kagebot
2019-11-11 19:09:58 +01:00
import arrow.core.extensions.list.foldable.find
2019-06-15 12:27:20 +02:00
import moe.kageru.kagebot.Util.checked
2019-07-13 15:39:50 +02:00
import moe.kageru.kagebot.config.Config
2019-07-13 15:32:23 +02:00
import moe.kageru.kagebot.config.ConfigParser
2019-07-23 21:50:55 +02:00
import moe.kageru.kagebot.cron.CronD
2019-07-23 23:31:23 +02:00
import moe.kageru.kagebot.persistence.Dao
2019-06-08 21:52:30 +02:00
import org.javacord.api.DiscordApiBuilder
import org.javacord.api.event.message.MessageCreateEvent
2019-06-12 23:43:36 +02:00
import java.io.File
2019-07-07 10:54:20 +02:00
import kotlin.system.exitProcess
2019-06-08 21:52:30 +02:00
2019-06-15 12:55:47 +02:00
fun main ( ) {
2019-11-14 15:10:30 +01:00
Kagebot . init ( )
2019-06-15 12:55:47 +02:00
}
object Kagebot {
2019-11-14 15:10:30 +01:00
fun MessageCreateEvent . process ( ) {
if ( messageAuthor . isBotUser ) {
handleOwn ( )
return
2019-09-17 23:22:22 +02:00
}
2019-11-14 15:10:30 +01:00
Config . commands
. find { it . matches ( readableMessageContent ) && it . isAllowed ( this ) }
. map { it . execute ( this ) }
}
2019-09-17 23:22:22 +02:00
2019-11-14 15:10:30 +01:00
private fun MessageCreateEvent . handleOwn ( ) {
if ( messageAuthor . isYourself ) {
val loggedMessage = readableMessageContent . ifBlank { " [embed] " }
Log . info ( " <Self> $loggedMessage " )
2019-06-15 12:55:47 +02:00
}
2019-11-14 15:10:30 +01:00
}
2019-06-12 23:43:36 +02:00
2019-11-14 15:10:30 +01:00
fun init ( ) {
val secret = File ( " secret " ) . readText ( ) . trim ( )
2020-10-30 10:57:48 +01:00
val api = DiscordApiBuilder ( ) . setToken ( secret ) . setAllIntents ( ) . login ( ) . join ( )
2019-11-14 15:10:30 +01:00
Globals . api = api
ConfigParser . initialLoad ( ConfigParser . DEFAULT _CONFIG _PATH ) . mapLeft { e ->
2020-07-22 13:47:30 +02:00
println ( " Config parsing error: \n $e , \n ${e.message} , \n ${e.stackTrace.joinToString("\n")} " )
println ( " Caused by: ${e.cause} \n ${e.cause?.stackTrace?.joinToString("\n")} " )
2019-11-14 15:10:30 +01:00
exitProcess ( 1 )
2019-06-08 21:52:30 +02:00
}
2019-11-14 15:10:30 +01:00
Runtime . getRuntime ( ) . addShutdownHook ( Thread {
Log . info ( " Bot has been interrupted. Shutting down. " )
Dao . setCommandCounter ( Globals . commandCounter . get ( ) )
Dao . close ( )
api . disconnect ( )
} )
Log . info ( " kagebot Mk II running " )
api . addMessageCreateListener { checked { it . process ( ) } }
Config . features . eventFeatures ( ) . forEach { it . register ( api ) }
CronD . startAll ( )
}
2019-06-12 23:43:36 +02:00
}