discord-kagebot/src/main/kotlin/moe/kageru/kagebot/MessageUtil.kt

62 lines
2.0 KiB
Kotlin
Raw Normal View History

2019-06-08 21:14:57 +02:00
package moe.kageru.kagebot
import moe.kageru.kagebot.Util.failed
2019-07-13 15:39:50 +02:00
import moe.kageru.kagebot.config.Config
import moe.kageru.kagebot.Util.toPairs
import moe.kageru.kagebot.config.SystemSpec
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
import org.javacord.api.entity.user.User
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
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) }
builder.setColor(SystemSpec.color)
2019-07-17 22:40:44 +02:00
builder.op()
return builder
}
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()
}
val sent = sendMessage(embed)
// for logging
sent.failed()
2019-07-17 22:04:06 +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-17 22:04:06 +02:00
fun sendEmbed(target: Messageable, embed: EmbedBuilder): CompletableFuture<Message> {
return target.sendMessage(embed.setTimestampToNow())
}
/**
* 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 dont seem to work either.
*/
fun listToEmbed(contents: List<String>): EmbedBuilder {
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 {
contents.toPairs().forEach { (heading, content) ->
2019-07-17 22:40:44 +02:00
addField(heading, content)
}
}
2019-06-09 18:41:51 +02:00
}
}