Make message processing an extension function

This commit is contained in:
kageru 2019-07-17 23:22:18 +02:00
parent d425687fb5
commit b9f1c6e540
Signed by: kageru
GPG Key ID: 8282A2BEA4ADA3D2
6 changed files with 29 additions and 28 deletions

View File

@ -16,18 +16,18 @@ fun main() {
}
object Kagebot {
fun processMessage(event: MessageCreateEvent) {
if (event.messageAuthor.isBotUser) {
if (event.messageAuthor.isYourself) {
fun MessageCreateEvent.process() {
if (messageAuthor.isBotUser) {
if (messageAuthor.isYourself) {
val loggedMessage =
if (event.readableMessageContent.isBlank()) "[embed]" else event.readableMessageContent
if (readableMessageContent.isBlank()) "[embed]" else readableMessageContent
Log.info("<Self> $loggedMessage")
}
return
}
for (command in Config.commands) {
if (command.matches(event.readableMessageContent)) {
command.execute(event)
if (command.matches(readableMessageContent)) {
command.execute(this)
break
}
}
@ -60,7 +60,7 @@ object Kagebot {
Globals.api.disconnect()
})
Log.info("kagebot Mk II running")
Globals.api.addMessageCreateListener { checked { processMessage(it) } }
Globals.api.addMessageCreateListener { checked { it.process() } }
Config.features.welcome?.let {
Globals.api.addServerMemberJoinListener {
checked { welcomeUser(it) }

View File

@ -7,6 +7,7 @@ import io.mockk.Runs
import io.mockk.every
import io.mockk.just
import io.mockk.mockk
import moe.kageru.kagebot.Kagebot.process
import moe.kageru.kagebot.config.Config
import moe.kageru.kagebot.config.ConfigParser
import moe.kageru.kagebot.config.RawConfig
@ -83,7 +84,7 @@ object TestUtil {
fun testMessageSuccess(content: String, result: String) {
val calls = mutableListOf<String>()
Kagebot.processMessage(mockMessage(content, replies = calls))
mockMessage(content, replies = calls).process()
calls shouldBe mutableListOf(result)
}

View File

@ -6,7 +6,7 @@ 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.Kagebot.process
import moe.kageru.kagebot.TestUtil
import moe.kageru.kagebot.TestUtil.embedToString
import moe.kageru.kagebot.TestUtil.messageableAuthor
@ -47,7 +47,7 @@ class CommandTest : StringSpec({
""".trimIndent()
) {
TestUtil.withReplyContents(expected = listOf(heading, content)) {
Kagebot.processMessage(mockMessage("!embed", replyEmbeds = it))
mockMessage("!embed", replyEmbeds = it).process()
}
}
}
@ -95,7 +95,7 @@ class CommandTest : StringSpec({
""".trimIndent()
) {
val calls = mutableListOf<String>()
Kagebot.processMessage(mockMessage("!ping", replies = calls, isBot = true))
mockMessage("!ping", replies = calls, isBot = true).process()
calls shouldBe mutableListOf()
}
}
@ -113,7 +113,7 @@ class CommandTest : StringSpec({
val mockMessage = mockMessage(messageContent)
every { mockMessage.deleteMessage() } returns mockk()
every { mockMessage.messageAuthor.asUser() } returns Optional.of(messageableAuthor(it))
Kagebot.processMessage(mockMessage)
mockMessage.process()
}
}
}
@ -131,7 +131,7 @@ class CommandTest : StringSpec({
) {
val replies = mutableListOf<String>()
val mockMessage = mockMessage("!restricted", replies = replies)
Kagebot.processMessage(mockMessage)
mockMessage.process()
replies shouldBe mutableListOf(Config.localization.permissionDenied)
withLocalization(
"""
@ -141,7 +141,7 @@ class CommandTest : StringSpec({
redirectedMessage = "asdja"
""".trimIndent()
) {
Kagebot.processMessage(mockMessage)
mockMessage.process()
// still one string in there from earlier, nothing new was added
replies.size shouldBe 1
}
@ -162,7 +162,7 @@ class CommandTest : StringSpec({
val calls = mutableListOf<String>()
val mockMessage = mockMessage("!restricted", replies = calls)
every { mockMessage.messageAuthor.isBotOwner } returns true
Kagebot.processMessage(mockMessage)
mockMessage.process()
calls shouldBe mutableListOf("access granted")
}
}
@ -185,7 +185,7 @@ class CommandTest : StringSpec({
Config.server.getRolesByNameIgnoreCase("testrole")[0]
)
})
Kagebot.processMessage(mockMessage)
mockMessage.process()
calls shouldBe mutableListOf("access granted")
}
}
@ -208,14 +208,14 @@ class CommandTest : StringSpec({
Config.server.getRolesByNameIgnoreCase("testrole")[0]
)
}
Kagebot.processMessage(mockMessage)
mockMessage.process()
// without the role
every { mockMessage.messageAuthor.asUser() } returns mockk {
every { isPresent } returns true
every { get().getRoles(any()) } returns emptyList()
}
Kagebot.processMessage(mockMessage)
mockMessage.process()
calls shouldBe mutableListOf(Config.localization.permissionDenied, "access granted")
}
}
@ -230,7 +230,7 @@ class CommandTest : StringSpec({
""".trimIndent()
) {
val calls = mutableListOf<String>()
Kagebot.processMessage(mockMessage("!dm", replies = calls))
mockMessage("!dm", replies = calls).process()
calls shouldBe listOf(Config.localization.permissionDenied)
}
}
@ -252,7 +252,7 @@ class CommandTest : StringSpec({
""".trimIndent()
) {
val message = "this is a message"
Kagebot.processMessage(mockMessage("!redirect $message"))
mockMessage("!redirect $message").process()
calls.size shouldBe 1
embedToString(calls[0]) shouldContain "\"$message\""
}
@ -271,7 +271,7 @@ class CommandTest : StringSpec({
every { addRole(capture(roles), "Requested via command.") } returns mockk()
}
every { Config.server.getMemberById(1) } returns Optional.of(user)
Kagebot.processMessage(mockMessage("!assign"))
mockMessage("!assign").process()
roles shouldBe mutableListOf(Util.findRole("testrole"))
}
}

View File

@ -2,7 +2,7 @@ package moe.kageru.kagebot.features
import io.kotlintest.shouldBe
import io.kotlintest.specs.ShouldSpec
import moe.kageru.kagebot.Kagebot
import moe.kageru.kagebot.Kagebot.process
import moe.kageru.kagebot.TestUtil
import moe.kageru.kagebot.TestUtil.mockMessage
import moe.kageru.kagebot.TestUtil.withCommands
@ -17,7 +17,7 @@ class ConfigFeatureTest : ShouldSpec({
feature = "getConfig"
""".trimIndent()) {
val calls = mutableListOf<File>()
Kagebot.processMessage(mockMessage("!getConfig", files = calls))
mockMessage("!getConfig", files = calls).process()
calls.size shouldBe 1
}
}

View File

@ -4,7 +4,7 @@ import io.kotlintest.specs.StringSpec
import io.mockk.every
import io.mockk.mockk
import io.mockk.verify
import moe.kageru.kagebot.Kagebot
import moe.kageru.kagebot.Kagebot.process
import moe.kageru.kagebot.TestUtil
import org.javacord.api.entity.message.embed.EmbedBuilder
import org.javacord.api.event.message.MessageCreateEvent
@ -16,7 +16,7 @@ class DebugFeatureTest : StringSpec({
"should ignore regular users" {
val message = TestUtil.mockMessage("!debug")
every { message.messageAuthor.isBotOwner } returns false
Kagebot.processMessage(message)
message.process()
DebugFeature().handle(message)
verify(exactly = 0) { message.channel.sendMessage(any<EmbedBuilder>()) }
}

View File

@ -4,7 +4,7 @@ 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.Kagebot.process
import moe.kageru.kagebot.TestUtil
import moe.kageru.kagebot.TestUtil.mockMessage
import moe.kageru.kagebot.TestUtil.withCommands
@ -36,7 +36,7 @@ class HelpFeatureTest : StringSpec({
val expected = listOf("!ping", "!something")
val unexpected = listOf("not a prefix", "!prison")
withReplyContents(expected = expected, unexpected = unexpected) { replies ->
Kagebot.processMessage(mockMessage("!help", replyEmbeds = replies))
mockMessage("!help", replyEmbeds = replies).process()
}
}
}
@ -51,7 +51,7 @@ class HelpFeatureTest : StringSpec({
Config.server.getRolesByNameIgnoreCase("testrole")[0]
)
})
Kagebot.processMessage(message)
message.process()
}
}
}