2019-06-08 21:52:30 +02:00
package moe.kageru.kagebot
import moe.kageru.kagebot.Log.log
2019-06-15 12:27:20 +02:00
import moe.kageru.kagebot.Util.checked
2019-06-12 23:43:36 +02:00
import moe.kageru.kagebot.config.Config
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-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 ) {
return
}
for ( command in Globals . config . commands ) {
if ( command . matches ( event . messageContent ) ) {
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 ) {
Globals . config . features . welcome !! . let { welcome ->
val message = event . user . sendMessage ( welcome . embed )
// If the user disabled direct messages, try the fallback (if defined)
if ( ! Util . wasSuccessful ( message ) &&
welcome . fallbackChannel != null &&
welcome . fallbackMessage != null
) {
welcome . fallbackChannel . sendMessage (
welcome . fallbackMessage . replace (
" @@ " ,
MessageUtil . mention ( event . user )
2019-06-12 23:43:36 +02:00
)
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-06-15 12:55:47 +02:00
private fun getSecret ( ) = File ( " secret " ) . readText ( ) . replace ( " \n " , " " )
fun init ( ) {
2019-06-12 23:43:36 +02:00
Globals . api = DiscordApiBuilder ( ) . setToken ( getSecret ( ) ) . login ( ) . join ( )
try {
Globals . config = Config ( RawConfig . read ( ) )
} 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-06-12 23:43:36 +02:00
System . exit ( 1 )
}
2019-06-08 21:52:30 +02:00
Runtime . getRuntime ( ) . addShutdownHook ( Thread {
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
} )
log . info ( " kagebot Mk II running " )
2019-06-15 12:27:20 +02:00
Globals . api . addMessageCreateListener { checked { processMessage ( it ) } }
2019-06-12 23:43:36 +02:00
Globals . config . features . welcome ?. let { welcome ->
if ( welcome . enabled ) {
2019-06-15 12:27:20 +02:00
Globals . api . addServerMemberJoinListener {
checked { welcomeUser ( it ) }
}
2019-06-12 23:43:36 +02:00
}
}
2019-06-15 14:15:34 +02:00
Globals . config . features . debug ?. let { debug ->
if ( debug . enabled ) {
Globals . api . addMessageCreateListener {
checked { debug . handle ( it ) }
}
}
}
2019-06-08 21:52:30 +02:00
}
2019-06-12 23:43:36 +02:00
}