diff --git a/src/main/kotlin/moe/kageru/kagebot/Kagebot.kt b/src/main/kotlin/moe/kageru/kagebot/Kagebot.kt index 5ee5de3..e55be30 100644 --- a/src/main/kotlin/moe/kageru/kagebot/Kagebot.kt +++ b/src/main/kotlin/moe/kageru/kagebot/Kagebot.kt @@ -1,7 +1,6 @@ package moe.kageru.kagebot import arrow.core.extensions.list.foldable.find -import arrow.core.k import moe.kageru.kagebot.Util.checked import moe.kageru.kagebot.config.Config import moe.kageru.kagebot.config.ConfigParser diff --git a/src/main/kotlin/moe/kageru/kagebot/command/Command.kt b/src/main/kotlin/moe/kageru/kagebot/command/Command.kt index 4212cd8..179af74 100644 --- a/src/main/kotlin/moe/kageru/kagebot/command/Command.kt +++ b/src/main/kotlin/moe/kageru/kagebot/command/Command.kt @@ -6,7 +6,6 @@ import moe.kageru.kagebot.Log import moe.kageru.kagebot.MessageUtil import moe.kageru.kagebot.Util.applyIf import moe.kageru.kagebot.config.Config -import moe.kageru.kagebot.config.LocalizationSpec import moe.kageru.kagebot.features.MessageFeature import org.javacord.api.entity.message.MessageAuthor import org.javacord.api.entity.message.embed.EmbedBuilder diff --git a/src/main/kotlin/moe/kageru/kagebot/command/Permissions.kt b/src/main/kotlin/moe/kageru/kagebot/command/Permissions.kt index fbc1087..915dd6b 100644 --- a/src/main/kotlin/moe/kageru/kagebot/command/Permissions.kt +++ b/src/main/kotlin/moe/kageru/kagebot/command/Permissions.kt @@ -1,5 +1,6 @@ package moe.kageru.kagebot.command +import arrow.core.Option import moe.kageru.kagebot.Util import org.javacord.api.entity.permission.Role import org.javacord.api.event.message.MessageCreateEvent @@ -9,22 +10,14 @@ class Permissions( hasNoneOf: List?, private val onlyDM: Boolean = false ) { - private val hasOneOf: Set? = hasOneOf?.mapTo(mutableSetOf(), Util::findRole) - private val hasNoneOf: Set? = hasNoneOf?.mapTo(mutableSetOf(), Util::findRole) + private val hasOneOf: Option> = Option.fromNullable(hasOneOf?.mapTo(mutableSetOf(), Util::findRole)) + private val hasNoneOf: Option> = Option.fromNullable(hasNoneOf?.mapTo(mutableSetOf(), Util::findRole)) - fun isAllowed(message: MessageCreateEvent): Boolean { - if (message.messageAuthor.isBotOwner) { - return true - } - if (onlyDM && !message.isPrivateMessage) { - return false - } - hasOneOf?.let { roles -> - if (!Util.hasOneOf(message.messageAuthor, roles)) return false - } - hasNoneOf?.let { roles -> - if (Util.hasOneOf(message.messageAuthor, roles)) return false - } - return true + 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) } } } diff --git a/src/test/kotlin/moe/kageru/kagebot/command/CommandTest.kt b/src/test/kotlin/moe/kageru/kagebot/command/CommandTest.kt index cde7b4d..03fc7f8 100644 --- a/src/test/kotlin/moe/kageru/kagebot/command/CommandTest.kt +++ b/src/test/kotlin/moe/kageru/kagebot/command/CommandTest.kt @@ -14,7 +14,6 @@ import moe.kageru.kagebot.TestUtil.mockMessage import moe.kageru.kagebot.TestUtil.prepareTestEnvironment import moe.kageru.kagebot.TestUtil.testMessageSuccess import moe.kageru.kagebot.TestUtil.withCommands -import moe.kageru.kagebot.TestUtil.withLocalization import moe.kageru.kagebot.Util import moe.kageru.kagebot.config.Config import moe.kageru.kagebot.persistence.Dao