Pull event handling into interface
This commit is contained in:
parent
b9f1c6e540
commit
39ceaffa6c
|
@ -1,13 +1,11 @@
|
|||
package moe.kageru.kagebot
|
||||
|
||||
import moe.kageru.kagebot.Util.checked
|
||||
import moe.kageru.kagebot.Util.failed
|
||||
import moe.kageru.kagebot.config.Config
|
||||
import moe.kageru.kagebot.config.ConfigParser
|
||||
import moe.kageru.kagebot.config.RawConfig
|
||||
import org.javacord.api.DiscordApiBuilder
|
||||
import org.javacord.api.event.message.MessageCreateEvent
|
||||
import org.javacord.api.event.server.member.ServerMemberJoinEvent
|
||||
import java.io.File
|
||||
import kotlin.system.exitProcess
|
||||
|
||||
|
@ -17,7 +15,7 @@ fun main() {
|
|||
|
||||
object Kagebot {
|
||||
fun MessageCreateEvent.process() {
|
||||
if (messageAuthor.isBotUser) {
|
||||
if (messageAuthor.isBotUser) {
|
||||
if (messageAuthor.isYourself) {
|
||||
val loggedMessage =
|
||||
if (readableMessageContent.isBlank()) "[embed]" else readableMessageContent
|
||||
|
@ -33,18 +31,6 @@ object Kagebot {
|
|||
}
|
||||
}
|
||||
|
||||
fun welcomeUser(event: ServerMemberJoinEvent) {
|
||||
Config.features.welcome!!.run {
|
||||
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))
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun getSecret() = File("secret").readText().trim()
|
||||
|
||||
fun init() {
|
||||
|
@ -61,10 +47,6 @@ object Kagebot {
|
|||
})
|
||||
Log.info("kagebot Mk II running")
|
||||
Globals.api.addMessageCreateListener { checked { it.process() } }
|
||||
Config.features.welcome?.let {
|
||||
Globals.api.addServerMemberJoinListener {
|
||||
checked { welcomeUser(it) }
|
||||
}
|
||||
}
|
||||
Config.features.eventFeatures().forEach { it.register(Globals.api) }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,9 +9,9 @@ import java.lang.management.ManagementFactory
|
|||
import java.time.Duration
|
||||
import java.time.temporal.ChronoUnit
|
||||
|
||||
class DebugFeature : MessageFeature() {
|
||||
class DebugFeature : MessageFeature {
|
||||
|
||||
override fun handleInternal(message: MessageCreateEvent) {
|
||||
override fun handle(message: MessageCreateEvent) {
|
||||
if (message.messageAuthor.isBotOwner) {
|
||||
MessageUtil.sendEmbed(message.channel, getPerformanceStats())
|
||||
}
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
package moe.kageru.kagebot.features
|
||||
|
||||
import org.javacord.api.DiscordApi
|
||||
import org.javacord.api.event.message.MessageCreateEvent
|
||||
|
||||
interface MessageFeature {
|
||||
fun handle(message: MessageCreateEvent)
|
||||
}
|
||||
|
||||
interface EventFeature {
|
||||
fun register(api: DiscordApi)
|
||||
}
|
|
@ -17,6 +17,7 @@ class Features(
|
|||
SetConfigFeature()
|
||||
)
|
||||
|
||||
private val all = listOf(welcome, debug, help, getConfig, setConfig)
|
||||
private val featureMap = mapOf(
|
||||
"help" to help,
|
||||
"debug" to debug,
|
||||
|
@ -26,4 +27,5 @@ class Features(
|
|||
)
|
||||
|
||||
fun findByString(feature: String) = featureMap[feature]
|
||||
fun eventFeatures() = all.filterIsInstance<EventFeature>()
|
||||
}
|
||||
|
|
|
@ -6,8 +6,8 @@ import org.javacord.api.event.message.MessageCreateEvent
|
|||
/**
|
||||
* Simple message handler to send the current config file via message attachment.
|
||||
*/
|
||||
class GetConfigFeature : MessageFeature() {
|
||||
override fun handleInternal(message: MessageCreateEvent) {
|
||||
class GetConfigFeature : MessageFeature {
|
||||
override fun handle(message: MessageCreateEvent) {
|
||||
message.channel.sendMessage(ConfigParser.configFile)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,8 +5,8 @@ import moe.kageru.kagebot.command.MatchType
|
|||
import moe.kageru.kagebot.config.Config
|
||||
import org.javacord.api.event.message.MessageCreateEvent
|
||||
|
||||
class HelpFeature : MessageFeature() {
|
||||
override fun handleInternal(message: MessageCreateEvent) {
|
||||
class HelpFeature : MessageFeature {
|
||||
override fun handle(message: MessageCreateEvent) {
|
||||
message.channel.sendEmbed {
|
||||
addField("Commands:", listCommands(message))
|
||||
}
|
||||
|
|
|
@ -1,11 +0,0 @@
|
|||
package moe.kageru.kagebot.features
|
||||
|
||||
import org.javacord.api.event.message.MessageCreateEvent
|
||||
|
||||
abstract class MessageFeature {
|
||||
fun handle(message: MessageCreateEvent) {
|
||||
handleInternal(message)
|
||||
}
|
||||
|
||||
internal abstract fun handleInternal(message: MessageCreateEvent)
|
||||
}
|
|
@ -7,9 +7,9 @@ import moe.kageru.kagebot.config.RawConfig
|
|||
import org.javacord.api.entity.channel.TextChannel
|
||||
import org.javacord.api.event.message.MessageCreateEvent
|
||||
|
||||
class SetConfigFeature : MessageFeature() {
|
||||
class SetConfigFeature : MessageFeature {
|
||||
@ExperimentalStdlibApi
|
||||
override fun handleInternal(message: MessageCreateEvent) {
|
||||
override fun handle(message: MessageCreateEvent) {
|
||||
if (message.messageAttachments.size != 1) {
|
||||
message.channel.sendMessage("Error: please attach the new config to your message.")
|
||||
return
|
||||
|
|
|
@ -2,13 +2,33 @@ package moe.kageru.kagebot.features
|
|||
|
||||
import moe.kageru.kagebot.MessageUtil
|
||||
import moe.kageru.kagebot.Util
|
||||
import moe.kageru.kagebot.Util.checked
|
||||
import moe.kageru.kagebot.Util.failed
|
||||
import moe.kageru.kagebot.config.RawWelcomeFeature
|
||||
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(rawWelcome: RawWelcomeFeature) : MessageFeature() {
|
||||
override fun handleInternal(message: MessageCreateEvent) {
|
||||
class WelcomeFeature(rawWelcome: RawWelcomeFeature) : MessageFeature, EventFeature {
|
||||
override fun register(api: DiscordApi) {
|
||||
api.addServerMemberJoinListener { event ->
|
||||
checked { welcomeUser(event) }
|
||||
}
|
||||
}
|
||||
|
||||
fun welcomeUser(event: ServerMemberJoinEvent) {
|
||||
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 {
|
||||
MessageUtil.sendEmbed(message.channel, it)
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@ import io.mockk.mockk
|
|||
import moe.kageru.kagebot.config.Config
|
||||
import moe.kageru.kagebot.features.SetConfigFeature
|
||||
|
||||
@ExperimentalStdlibApi
|
||||
class ConfigTest : ShouldSpec({
|
||||
TestUtil.prepareTestEnvironment()
|
||||
"should properly parse test config" {
|
||||
|
|
|
@ -4,16 +4,16 @@ import io.kotlintest.shouldBe
|
|||
import io.kotlintest.specs.StringSpec
|
||||
import io.mockk.every
|
||||
import io.mockk.mockk
|
||||
import moe.kageru.kagebot.config.Config
|
||||
import moe.kageru.kagebot.Kagebot
|
||||
import moe.kageru.kagebot.TestUtil
|
||||
import moe.kageru.kagebot.config.Config
|
||||
import org.javacord.api.entity.message.embed.EmbedBuilder
|
||||
|
||||
@ExperimentalStdlibApi
|
||||
class WelcomeFeatureTest : StringSpec({
|
||||
TestUtil.prepareTestEnvironment()
|
||||
"should send welcome" {
|
||||
val sentMessages = mutableListOf<EmbedBuilder>()
|
||||
Kagebot.welcomeUser(
|
||||
Config.features.welcome!!.welcomeUser(
|
||||
mockk {
|
||||
every { user } returns mockk {
|
||||
every { sendMessage(capture(sentMessages)) } returns mockk {
|
||||
|
@ -28,7 +28,7 @@ class WelcomeFeatureTest : StringSpec({
|
|||
"should send welcome fallback if DMs are disabled" {
|
||||
val message = mutableListOf<String>()
|
||||
TestUtil.prepareTestEnvironment(sentMessages = message)
|
||||
Kagebot.welcomeUser(
|
||||
Config.features.welcome!!.welcomeUser(
|
||||
mockk {
|
||||
every { user } returns mockk {
|
||||
every { id } returns 123
|
||||
|
|
Loading…
Reference in New Issue
Block a user