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
2020-04-12 00:58:34 +02:00
import arrow.core.toOption
2019-06-12 23:43:36 +02:00
import moe.kageru.kagebot.Util
2019-11-12 22:10:26 +01:00
import moe.kageru.kagebot.extensions.unwrap
2019-06-12 23:43:36 +02:00
import org.javacord.api.entity.permission.Role
import org.javacord.api.event.message.MessageCreateEvent
2019-10-18 20:48:43 +02:00
class Permissions (
2019-11-14 15:10:30 +01:00
hasOneOf : List < String > ? ,
hasNoneOf : List < String > ? ,
private val onlyDM : Boolean = false
2019-10-18 20:48:43 +02:00
) {
2020-04-12 00:58:34 +02:00
private val hasOneOf : Option < Set < String > > = hasOneOf ?. toSet ( ) . toOption ( )
private val hasNoneOf : Option < Set < String > > = hasNoneOf ?. toSet ( ) . toOption ( )
2019-06-12 23:43:36 +02:00
2019-11-14 15:10:30 +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
}