package moe.kageru.kagebot.features import arrow.core.* import arrow.core.extensions.either.applicative.applicative import arrow.core.extensions.either.monad.flatMap import arrow.core.extensions.list.monad.map import arrow.core.extensions.listk.functorFilter.filter import arrow.core.extensions.option.applicative.applicative import arrow.syntax.collections.destructured import com.fasterxml.jackson.annotation.JsonProperty import moe.kageru.kagebot.Log import moe.kageru.kagebot.MessageUtil.sendEmbed 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.* import moe.kageru.kagebot.persistence.Dao import org.javacord.api.entity.permission.Role import org.javacord.api.entity.user.User import org.javacord.api.event.message.MessageCreateEvent import java.time.Duration import java.time.Instant class TimeoutFeature(@JsonProperty("role") role: String) : MessageFeature { private val timeoutRole: Role = findRole(role).unwrap() override fun handle(message: MessageCreateEvent) { message.readableMessageContent.split(' ', limit = 4).let { args -> Either.cond( args.size >= 3, { Tuple3(args[1], args[2], args.getOrNull(3)) }, { "Error: expected “