fix: fetch bot member permissions in prefix commands

This commit is contained in:
Marcos Susaña 2024-08-02 14:37:17 -04:00
parent 34216bd066
commit 992a117bbc
No known key found for this signature in database
3 changed files with 20 additions and 18 deletions

View File

@ -120,7 +120,7 @@ export class BaseClient {
context.client.logger.fatal( context.client.logger.fatal(
`${context.command.name}.<onBotPermissionsFail>`, `${context.command.name}.<onBotPermissionsFail>`,
context.author.id, context.author.id,
permissions, `permissions ${permissions?.length ? permissions : 'Not found'}`,
); );
}, },
onPermissionsFail(context, permissions): any { onPermissionsFail(context, permissions): any {
@ -424,9 +424,10 @@ export interface BaseClientOptions {
defaults?: { defaults?: {
onRunError?: (context: MenuCommandContext<any, never> | CommandContext, error: unknown) => unknown; onRunError?: (context: MenuCommandContext<any, never> | CommandContext, error: unknown) => unknown;
onPermissionsFail?: Command['onPermissionsFail']; onPermissionsFail?: Command['onPermissionsFail'];
onBotPermissionsFail?: ( onBotPermissionsFail?: (
context: MenuCommandContext<any, never> | CommandContext, context: MenuCommandContext<any, never> | CommandContext,
permissions: PermissionStrings, permissions?: PermissionStrings,
) => unknown; ) => unknown;
onInternalError?: ( onInternalError?: (
client: UsingClient, client: UsingClient,

View File

@ -61,7 +61,7 @@ export abstract class ContextMenuCommand {
onMiddlewaresError(context: MenuCommandContext<any, never>, error: string): any { onMiddlewaresError(context: MenuCommandContext<any, never>, error: string): any {
context.client.logger.fatal(`${this.name}.<onMiddlewaresError>`, context.author.id, error); context.client.logger.fatal(`${this.name}.<onMiddlewaresError>`, context.author.id, error);
} }
onBotPermissionsFail(context: MenuCommandContext<any, never>, permissions: PermissionStrings): any { onBotPermissionsFail(context: MenuCommandContext<any, never>, permissions?: PermissionStrings): any {
context.client.logger.fatal(`${this.name}.<onBotPermissionsFail>`, context.author.id, permissions); context.client.logger.fatal(`${this.name}.<onBotPermissionsFail>`, context.author.id, permissions);
} }
// onPermissionsFail(context: MenuCommandContext<any, never>, permissions: PermissionStrings): any { // onPermissionsFail(context: MenuCommandContext<any, never>, permissions: PermissionStrings): any {

View File

@ -313,7 +313,9 @@ export class HandleCommand {
), ),
); );
} }
if (command.defaultMemberPermissions && rawMessage.guild_id) {
if (rawMessage.guild_id) {
if (command.defaultMemberPermissions) {
const memberPermissions = await self.members.permissions(rawMessage.guild_id, rawMessage.author.id); const memberPermissions = await self.members.permissions(rawMessage.guild_id, rawMessage.author.id);
const permissions = this.checkPermissions(memberPermissions, command.defaultMemberPermissions); const permissions = this.checkPermissions(memberPermissions, command.defaultMemberPermissions);
const guild = await this.client.guilds.raw(rawMessage.guild_id); const guild = await this.client.guilds.raw(rawMessage.guild_id);
@ -322,15 +324,14 @@ export class HandleCommand {
} }
} }
if (command.botPermissions && rawMessage.guild_id) { if (command.botPermissions) {
const meMember = await self.cache.members?.get(self.botId, rawMessage.guild_id); const appPermissions = await self.members.permissions(rawMessage.guild_id, self.botId);
if (!meMember) return; //enable member cache and "Guilds" intent, lol
const appPermissions = await meMember.fetchPermissions();
const permissions = this.checkPermissions(appPermissions, command.botPermissions); const permissions = this.checkPermissions(appPermissions, command.botPermissions);
if (!appPermissions.has('Administrator') && permissions) { if (!appPermissions.has('Administrator') && permissions) {
return command.onBotPermissionsFail?.(context, permissions); return command.onBotPermissionsFail?.(context, permissions);
} }
} }
}
if (!(await this.runOptions(command, context, optionsResolver))) return; if (!(await this.runOptions(command, context, optionsResolver))) return;