Permissions: match role purely by name

This commit is contained in:
kageru 2020-04-12 00:58:34 +02:00
parent 5679d5d8dd
commit 91259094ed
Signed by: kageru
GPG Key ID: 8282A2BEA4ADA3D2
2 changed files with 5 additions and 8 deletions

View File

@ -20,9 +20,9 @@ object Util {
return if (condition) op(this) else this
}
fun hasOneOf(messageAuthor: MessageAuthor, roles: Set<Role>): Boolean {
fun hasOneOf(messageAuthor: MessageAuthor, roles: Set<String>): Boolean {
return messageAuthor.asUser().asOption().flatMap { user ->
user.roles().find { it in roles }
user.roles().find { it.name in roles }
}.nonEmpty()
}

View File

@ -1,6 +1,7 @@
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
@ -11,12 +12,8 @@ class Permissions(
hasNoneOf: List<String>?,
private val onlyDM: Boolean = false
) {
private val hasOneOf: Option<Set<Role>> = resolveRoles(hasOneOf)
private val hasNoneOf: Option<Set<Role>> = resolveRoles(hasNoneOf)
private fun resolveRoles(hasOneOf: List<String>?): Option<Set<Role>> {
return Option.fromNullable(hasOneOf?.mapTo(mutableSetOf(), { Util.findRole(it).unwrap() }))
}
private val hasOneOf: Option<Set<String>> = hasOneOf?.toSet().toOption()
private val hasNoneOf: Option<Set<String>> = hasNoneOf?.toSet().toOption()
fun isAllowed(message: MessageCreateEvent): Boolean = when {
message.messageAuthor.isBotOwner -> true