diff --git a/core/src/main/kotlin/io/github/null2264/tsukumogami/core/Bot.kt b/core/src/main/kotlin/io/github/null2264/tsukumogami/core/Bot.kt index 86c7832..b0283cc 100644 --- a/core/src/main/kotlin/io/github/null2264/tsukumogami/core/Bot.kt +++ b/core/src/main/kotlin/io/github/null2264/tsukumogami/core/Bot.kt @@ -68,8 +68,8 @@ open class Bot internal constructor(): IGroup { private fun getContext(message: Message): Context { val candidate = message.content.parsePrefixCommandAndArguments() - val context = Context(this, message, candidate?.first, candidate?.second) - context.command = getCommand(candidate?.second?.get(0)) + val context = Context(this, message, candidate?.first, candidate?.second?.toMutableList()) + context.command = getCommand(context.candidate?.removeAt(0)) return context } diff --git a/core/src/main/kotlin/io/github/null2264/tsukumogami/core/BotHolder.kt b/core/src/main/kotlin/io/github/null2264/tsukumogami/core/BotBuilder.kt similarity index 69% rename from core/src/main/kotlin/io/github/null2264/tsukumogami/core/BotHolder.kt rename to core/src/main/kotlin/io/github/null2264/tsukumogami/core/BotBuilder.kt index 33c755c..be9cbb6 100644 --- a/core/src/main/kotlin/io/github/null2264/tsukumogami/core/BotHolder.kt +++ b/core/src/main/kotlin/io/github/null2264/tsukumogami/core/BotBuilder.kt @@ -1,14 +1,12 @@ package io.github.null2264.tsukumogami.core -import dev.kord.core.Kord import io.github.null2264.tsukumogami.core.module.BotModule import kotlin.reflect.KFunction -class BotHolder internal constructor( +class BotBuilder internal constructor( val bot: Bot ) { - internal val prefixes = mutableListOf() var token: String get() = bot.token set(value) { @@ -24,9 +22,9 @@ class BotHolder internal constructor( } } -fun bot(clazz: KFunction = ::Bot, declaration: BotHolder.() -> Unit): Bot { +fun bot(clazz: KFunction = ::Bot, declaration: BotBuilder.() -> Unit): Bot { val bot = clazz.call() - val holder = BotHolder(bot) + val holder = BotBuilder(bot) declaration(holder) return holder.bot } diff --git a/core/src/main/kotlin/io/github/null2264/tsukumogami/core/Context.kt b/core/src/main/kotlin/io/github/null2264/tsukumogami/core/Context.kt index 9dfe7ed..dc849eb 100644 --- a/core/src/main/kotlin/io/github/null2264/tsukumogami/core/Context.kt +++ b/core/src/main/kotlin/io/github/null2264/tsukumogami/core/Context.kt @@ -16,8 +16,9 @@ class Context( /** * Potential command name and/or arguments */ - val candidate: List?, + val candidate: MutableList?, ) { + val author get() = message.author /** diff --git a/core/src/main/kotlin/io/github/null2264/tsukumogami/core/commands/Arguments.kt b/core/src/main/kotlin/io/github/null2264/tsukumogami/core/commands/Arguments.kt index 40984d3..e7adb40 100644 --- a/core/src/main/kotlin/io/github/null2264/tsukumogami/core/commands/Arguments.kt +++ b/core/src/main/kotlin/io/github/null2264/tsukumogami/core/commands/Arguments.kt @@ -3,6 +3,7 @@ package io.github.null2264.tsukumogami.core.commands import io.github.null2264.tsukumogami.core.commands.converters.Converter abstract class Arguments { + val args = mutableListOf>() fun args( @@ -14,9 +15,18 @@ abstract class Arguments { return converter } - suspend fun parse(value: String) { - args.forEach { arg -> - arg.converter.parse(value) + suspend fun parse(values: List?) { + val currentValues = values?.toMutableList() + + run { + args.forEach { arg -> + val value = try { + currentValues?.removeAt(0) + } catch (e: Exception) { + null + } ?: return@run + arg.converter.parse(value) + } } } } diff --git a/core/src/main/kotlin/io/github/null2264/tsukumogami/core/commands/Command.kt b/core/src/main/kotlin/io/github/null2264/tsukumogami/core/commands/Command.kt index c770818..8dda97c 100644 --- a/core/src/main/kotlin/io/github/null2264/tsukumogami/core/commands/Command.kt +++ b/core/src/main/kotlin/io/github/null2264/tsukumogami/core/commands/Command.kt @@ -13,8 +13,7 @@ open class Command( open suspend fun invoke(context: Context) { val parsedArguments = arguments.call() - // TODO: Don't hardcode this - parsedArguments.parse(context.candidate?.get(1) ?: "test") + parsedArguments.parse(context.candidate) handler.invoke(context, parsedArguments) } } diff --git a/core/src/main/kotlin/io/github/null2264/tsukumogami/core/commands/Group.kt b/core/src/main/kotlin/io/github/null2264/tsukumogami/core/commands/Group.kt index 59bdc28..8ce1afe 100644 --- a/core/src/main/kotlin/io/github/null2264/tsukumogami/core/commands/Group.kt +++ b/core/src/main/kotlin/io/github/null2264/tsukumogami/core/commands/Group.kt @@ -19,7 +19,8 @@ class Group( override val allCommands: MutableMap = mutableMapOf() override suspend fun invoke(context: Context) { - val command = allCommands["TODO"] ?: return + val command = allCommands[context.candidate?.get(0)] ?: return + context.candidate?.removeAt(0) context.command = command command.invoke(context) } diff --git a/core/src/main/kotlin/io/github/null2264/tsukumogami/core/commands/IGroup.kt b/core/src/main/kotlin/io/github/null2264/tsukumogami/core/commands/IGroup.kt index 42d8f5a..9f87233 100644 --- a/core/src/main/kotlin/io/github/null2264/tsukumogami/core/commands/IGroup.kt +++ b/core/src/main/kotlin/io/github/null2264/tsukumogami/core/commands/IGroup.kt @@ -40,6 +40,7 @@ interface IGroup { declaration: IGroup.() -> Unit, ) { val group = Group(name, alias, description) + declaration(group) addCommand(group) } } diff --git a/core/src/main/kotlin/io/github/null2264/tsukumogami/core/commands/converters/Converter.kt b/core/src/main/kotlin/io/github/null2264/tsukumogami/core/commands/converters/Converter.kt index cc9ed82..aa0fe6a 100644 --- a/core/src/main/kotlin/io/github/null2264/tsukumogami/core/commands/converters/Converter.kt +++ b/core/src/main/kotlin/io/github/null2264/tsukumogami/core/commands/converters/Converter.kt @@ -5,6 +5,7 @@ import io.github.null2264.tsukumogami.core.commands.Arguments import kotlin.reflect.KProperty abstract class Converter { + lateinit var argumentObj: Argument abstract var parsed: OutputType diff --git a/core/src/main/kotlin/io/github/null2264/tsukumogami/core/commands/converters/impl/StringConverter.kt b/core/src/main/kotlin/io/github/null2264/tsukumogami/core/commands/converters/impl/StringConverter.kt index 723c52a..354817c 100644 --- a/core/src/main/kotlin/io/github/null2264/tsukumogami/core/commands/converters/impl/StringConverter.kt +++ b/core/src/main/kotlin/io/github/null2264/tsukumogami/core/commands/converters/impl/StringConverter.kt @@ -3,7 +3,9 @@ package io.github.null2264.tsukumogami.core.commands.converters.impl import io.github.null2264.tsukumogami.core.commands.converters.Converter class StringConverter : Converter() { + override var parsed: String = "" + override suspend fun parse(input: String): String { this.parsed = input return input