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-07-14 16:35:20 +02:00
import org.javacord.api.entity.channel.TextChannel
import org.javacord.api.entity.message.Message
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-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-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 ) }
2019-07-14 16:35:20 +02:00
return builder . setColor ( Config . systemConfig . color )
2019-06-12 23:43:36 +02:00
}
2019-07-14 16:35:20 +02:00
/ * *
* Send and embed and add the current time to it .
* The time is not set in [ getEmbedBuilder ] because of https : //git.kageru.moe/kageru/discord-kagebot/issues/13.
* /
fun sendEmbed ( target : TextChannel , embed : EmbedBuilder ) : CompletableFuture < Message > {
return target . sendMessage ( embed . setTimestampToNow ( ) )
}
fun sendEmbed ( target : User , embed : EmbedBuilder ) : CompletableFuture < Message > {
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 {
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
}