package moe.kageru.kagebot.features 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 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 “