2019-06-08 21:52:30 +02:00
package moe.kageru.kagebot
2019-06-15 12:27:20 +02:00
import moe.kageru.kagebot.Util.checked
2019-07-17 23:17:16 +02:00
import moe.kageru.kagebot.Util.failed
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-06-12 23:43:36 +02:00
import moe.kageru.kagebot.config.RawConfig
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 org.javacord.api.event.server.member.ServerMemberJoinEvent
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 ( ) {
Kagebot . init ( )
}
object Kagebot {
fun processMessage ( event : MessageCreateEvent ) {
if ( event . messageAuthor . isBotUser ) {
2019-06-15 14:35:17 +02:00
if ( event . messageAuthor . isYourself ) {
2019-07-17 23:17:16 +02:00
val loggedMessage =
if ( event . readableMessageContent . isBlank ( ) ) " [embed] " else event . readableMessageContent
Log . info ( " <Self> $loggedMessage " )
2019-06-15 14:35:17 +02:00
}
2019-06-15 12:55:47 +02:00
return
}
2019-07-13 15:39:50 +02:00
for ( command in Config . commands ) {
2019-07-11 23:51:03 +02:00
if ( command . matches ( event . readableMessageContent ) ) {
2019-06-15 12:55:47 +02:00
command . execute ( event )
break
2019-06-08 21:52:30 +02:00
}
}
2019-06-15 12:55:47 +02:00
}
2019-06-12 23:43:36 +02:00
2019-06-15 12:55:47 +02:00
fun welcomeUser ( event : ServerMemberJoinEvent ) {
2019-07-17 23:17:16 +02:00
Config . features . welcome !! . run {
val message = event . user . sendMessage ( embed )
2019-06-15 12:55:47 +02:00
// If the user disabled direct messages, try the fallback (if defined)
2019-07-17 23:17:16 +02:00
if ( message . failed ( ) && hasFallback ( ) ) {
fallbackChannel !! . sendMessage (
fallbackMessage !! . replace ( " @@ " , MessageUtil . mention ( event . user ) )
2019-06-15 12:55:47 +02:00
)
2019-06-12 23:43:36 +02:00
}
}
2019-06-08 21:52:30 +02:00
}
2019-07-17 23:17:16 +02:00
private fun getSecret ( ) = File ( " secret " ) . readText ( ) . trim ( )
2019-06-15 12:55:47 +02:00
fun init ( ) {
2019-06-12 23:43:36 +02:00
Globals . api = DiscordApiBuilder ( ) . setToken ( getSecret ( ) ) . login ( ) . join ( )
try {
2019-07-13 15:32:23 +02:00
ConfigParser . initialLoad ( RawConfig . read ( ) )
2019-06-12 23:43:36 +02:00
} catch ( e : IllegalArgumentException ) {
2019-06-15 12:27:20 +02:00
println ( " Config error: \n $e , \n ${e.message} , \n ${e.stackTrace.joinToString("\n")} " )
2019-07-07 10:54:20 +02:00
exitProcess ( 1 )
2019-06-12 23:43:36 +02:00
}
2019-06-08 21:52:30 +02:00
Runtime . getRuntime ( ) . addShutdownHook ( Thread {
2019-07-17 21:16:17 +02:00
Log . info ( " Bot has been interrupted. Shutting down. " )
2019-06-12 23:43:36 +02:00
Globals . api . disconnect ( )
2019-06-08 21:52:30 +02:00
} )
2019-07-17 21:16:17 +02:00
Log . info ( " kagebot Mk II running " )
2019-06-15 12:27:20 +02:00
Globals . api . addMessageCreateListener { checked { processMessage ( it ) } }
2019-07-13 15:39:50 +02:00
Config . features . welcome ?. let {
2019-07-11 21:05:35 +02:00
Globals . api . addServerMemberJoinListener {
checked { welcomeUser ( it ) }
2019-07-07 11:08:49 +02:00
}
}
2019-06-08 21:52:30 +02:00
}
2019-06-12 23:43:36 +02:00
}