Add interfaces for easier feature handling

This commit is contained in:
kageru 2019-07-07 14:32:40 +02:00
parent 4150187bbe
commit 32eca9e7aa
Signed by: kageru
GPG Key ID: 8282A2BEA4ADA3D2
7 changed files with 24 additions and 23 deletions

View File

@ -4,6 +4,7 @@ import moe.kageru.kagebot.Log.log
import moe.kageru.kagebot.Util.checked
import moe.kageru.kagebot.config.Config
import moe.kageru.kagebot.config.RawConfig
import moe.kageru.kagebot.features.MessageFeature
import org.javacord.api.DiscordApiBuilder
import org.javacord.api.event.message.MessageCreateEvent
import org.javacord.api.event.server.member.ServerMemberJoinEvent
@ -71,17 +72,10 @@ object Kagebot {
}
}
}
Globals.config.features.debug?.let { debug ->
if (debug.enabled) {
for (feature in Globals.config.features.allWithMessage()) {
if (feature.commandEnabled) {
Globals.api.addMessageCreateListener {
checked { debug.handle(it) }
}
}
}
Globals.config.features.welcome?.let { welcome ->
if (welcome.commandEnabled) {
Globals.api.addMessageCreateListener {
welcome.handle(it)
checked { feature.handle(it) }
}
}
}

View File

@ -43,7 +43,7 @@ class RawCommand(
class RawPermissions(val hasOneOf: List<String>?, val hasNoneOf: List<String>?, val onlyDM: Boolean)
class RawMessageActions(val delete: Boolean, val redirect: RawRedirect?)
class RawRedirect(val target: String?, val anonymous: Boolean)
class RawFeatures(val welcome: RawWelcomeFeature?, val debug: RawDebugFeatures?)
class RawFeatures(val welcome: RawWelcomeFeature?, val debug: RawDebugFeature?)
class RawWelcomeFeature(
val enabled: Boolean,
val content: Map<String, String>?,
@ -51,4 +51,4 @@ class RawWelcomeFeature(
val fallbackMessage: String?,
@SerializedName("command") val commandEnabled: Boolean
)
class RawDebugFeatures(var enabled: Boolean)
class RawDebugFeature(var enabled: Boolean)

View File

@ -3,15 +3,15 @@ package moe.kageru.kagebot.features
import com.sun.management.OperatingSystemMXBean
import moe.kageru.kagebot.Globals
import moe.kageru.kagebot.MessageUtil
import moe.kageru.kagebot.config.RawDebugFeatures
import moe.kageru.kagebot.config.RawDebugFeature
import org.javacord.api.entity.message.embed.EmbedBuilder
import org.javacord.api.event.message.MessageCreateEvent
import java.lang.management.ManagementFactory
import java.time.Duration
import java.time.temporal.ChronoUnit
class DebugFeatures(rawDebugFeatures: RawDebugFeatures): MessageFeature() {
val enabled: Boolean = rawDebugFeatures.enabled
class DebugFeature(rawDebugFeatures: RawDebugFeature): MessageFeature() {
override val commandEnabled = rawDebugFeatures.enabled
override fun handleInternal(message: MessageCreateEvent) {
if (message.messageAuthor.isBotOwner) {

View File

@ -2,14 +2,18 @@ package moe.kageru.kagebot.features
import moe.kageru.kagebot.config.RawFeatures
class Features(val welcome: WelcomeFeature?, val debug: DebugFeatures?) {
class Features(val welcome: WelcomeFeature?, val debug: DebugFeature?) {
constructor(rawFeatures: RawFeatures) : this(
rawFeatures.welcome?.let(::WelcomeFeature),
rawFeatures.debug?.let(::DebugFeatures)
rawFeatures.debug?.let(::DebugFeature)
)
fun all() = listOfNotNull(this.welcome, this.debug)
fun allWithMessage() = listOfNotNull(this.welcome, this.debug).filterIsInstance<MessageFeature>()
companion object {
val NONE = Features(null, null)
}
}
interface Feature

View File

@ -3,7 +3,9 @@ package moe.kageru.kagebot.features
import moe.kageru.kagebot.Globals
import org.javacord.api.event.message.MessageCreateEvent
abstract class MessageFeature {
abstract class MessageFeature: Feature {
abstract val commandEnabled: Boolean
fun handle(message: MessageCreateEvent) {
Globals.commandCounter.incrementAndGet()
handleInternal(message)

View File

@ -8,6 +8,8 @@ import org.javacord.api.entity.message.embed.EmbedBuilder
import org.javacord.api.event.message.MessageCreateEvent
class WelcomeFeature(rawWelcome: RawWelcomeFeature) : MessageFeature() {
override val commandEnabled = rawWelcome.commandEnabled
override fun handleInternal(message: MessageCreateEvent) {
if (message.readableMessageContent == "!welcome") {
message.channel.sendMessage(embed)
@ -25,5 +27,4 @@ class WelcomeFeature(rawWelcome: RawWelcomeFeature) : MessageFeature() {
Util.findChannel(it)
}
val fallbackMessage: String? = rawWelcome.fallbackMessage
val commandEnabled: Boolean = rawWelcome.commandEnabled
}

View File

@ -5,7 +5,7 @@ import io.mockk.every
import io.mockk.mockk
import io.mockk.verify
import moe.kageru.kagebot.TestUtil
import moe.kageru.kagebot.config.RawDebugFeatures
import moe.kageru.kagebot.config.RawDebugFeature
import org.javacord.api.entity.message.embed.EmbedBuilder
import org.javacord.api.event.message.MessageCreateEvent
@ -17,7 +17,7 @@ class DebugFeatureTest : StringSpec({
val message = mockk<MessageCreateEvent> {
every { messageAuthor.isBotOwner } returns false
}
DebugFeatures(RawDebugFeatures(true)).handle(message)
DebugFeature(RawDebugFeature(true)).handle(message)
verify(exactly = 0) { message.channel.sendMessage(any<EmbedBuilder>()) }
}
"should return something" {
@ -26,7 +26,7 @@ class DebugFeatureTest : StringSpec({
every { readableMessageContent } returns "!debugstats something"
every { channel.sendMessage(any<EmbedBuilder>()) } returns mockk()
}
DebugFeatures(RawDebugFeatures(true)).handle(message)
DebugFeature(RawDebugFeature(true)).handle(message)
verify(exactly = 1) { message.channel.sendMessage(any<EmbedBuilder>()) }
}
})