diff --git a/src/main/kotlin/moe/kageru/kagebot/extensions/ArrowExtensions.kt b/src/main/kotlin/moe/kageru/kagebot/extensions/ArrowExtensions.kt index 24f4853..ce3ea53 100644 --- a/src/main/kotlin/moe/kageru/kagebot/extensions/ArrowExtensions.kt +++ b/src/main/kotlin/moe/kageru/kagebot/extensions/ArrowExtensions.kt @@ -1,7 +1,11 @@ package moe.kageru.kagebot.extensions import arrow.core.Either +import arrow.core.Option +import arrow.core.Tuple3 import arrow.core.getOrElse +import arrow.optics.pFirst +import arrow.optics.pSecond fun Either.on(op: (R) -> Unit): Either { this.map { op(it) } @@ -9,3 +13,11 @@ fun Either.on(op: (R) -> Unit): Either { } fun Either<*, T>.unwrap(): T = getOrElse { error("Attempted to unwrap Either.left") } + +fun Tuple3.mapSecond(op: (B) -> Option): Option> { + return op(this.b).map { Tuple3.pSecond().set(this, it) } +} + +fun Tuple3.mapFirst(op: (A) -> Option): Option> { + return op(this.a).map { Tuple3.pFirst().set(this, it) } +} diff --git a/src/main/kotlin/moe/kageru/kagebot/features/TimeoutFeature.kt b/src/main/kotlin/moe/kageru/kagebot/features/TimeoutFeature.kt index 90cfabb..238c9a8 100644 --- a/src/main/kotlin/moe/kageru/kagebot/features/TimeoutFeature.kt +++ b/src/main/kotlin/moe/kageru/kagebot/features/TimeoutFeature.kt @@ -1,8 +1,11 @@ package moe.kageru.kagebot.features -import arrow.core.* +import arrow.core.Either +import arrow.core.Tuple3 +import arrow.core.extensions.either.monad.flatMap import arrow.core.extensions.list.monad.map import arrow.core.extensions.listk.functorFilter.filter +import arrow.core.toOption import arrow.syntax.collections.destructured import com.fasterxml.jackson.annotation.JsonProperty import moe.kageru.kagebot.Log @@ -11,10 +14,7 @@ import moe.kageru.kagebot.Util.findRole import moe.kageru.kagebot.Util.findUser import moe.kageru.kagebot.config.Config import moe.kageru.kagebot.config.LocalizationSpec -import moe.kageru.kagebot.extensions.memberById -import moe.kageru.kagebot.extensions.on -import moe.kageru.kagebot.extensions.roles -import moe.kageru.kagebot.extensions.unwrap +import moe.kageru.kagebot.extensions.* import moe.kageru.kagebot.persistence.Dao import org.javacord.api.entity.permission.Role import org.javacord.api.entity.user.User @@ -32,12 +32,9 @@ class TimeoutFeature(@JsonProperty("role") role: String) : MessageFeature { { Tuple3(args[1], args[2], args.getOrNull(3)) }, { "Error: expected “