2018-10-14 14:16:14 +02:00
package nl.voidcorp.dbot.commands
2018-10-29 15:28:58 +01:00
import net.dv8tion.jda.core.EmbedBuilder
2018-10-14 14:16:14 +02:00
import net.dv8tion.jda.core.MessageBuilder
2018-10-29 15:28:58 +01:00
import net.dv8tion.jda.core.entities.MessageEmbed
import nl.voidcorp.dbot.catMap
import nl.voidcorp.dbot.commands
import nl.voidcorp.dbot.emptyOr
import nl.voidcorp.dbot.random
import java.time.LocalDateTime
2018-10-15 22:25:51 +02:00
import java.time.temporal.ChronoUnit
2018-10-30 20:38:44 +01:00
import kotlin.random.Random
2018-10-14 14:16:14 +02:00
2018-10-15 22:25:51 +02:00
val helloCommand = UnityCommand ( " hello " , " Say hello to Andy! " , aliases = * arrayOf ( ) ) {
2018-10-30 20:38:44 +01:00
val i = Random . nextInt ( 10 )
if ( i > 8 ) {
it . reply ( " Can you speak up or I'll throw you a microphone " )
} else {
it . reply ( MessageBuilder ( " Hello, " ) . append ( it . author ) . append ( " ! " ) . build ( ) )
}
2018-10-15 22:25:51 +02:00
}
2018-10-30 20:59:07 +01:00
val pingCommand =
UnityCommand ( " ping " , help = " Check the bot's ping " , aliases = * arrayOf ( " pong " ) , cooldown = 10 ) { event ->
2018-10-15 22:25:51 +02:00
event . reply ( " Ping: ... " ) { m ->
val ping = event . message . creationTime . until ( m . creationTime , ChronoUnit . MILLIS )
2018-10-20 16:43:21 +02:00
m . editMessage ( " Ping: " + ping + " ms | Websocket: " + event . jda . ping + " ms " ) . queue ( )
2018-10-15 22:25:51 +02:00
}
}
2018-10-30 20:38:44 +01:00
val replies =
listOf ( " Hello %% " , " Why hello there %%! " , " Hello there %% " , " General %%. You are a bold one " , " A wild %% appeared! " )
val helpCommand =
UnityCommand ( " help " , " Guess what? " /*, category = UnityCategory("Yeet", channels = listOf())*/ ) { event ->
val greeting = replies . random ( ) . replace ( " %% " , event . member . effectiveName )
val eb = EmbedBuilder ( )
when {
event . args . isEmpty ( ) -> {
val prefix = GSM . getSettings ( event . guild ) . primaryPrefix
2018-10-29 15:28:58 +01:00
2018-10-30 20:38:44 +01:00
eb . setTitle ( greeting )
. appendDescription ( " My name is ${event.selfMember.effectiveName} , and I am definitely the best Discord bot around! \n \n Use ` ${prefix} help command` for a chance that I have more info about a command! " )
. setColor ( event . selfMember . color )
. setFooter ( " Requested by ${event.member.effectiveName} " , event . author . effectiveAvatarUrl )
. setTimestamp ( LocalDateTime . now ( ) )
val m = commands . catMap ( ) . filter { it . key != " hidden " }
for ( e in m . entries ) {
val f = MessageEmbed . Field (
e . key ,
e . value . asSequence ( ) . filter { it . name != " help " } . joinToString (
separator = " \n " ,
postfix = " \n "
) { " ` $prefix ${it.name} ` " } ,
true
)
eb . addField ( f )
}
eb . setThumbnail ( event . selfUser . effectiveAvatarUrl )
2018-10-29 15:28:58 +01:00
}
2018-10-30 20:38:44 +01:00
event . args == " help " -> {
eb . setTitle ( " Ha Ha " )
2018-10-29 15:28:58 +01:00
. appendDescription ( " Ha ha, very funny ${event.member.effectiveName} " )
2018-10-30 20:38:44 +01:00
. setColor ( event . selfMember . color )
. setFooter ( " Requested by ${event.member.effectiveName} " , event . author . effectiveAvatarUrl )
. setTimestamp ( LocalDateTime . now ( ) )
}
commands . any { it . name == event . args } -> {
val cmd = commands . first { it . name == event . args }
eb . setTitle ( " **! ${cmd.name} ** " )
2018-10-29 15:28:58 +01:00
. appendDescription ( cmd . help )
2018-10-30 20:38:44 +01:00
. setColor ( event . selfMember . color )
. setFooter ( " Requested by ${event.member.effectiveName} " , event . author . effectiveAvatarUrl )
. setTimestamp ( LocalDateTime . now ( ) )
if ( cmd . aliases . isNotEmpty ( ) ) eb . addField ( " Aliases " , cmd . aliases . joinToString { " ` $it ` " } , true )
eb . addField ( " Usage " , " `! ${cmd.howTo.emptyOr(cmd.name)} ` " , true )
val cat = cmd . category
2018-10-29 15:28:58 +01:00
if ( cat . roles . isNotEmpty ( ) )
eb . addField ( " Roles " , cat . roles . joinToString { " ` $it ` " } , true )
2018-10-30 20:38:44 +01:00
}
2018-10-29 15:28:58 +01:00
2018-10-30 20:38:44 +01:00
else -> {
eb . setTitle ( greeting )
2018-10-29 15:28:58 +01:00
. appendDescription ( " I honestly have no idea what the command ` ${event.args} ` does... " )
2018-10-30 20:38:44 +01:00
. setColor ( event . selfMember . color )
. setFooter ( " Requested by ${event.member.effectiveName} " , event . author . effectiveAvatarUrl )
. setTimestamp ( LocalDateTime . now ( ) )
}
2018-10-29 15:28:58 +01:00
}
2018-10-30 20:38:44 +01:00
event . reply ( eb . build ( ) )
2018-10-29 15:28:58 +01:00
}
2018-10-14 14:16:14 +02:00