2019-06-12 23:43:36 +02:00
package moe.kageru.kagebot.command
2019-11-11 19:58:21 +01:00
import arrow.core.Option
2019-06-12 23:43:36 +02:00
import moe.kageru.kagebot.Util
import org.javacord.api.entity.permission.Role
import org.javacord.api.event.message.MessageCreateEvent
2019-10-18 20:48:43 +02:00
class Permissions (
hasOneOf : List < String > ? ,
hasNoneOf : List < String > ? ,
private val onlyDM : Boolean = false
) {
2019-11-11 19:58:21 +01:00
private val hasOneOf : Option < Set < Role > > = Option . fromNullable ( hasOneOf ?. mapTo ( mutableSetOf ( ) , Util :: findRole ) )
private val hasNoneOf : Option < Set < Role > > = Option . fromNullable ( hasNoneOf ?. mapTo ( mutableSetOf ( ) , Util :: findRole ) )
2019-06-12 23:43:36 +02:00
2019-11-11 19:58:21 +01:00
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 ) }
2019-06-12 23:43:36 +02:00
}
}