refactor: Turn prefixes getter to a getter function

So it can be overriden
This commit is contained in:
Ahmad Ansori Palembani 2025-05-26 07:48:21 +07:00
parent 1a3e8a3335
commit ab5c116ced
Signed by: null2264
GPG key ID: BA64F8B60AF3EFB6

View file

@ -3,10 +3,7 @@ package io.github.null2264.tsukumogami.core
import co.touchlab.kermit.Logger
import dev.kord.core.Kord
import dev.kord.core.entity.Message
import dev.kord.core.entity.User
import dev.kord.core.event.gateway.ReadyEvent
import dev.kord.core.event.message.MessageCreateEvent
import dev.kord.core.on
import dev.kord.gateway.Intent
import dev.kord.gateway.PrivilegedIntent
import io.github.null2264.tsukumogami.core.commands.Command
@ -14,10 +11,7 @@ import io.github.null2264.tsukumogami.core.exceptions.CommandException
import io.github.null2264.tsukumogami.core.exceptions.CommandNotFound
import io.github.null2264.tsukumogami.core.module.BotModule
import io.github.null2264.tsukumogami.core.commands.IGroup
import io.github.null2264.tsukumogami.core.ext.parseCommandAndArguments
import io.github.null2264.tsukumogami.core.koin.TsukumogamiKoinComponent
import kotlin.reflect.full.callSuspend
import kotlinx.coroutines.runBlocking
import org.koin.core.component.inject
open class Bot internal constructor(): IGroup, TsukumogamiKoinComponent {
@ -25,8 +19,6 @@ open class Bot internal constructor(): IGroup, TsukumogamiKoinComponent {
val client: Kord by inject()
private val modules = mutableMapOf<String, BotModule>()
private val _prefixes = mutableListOf<String>()
val prefixes: List<String> get() = _prefixes.toList()
internal lateinit var token: String
override val allCommands: MutableMap<String, Command> = mutableMapOf()
suspend fun self() = client.getSelf().asUser()
@ -76,7 +68,7 @@ open class Bot internal constructor(): IGroup, TsukumogamiKoinComponent {
fun getCommand(name: String?) = allCommands[name]
private fun getContext(message: Message): Context {
private suspend fun getContext(message: Message): Context {
val parsed = message.content.parsePrefixAndCommand()
val context = Context(message, parsed?.first)
context.command = getCommand(parsed?.second)
@ -110,13 +102,17 @@ open class Bot internal constructor(): IGroup, TsukumogamiKoinComponent {
Logger.i { "Online! ${client.getSelf().username}" }
}
private fun String.parsePrefixAndCommand(): Pair<String, String>? {
open suspend fun getPrefixes(): List<String> {
return _prefixes.toList()
}
private suspend fun String.parsePrefixAndCommand(): Pair<String, String>? {
if (this.isBlank()) return null
var ret: Pair<String, String>? = null
run {
prefixes.forEach { candidate ->
getPrefixes().forEach { candidate ->
val prefix = this.substring(0, candidate.length)
if (prefix != candidate) { return@forEach }
val command = this.drop(candidate.length).substringBefore(' ')