feat(Managers): new ApplicationCommandPermissionsManager (#5897)

Co-authored-by: SpaceEEC <24881032+SpaceEEC@users.noreply.github.com>
Co-authored-by: Yoshida Tomio <mail@tomio.codes>
Co-authored-by: Antonio Román <kyradiscord@gmail.com>
Co-authored-by: Vlad Frangu <kingdgrizzle@gmail.com>
This commit is contained in:
ckohen
2021-06-29 11:19:48 -07:00
committed by GitHub
parent bbc48fdad6
commit 6264c60e97
6 changed files with 543 additions and 244 deletions

117
typings/index.d.ts vendored
View File

@@ -282,24 +282,26 @@ declare module 'discord.js' {
public toString(): string | null;
}
export class ApplicationCommand extends Base {
constructor(client: Client, data: unknown, guild?: Guild);
export class ApplicationCommand<PermissionsFetchType = {}> extends Base {
constructor(client: Client, data: unknown, guild?: Guild, guildID?: Snowflake);
public readonly createdAt: Date;
public readonly createdTimestamp: number;
public defaultPermission: boolean;
public description: string;
public guild: Guild | null;
public guildID: Snowflake | null;
public readonly manager: ApplicationCommandManager;
public id: Snowflake;
public name: string;
public options: ApplicationCommandOption[];
public delete(): Promise<ApplicationCommand>;
public edit(data: ApplicationCommandData): Promise<ApplicationCommand>;
public fetchPermissions(guildID?: Snowflake): Promise<ApplicationCommandPermissions[]>;
public setPermissions(
permissions: ApplicationCommandPermissionData[],
guildID?: Snowflake,
): Promise<ApplicationCommandPermissions[]>;
public permissions: ApplicationCommandPermissionsManager<
PermissionsFetchType,
PermissionsFetchType,
Guild | null,
Snowflake
>;
public delete(): Promise<ApplicationCommand<PermissionsFetchType>>;
public edit(data: ApplicationCommandData): Promise<ApplicationCommand<PermissionsFetchType>>;
private static transformOption(option: ApplicationCommandOptionData, received?: boolean): unknown;
}
@@ -546,7 +548,7 @@ declare module 'discord.js' {
}
export class CommandInteraction extends Interaction {
public readonly command: ApplicationCommand | null;
public readonly command: ApplicationCommand | ApplicationCommand<{ guild: GuildResolvable }> | null;
public readonly channel: TextChannel | DMChannel | NewsChannel | PartialDMChannel | null;
public channelID: Snowflake;
public commandID: Snowflake;
@@ -2326,47 +2328,88 @@ declare module 'discord.js' {
public valueOf(): Collection<K, Holds>;
}
export class ApplicationCommandManager extends BaseManager<
Snowflake,
ApplicationCommand,
ApplicationCommandResolvable
> {
export class ApplicationCommandManager<
ApplicationCommandType = ApplicationCommand<{ guild: GuildResolvable }>,
PermissionsOptionsExtras = { guild: GuildResolvable },
PermissionsGuildType = null,
> extends BaseManager<Snowflake, ApplicationCommandType, ApplicationCommandResolvable> {
constructor(client: Client, iterable?: Iterable<any>);
public permissions: ApplicationCommandPermissionsManager<
{ command?: ApplicationCommandResolvable } & PermissionsOptionsExtras,
{ command: ApplicationCommandResolvable } & PermissionsOptionsExtras,
PermissionsGuildType,
null
>;
private commandPath({ id, guildID }: { id?: Snowflake; guildID?: Snowflake }): unknown;
public create(command: ApplicationCommandData, guildID?: Snowflake): Promise<ApplicationCommand>;
public delete(command: ApplicationCommandResolvable, guildID?: Snowflake): Promise<ApplicationCommand | null>;
public create(command: ApplicationCommandData, guildID: Snowflake): Promise<ApplicationCommand>;
public create(command: ApplicationCommandData, guildID?: Snowflake): Promise<ApplicationCommandType>;
public delete(command: ApplicationCommandResolvable, guildID?: Snowflake): Promise<ApplicationCommandType | null>;
public edit(
command: ApplicationCommandResolvable,
data: ApplicationCommandData,
guildID: Snowflake,
): Promise<ApplicationCommand>;
public edit(
command: ApplicationCommandResolvable,
data: ApplicationCommandData,
guildID?: Snowflake,
): Promise<ApplicationCommandType>;
public fetch(
id: Snowflake,
options: FetchApplicationCommandOptions & { guild: GuildResolvable },
): Promise<ApplicationCommand>;
public fetch(id: Snowflake, options?: FetchApplicationCommandOptions): Promise<ApplicationCommand>;
public fetch(id: Snowflake, options?: FetchApplicationCommandOptions): Promise<ApplicationCommandType>;
public fetch(
id?: Snowflake,
options?: FetchApplicationCommandOptions,
): Promise<Collection<Snowflake, ApplicationCommand>>;
public fetchPermissions(
command: undefined,
guildID: Snowflake,
): Promise<Collection<Snowflake, ApplicationCommandPermissions[]>>;
public fetchPermissions(
command: ApplicationCommandResolvable,
guildID: Snowflake,
): Promise<ApplicationCommandPermissions[]>;
): Promise<Collection<Snowflake, ApplicationCommandType>>;
public set(
commands: ApplicationCommandData[],
guildID?: Snowflake,
): Promise<Collection<Snowflake, ApplicationCommand>>;
public setPermissions(
command: ApplicationCommandResolvable,
permissions: ApplicationCommandPermissionData[],
guildID: Snowflake,
): Promise<ApplicationCommandPermissions[]>;
public setPermissions(
permissions: GuildApplicationCommandPermissionData[],
guildID: Snowflake,
): Promise<Collection<Snowflake, ApplicationCommandPermissions[]>>;
public set(
commands: ApplicationCommandData[],
guildID?: Snowflake,
): Promise<Collection<Snowflake, ApplicationCommandType>>;
private static transformCommand(command: ApplicationCommandData): unknown;
}
export class ApplicationCommandPermissionsManager<BaseOptions, FetchSingleOptions, GuildType, CommandIDType> {
constructor(manager: ApplicationCommandManager | GuildApplicationCommandManager | ApplicationCommand);
public client: Client;
public commandID: CommandIDType;
public guild: GuildType;
public guildID: Snowflake | null;
public manager: ApplicationCommandManager | GuildApplicationCommandManager | ApplicationCommand;
public add(
options: BaseOptions & { permissions: ApplicationCommandPermissionData[] },
): Promise<ApplicationCommandPermissions[]>;
public has(options: BaseOptions & { permissionsID: UserResolvable | RoleResolvable }): Promise<boolean>;
public fetch(options: FetchSingleOptions): Promise<ApplicationCommandPermissions[]>;
public fetch(options: BaseOptions): Promise<Collection<Snowflake, ApplicationCommandPermissions[]>>;
public remove(
options:
| (BaseOptions & {
users: UserResolvable | UserResolvable[];
roles?: RoleResolvable | RoleResolvable[];
})
| (BaseOptions & {
users?: UserResolvable | UserResolvable[];
roles: RoleResolvable | RoleResolvable[];
}),
): Promise<ApplicationCommandPermissions[]>;
public set(
options: BaseOptions & {
command: ApplicationCommandResolvable;
permissions: ApplicationCommandPermissionData[];
},
): Promise<ApplicationCommandPermissions[]>;
public set(
options: BaseOptions & {
fullPermissions: GuildApplicationCommandPermissionData[];
},
): Promise<Collection<Snowflake, ApplicationCommandPermissions[]>>;
private permissionsPath(guildID: Snowflake, commandID?: Snowflake): unknown;
private static transformPermissions(permissions: ApplicationCommandPermissionData, received?: boolean): unknown;
}
@@ -2380,7 +2423,7 @@ declare module 'discord.js' {
public fetch(id: Snowflake, options?: BaseFetchOptions): Promise<Channel | null>;
}
export class GuildApplicationCommandManager extends ApplicationCommandManager {
export class GuildApplicationCommandManager extends ApplicationCommandManager<ApplicationCommand, {}, Guild> {
constructor(guild: Guild, iterable?: Iterable<any>);
public guild: Guild;
public create(command: ApplicationCommandData): Promise<ApplicationCommand>;