2019-06-08 21:14:57 +02:00
package moe.kageru.kagebot
2019-07-13 15:39:50 +02:00
import moe.kageru.kagebot.config.Config
2019-06-08 21:14:57 +02:00
import org.javacord.api.entity.message.MessageAuthor
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-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-06-09 18:41:51 +02:00
fun getEmbedBuilder ( ) : EmbedBuilder {
val builder = EmbedBuilder ( )
2019-07-13 15:39:50 +02:00
Config . server . icon . ifPresent { builder . setThumbnail ( it ) }
return builder . setColor ( Config . systemConfig . color ) . setTimestampToNow ( )
2019-06-12 23:43:36 +02:00
}
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 {
if ( contents . size % 2 == 1 ) {
throw IllegalStateException ( " Embed must have even number of content strings (title/content pairs) " )
}
2019-06-12 23:43:36 +02:00
val builder = getEmbedBuilder ( )
2019-07-12 14:08:22 +02:00
contents . zip ( 1. . contents . size ) . filter { it . second % 2 == 0 }
for ( ( heading , content ) in contents . withIndex ( ) . filter { it . index % 2 == 0 }
zip contents . withIndex ( ) . filter { it . index % 2 == 1 } ) {
builder . addField ( heading . value , content . value )
2019-06-12 23:43:36 +02:00
}
return builder
2019-06-09 18:41:51 +02:00
}
2019-07-12 14:08:22 +02:00
}