
com.freya02.botcommands.api.commands.application.slash.builder.SlashCommandOptionAggregateBuilder.kt Maven / Gradle / Ivy
package com.freya02.botcommands.api.commands.application.slash.builder
import com.freya02.botcommands.api.commands.application.builder.ApplicationCommandOptionAggregateBuilder
import com.freya02.botcommands.api.commands.application.builder.ApplicationGeneratedOptionBuilder
import com.freya02.botcommands.api.commands.application.slash.ApplicationGeneratedValueSupplier
import com.freya02.botcommands.api.commands.builder.CustomOptionBuilder
import com.freya02.botcommands.internal.BContextImpl
import com.freya02.botcommands.internal.asDiscordString
import com.freya02.botcommands.internal.parameters.AggregatorParameter
import kotlin.reflect.KFunction
class SlashCommandOptionAggregateBuilder(
private val context: BContextImpl,
aggregatorParameter: AggregatorParameter,
aggregator: KFunction<*>
) : ApplicationCommandOptionAggregateBuilder(aggregatorParameter, aggregator) {
@JvmOverloads
fun option(declaredName: String, optionName: String = declaredName.asDiscordString(), block: SlashCommandOptionBuilder.() -> Unit = {}) {
this += SlashCommandOptionBuilder(context, aggregatorParameter.toOptionParameter(aggregator, declaredName), optionName).apply(block)
}
override fun customOption(declaredName: String) {
this += CustomOptionBuilder(aggregatorParameter.toOptionParameter(aggregator, declaredName))
}
override fun generatedOption(declaredName: String, generatedValueSupplier: ApplicationGeneratedValueSupplier) {
this += ApplicationGeneratedOptionBuilder(aggregatorParameter.toOptionParameter(aggregator, declaredName), generatedValueSupplier)
}
@JvmOverloads
fun nestedOptionVararg(declaredName: String, amount: Int, requiredAmount: Int, optionNameSupplier: (Int) -> String, block: SlashCommandOptionBuilder.(Int) -> Unit = {}) {
//Same as in TextCommandVariationBuilder#optionVararg
nestedVarargAggregate(declaredName) {
for (i in 0..= requiredAmount
}
}
}
}
override fun constructNestedAggregate(aggregatorParameter: AggregatorParameter, aggregator: KFunction<*>) =
SlashCommandOptionAggregateBuilder(context, aggregatorParameter, aggregator)
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy