diff --git a/src/preconditions/ClientPermissions.ts b/src/preconditions/ClientPermissions.ts index aa15c7f0a..d88ee8e02 100644 --- a/src/preconditions/ClientPermissions.ts +++ b/src/preconditions/ClientPermissions.ts @@ -55,11 +55,9 @@ export class CorePrecondition extends AllFlowsPrecondition { ): AllFlowsPrecondition.AsyncResult { const required = context.permissions ?? new PermissionsBitField(); - const channel = await this.fetchChannelFromInteraction(interaction); + const availablePermissions = await this.getAvailablePermissions(interaction); - const permissions = await this.getPermissionsForChannel(channel, interaction); - - return this.sharedRun(required, permissions, 'chat input'); + return this.sharedRun(required, availablePermissions, 'chat input'); } public async contextMenuRun( @@ -69,11 +67,9 @@ export class CorePrecondition extends AllFlowsPrecondition { ): AllFlowsPrecondition.AsyncResult { const required = context.permissions ?? new PermissionsBitField(); - const channel = await this.fetchChannelFromInteraction(interaction); - - const permissions = await this.getPermissionsForChannel(channel, interaction); + const availablePermissions = await this.getAvailablePermissions(interaction); - return this.sharedRun(required, permissions, 'context menu'); + return this.sharedRun(required, availablePermissions, 'context menu'); } private async getPermissionsForChannel(channel: TextBasedChannel, messageOrInteraction: Message | BaseInteraction) { @@ -113,6 +109,17 @@ export class CorePrecondition extends AllFlowsPrecondition { }); } + private async getAvailablePermissions(interaction: ChatInputCommandInteraction | ContextMenuCommandInteraction) { + if (interaction.channel) { + if (interaction.channel.isDMBased()) return this.dmChannelPermissions; + + const channel = await this.fetchChannelFromInteraction(interaction); + return this.getPermissionsForChannel(channel, interaction); + } + + return interaction.appPermissions; + } + public static readonly readablePermissions: Record = { AddReactions: 'Add Reactions', Administrator: 'Administrator',