2019-06-08 21:14:57 +02:00
package moe.kageru.kagebot
2019-08-05 21:38:41 +02:00
import moe.kageru.kagebot.Util.failed
2019-07-13 15:39:50 +02:00
import moe.kageru.kagebot.config.Config
2019-08-05 21:39:00 +02:00
import moe.kageru.kagebot.Util.toPairs
2019-10-06 16:14:01 +02:00
import moe.kageru.kagebot.config.SystemSpec
2019-07-14 16:35:20 +02:00
import org.javacord.api.entity.message.Message
2019-06-08 21:14:57 +02:00
import org.javacord.api.entity.message.MessageAuthor
2019-07-17 22:04:06 +02:00
import org.javacord.api.entity.message.Messageable
2019-06-09 18:41:51 +02:00
import org.javacord.api.entity.message.embed.EmbedBuilder
2019-06-12 23:43:36 +02:00
import org.javacord.api.entity.user.User
2019-07-14 16:35:20 +02:00
import java.util.concurrent.CompletableFuture
2019-06-08 21:14:57 +02:00
object MessageUtil {
fun mention ( user : MessageAuthor ) : String {
return " <@ ${user.id} > "
}
2019-06-09 18:41:51 +02:00
2019-06-12 23:43:36 +02:00
fun mention ( user : User ) : String {
return " <@ ${user.id} > "
}
2019-07-17 22:40:44 +02:00
fun withEmbed ( op : EmbedBuilder . ( ) -> Unit ) : EmbedBuilder {
2019-06-09 18:41:51 +02:00
val builder = EmbedBuilder ( )
2019-07-13 15:39:50 +02:00
Config . server . icon . ifPresent { builder . setThumbnail ( it ) }
2019-10-06 16:14:01 +02:00
builder . setColor ( SystemSpec . color )
2019-07-17 22:40:44 +02:00
builder . op ( )
return builder
2019-06-12 23:43:36 +02:00
}
2019-07-17 22:04:06 +02:00
fun Messageable . sendEmbed ( op : EmbedBuilder . ( ) -> Unit ) {
2019-07-17 22:40:44 +02:00
val embed = withEmbed {
setTimestampToNow ( )
op ( )
}
2019-08-05 21:38:41 +02:00
val sent = sendMessage ( embed )
2019-10-06 16:14:01 +02:00
// for logging
sent . failed ( )
2019-07-17 22:04:06 +02:00
}
2019-07-14 16:35:20 +02:00
/ * *
* Send and embed and add the current time to it .
2019-07-17 22:40:44 +02:00
* The time is not set in [ withEmbed ] because of https : //git.kageru.moe/kageru/discord-kagebot/issues/13.
2019-07-14 16:35:20 +02:00
* /
2019-07-17 22:04:06 +02:00
fun sendEmbed ( target : Messageable , embed : EmbedBuilder ) : CompletableFuture < Message > {
2019-07-14 16:35:20 +02:00
return target . sendMessage ( embed . setTimestampToNow ( ) )
}
/ * *
2019-07-12 14:08:22 +02:00
* The reason we use a list here ( rather than a map ) is that maps would not retain the order specified in the config .
* I tried LinkedHashMaps , but those don ’ t seem to work either .
* /
fun listToEmbed ( contents : List < String > ) : EmbedBuilder {
2019-10-06 16:14:01 +02:00
check ( contents . size % 2 != 1 ) { " Embed must have even number of content strings (title/content pairs) " }
2019-07-17 22:40:44 +02:00
return withEmbed {
2019-08-05 21:39:00 +02:00
contents . toPairs ( ) . forEach { ( heading , content ) ->
2019-07-17 22:40:44 +02:00
addField ( heading , content )
}
2019-06-12 23:43:36 +02:00
}
2019-06-09 18:41:51 +02:00
}
2019-07-12 14:08:22 +02:00
}