kageru
d6492bae8f
The entire config parsing is now rewritten. This entirely removes toml4j in favor of Konf. It also removes all remaining RawConfig logic.
55 lines
1.9 KiB
Kotlin
55 lines
1.9 KiB
Kotlin
package moe.kageru.kagebot.features
|
|
|
|
import moe.kageru.kagebot.Log
|
|
import moe.kageru.kagebot.MessageUtil
|
|
import moe.kageru.kagebot.Util
|
|
import moe.kageru.kagebot.Util.checked
|
|
import moe.kageru.kagebot.Util.failed
|
|
import org.javacord.api.DiscordApi
|
|
import org.javacord.api.entity.channel.TextChannel
|
|
import org.javacord.api.entity.message.embed.EmbedBuilder
|
|
import org.javacord.api.event.message.MessageCreateEvent
|
|
import org.javacord.api.event.server.member.ServerMemberJoinEvent
|
|
|
|
class WelcomeFeature(
|
|
content: List<String>?,
|
|
fallbackChannel: String?,
|
|
private val fallbackMessage: String?
|
|
) : MessageFeature, EventFeature {
|
|
val embed: EmbedBuilder? by lazy { content?.let(MessageUtil::listToEmbed) }
|
|
|
|
override fun register(api: DiscordApi) {
|
|
api.addServerMemberJoinListener { event ->
|
|
checked { welcomeUser(event) }
|
|
}
|
|
}
|
|
|
|
fun welcomeUser(event: ServerMemberJoinEvent) {
|
|
Log.info("User ${event.user.discriminatedName} joined")
|
|
val message = event.user.sendMessage(embed)
|
|
// If the user disabled direct messages, try the fallback (if defined)
|
|
if (message.failed() && hasFallback()) {
|
|
fallbackChannel!!.sendMessage(
|
|
fallbackMessage!!.replace("@@", MessageUtil.mention(event.user))
|
|
)
|
|
}
|
|
}
|
|
|
|
override fun handle(message: MessageCreateEvent) {
|
|
embed?.let {
|
|
val sent = MessageUtil.sendEmbed(message.channel, it)
|
|
// invoke this for logging
|
|
sent.failed()
|
|
} ?: Log.info("Welcome command was triggered, but no welcome embed defined.")
|
|
}
|
|
|
|
private fun hasFallback(): Boolean = fallbackChannel != null && fallbackMessage != null
|
|
|
|
private val fallbackChannel: TextChannel? = fallbackChannel?.let {
|
|
requireNotNull(fallbackMessage) {
|
|
"[feature.welcome.fallbackMessage] must not be null if fallbackChannel is defined"
|
|
}
|
|
Util.findChannel(it)
|
|
}
|
|
}
|