Skip to content

Commit

Permalink
Add checks for "permissions that Loritta needs to have to be able to …
Browse files Browse the repository at this point in the history
…execute this command"
  • Loading branch information
MrPowerGamerBR committed Feb 10, 2025
1 parent 1deb209 commit 1279e5a
Show file tree
Hide file tree
Showing 6 changed files with 44 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package net.perfectdreams.loritta.morenitta.interactions.commands

import net.dv8tion.jda.api.Permission
import net.dv8tion.jda.api.interactions.IntegrationType
import net.dv8tion.jda.api.interactions.InteractionContextType
import net.dv8tion.jda.api.interactions.commands.DefaultMemberPermissions
Expand All @@ -25,6 +26,7 @@ class SlashCommandDeclarationBuilder(
) {
var examples: ListI18nData? = null
var executor: LorittaSlashCommandExecutor? = null
var botPermissions: Set<Permission>? = null
var defaultMemberPermissions: DefaultMemberPermissions? = null
var isGuildOnly = false
var enableLegacyMessageSupport = false
Expand Down Expand Up @@ -68,6 +70,7 @@ class SlashCommandDeclarationBuilder(
category,
uniqueId,
examples,
botPermissions,
defaultMemberPermissions,
isGuildOnly,
enableLegacyMessageSupport,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package net.perfectdreams.loritta.morenitta.interactions.commands

import net.dv8tion.jda.api.Permission
import net.dv8tion.jda.api.interactions.IntegrationType
import net.dv8tion.jda.api.interactions.InteractionContextType
import net.dv8tion.jda.api.interactions.commands.DefaultMemberPermissions
Expand All @@ -22,6 +23,7 @@ data class SlashCommandDeclaration(
override val category: CommandCategory,
override val uniqueId: UUID,
val examples: ListI18nData?,
val botPermissions: Set<Permission>,
val defaultMemberPermissions: DefaultMemberPermissions?,
var isGuildOnly: Boolean,
var enableLegacyMessageSupport: Boolean,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -520,6 +520,23 @@ class UnleashedCommandManager(val loritta: LorittaBot, val languageManager: Lang
}
}

// If we are in a guild... (because private messages do not have any permissions)
// Check if Loritta has all the necessary permissions
val missingPermissions = slashDeclaration.botPermissions.filterNot { guild.selfMember.hasPermission(event.channel as GuildChannel, it) }

if (missingPermissions.isNotEmpty()) {
// oh no
val required = missingPermissions.joinToString(", ", transform = { "`" + it.getLocalizedName(i18nContext) + "`" })

context.reply(true) {
styled(
locale["commands.loriDoesntHavePermissionDiscord", required, "\uD83D\uDE22", "\uD83D\uDE42"],
Constants.ERROR
)
}
return true
}

if (!loritta.discordSlashCommandScopeWorkaround.checkIfSlashCommandScopeIsEnabled(guild, context.member)) {
context.reply(false, loritta.discordSlashCommandScopeWorkaround.unauthMessage(context.guild, context.member))
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ class BanCommand(val loritta: LorittaBot) : SlashCommandDeclarationWrapper {

override fun command() = slashCommand(I18N_PREFIX.Label, I18N_PREFIX.Description, CommandCategory.MODERATION, UUID.fromString("1de71daf-fed4-4c2e-9988-83dc721ad04f")) {
defaultMemberPermissions = DefaultMemberPermissions.enabledFor(Permission.BAN_MEMBERS)
this.botPermissions = setOf(Permission.BAN_MEMBERS)

alternativeLegacyLabels.apply {
add("banir")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ class ClearCommand(val loritta: LorittaBot) : SlashCommandDeclarationWrapper {

override fun command() = slashCommand(I18N_PREFIX.Label, I18N_PREFIX.Description, CommandCategory.MODERATION, UUID.fromString("a5cb1636-81da-435f-bec8-a5be3f393edc")) {
this.defaultMemberPermissions = DefaultMemberPermissions.enabledFor(Permission.MESSAGE_MANAGE, Permission.MESSAGE_HISTORY)
this.botPermissions = setOf(Permission.MESSAGE_MANAGE, Permission.MESSAGE_HISTORY)
this.integrationTypes = listOf(IntegrationType.GUILD_INSTALL)
this.enableLegacyMessageSupport = true

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ import net.perfectdreams.loritta.morenitta.interactions.modals.ModalArguments
import net.perfectdreams.loritta.morenitta.interactions.modals.ModalContext
import net.perfectdreams.loritta.morenitta.utils.*
import net.perfectdreams.loritta.morenitta.utils.extensions.await
import net.perfectdreams.loritta.morenitta.utils.extensions.getLocalizedName
import net.perfectdreams.loritta.morenitta.utils.extensions.toJDA
import net.perfectdreams.loritta.morenitta.utils.extensions.toLoritta
import org.jetbrains.exposed.sql.and
Expand Down Expand Up @@ -264,6 +265,25 @@ class InteractionsListener(private val loritta: LorittaBot) : ListenerAdapter()
loritta.lorittaShards.updateCachedUserData(context.user)
}

// If we are in a guild... (because private messages do not have any permissions)
if (guild != null) {
// Check if Loritta has all the necessary permissions
val missingPermissions = slashDeclaration.botPermissions.filterNot { guild.selfMember.hasPermission(event.guildChannel, it) }

if (missingPermissions.isNotEmpty()) {
// oh no
val required = missingPermissions.joinToString(", ", transform = { "`" + it.getLocalizedName(i18nContext) + "`" })

context.reply(true) {
styled(
locale["commands.loriDoesntHavePermissionDiscord", required, "\uD83D\uDE22", "\uD83D\uDE42"],
Constants.ERROR
)
}
return@launchMessageJob
}
}

executor.execute(
context,
args
Expand Down

0 comments on commit 1279e5a

Please sign in to comment.