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

View File

@ -61,7 +61,7 @@ export abstract class ContextMenuCommand {
onMiddlewaresError(context: MenuCommandContext<any, never>, error: string): any {
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);
}
// onPermissionsFail(context: MenuCommandContext<any, never>, permissions: PermissionStrings): any {

View File

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