package moe.kageru.kagebot.command import arrow.core.Option import arrow.core.toOption import moe.kageru.kagebot.Util import moe.kageru.kagebot.extensions.unwrap import org.javacord.api.entity.permission.Role import org.javacord.api.event.message.MessageCreateEvent class Permissions( hasOneOf: List?, hasNoneOf: List?, private val onlyDM: Boolean = false ) { private val hasOneOf: Option> = hasOneOf?.toSet().toOption() private val hasNoneOf: Option> = hasNoneOf?.toSet().toOption() fun isAllowed(message: MessageCreateEvent): Boolean = when { message.messageAuthor.isBotOwner -> true onlyDM && !message.isPrivateMessage -> false // returns true if the Option is empty (case for no restrictions) else -> hasOneOf.forall { Util.hasOneOf(message.messageAuthor, it) } && hasNoneOf.forall { !Util.hasOneOf(message.messageAuthor, it) } } }