2019-06-08 21:52:30 +02:00
package moe.kageru.kagebot
import moe.kageru.kagebot.Log.log
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
class Kagebot {
companion object {
fun processMessage ( event : MessageCreateEvent ) {
2019-06-08 23:51:29 +02:00
if ( event . messageAuthor . isYourself ) {
2019-06-08 23:50:05 +02:00
return
}
2019-06-12 23:43:36 +02:00
for ( command in Globals . config . commands ) {
2019-06-08 21:52:30 +02:00
if ( command . matches ( event . messageContent ) ) {
2019-06-08 23:50:05 +02:00
command . execute ( event )
2019-06-08 21:52:30 +02:00
break
}
}
}
2019-06-12 23:43:36 +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)
2019-06-13 00:19:02 +02:00
if ( ! Util . wasSuccessful ( message )
2019-06-12 23:43:36 +02:00
&& welcome . fallbackChannel != null
&& welcome . fallbackMessage != null
) {
welcome . fallbackChannel . sendMessage (
welcome . fallbackMessage . replace (
" @@ " ,
MessageUtil . mention ( event . user )
)
)
}
}
}
2019-06-08 21:52:30 +02:00
}
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 ) {
println ( " Config error: \n $e , \n ${e.message} , \n ${e.stackTrace} " )
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-12 23:43:36 +02:00
Globals . api . addMessageCreateListener { processMessage ( it ) }
Globals . config . features . welcome ?. let { welcome ->
if ( welcome . enabled ) {
Globals . api . addServerMemberJoinListener { welcomeUser ( it ) }
}
}
2019-06-08 21:52:30 +02:00
}
2019-06-12 23:43:36 +02:00
private fun getSecret ( ) = File ( " secret " ) . readText ( ) . replace ( " \n " , " " )
}