Yuzu b15666f20e
chore: use single quotes (#68)
* chore: single quote
2022-07-18 18:25:23 +00:00

114 lines
3.7 KiB
TypeScript

import type { Localization, PermissionStrings } from '../../../../discordeno/mod.ts';
import { ApplicationCommandTypes } from '../../../../discordeno/mod.ts';
import { OptionBased } from './ApplicationCommandOption.ts';
import { CreateApplicationCommand } from '../../../Session.ts';
export abstract class ApplicationCommandBuilder implements CreateApplicationCommand {
constructor(
type: ApplicationCommandTypes = ApplicationCommandTypes.ChatInput,
name: string = '',
description: string = '',
defaultMemberPermissions?: PermissionStrings[],
nameLocalizations?: Localization,
descriptionLocalizations?: Localization,
dmPermission: boolean = true,
) {
this.type = type;
this.name = name;
this.description = description;
this.defaultMemberPermissions = defaultMemberPermissions;
this.nameLocalizations = nameLocalizations;
this.descriptionLocalizations = descriptionLocalizations;
this.dmPermission = dmPermission;
}
type: ApplicationCommandTypes;
name: string;
description: string;
defaultMemberPermissions?: PermissionStrings[];
nameLocalizations?: Localization;
descriptionLocalizations?: Localization;
dmPermission: boolean;
setType(type: ApplicationCommandTypes): this {
return (this.type = type), this;
}
setName(name: string): this {
return (this.name = name), this;
}
setDescription(description: string): this {
return (this.description = description), this;
}
setDefaultMemberPermission(perm: PermissionStrings[]): this {
return (this.defaultMemberPermissions = perm), this;
}
setNameLocalizations(l: Localization): this {
return (this.nameLocalizations = l), this;
}
setDescriptionLocalizations(l: Localization): this {
return (this.descriptionLocalizations = l), this;
}
setDmPermission(perm: boolean): this {
return (this.dmPermission = perm), this;
}
}
export class MessageApplicationCommandBuilder {
type: ApplicationCommandTypes;
name?: string;
constructor(
type?: ApplicationCommandTypes,
name?: string,
) {
this.type = type ?? ApplicationCommandTypes.Message;
this.name = name;
}
setName(name: string): this {
return (this.name = name), this;
}
toJSON(): { name: string; type: ApplicationCommandTypes.Message } {
if (!this.name) throw new TypeError('Propety \'name\' is required');
return {
type: ApplicationCommandTypes.Message,
name: this.name,
};
}
}
export class ChatInputApplicationCommandBuilder extends ApplicationCommandBuilder {
type: ApplicationCommandTypes.ChatInput = ApplicationCommandTypes.ChatInput;
toJSON(): CreateApplicationCommand {
if (!this.type) throw new TypeError('Propety \'type\' is required');
if (!this.name) throw new TypeError('Propety \'name\' is required');
if (!this.description) {
throw new TypeError('Propety \'description\' is required');
}
return {
type: ApplicationCommandTypes.ChatInput,
name: this.name,
description: this.description,
options: this.options?.map((o) => o.toJSON()) ?? [],
defaultMemberPermissions: this.defaultMemberPermissions,
nameLocalizations: this.nameLocalizations,
descriptionLocalizations: this.descriptionLocalizations,
dmPermission: this.dmPermission,
};
}
}
OptionBased.applyTo(ChatInputApplicationCommandBuilder);
export interface ChatInputApplicationCommandBuilder extends ApplicationCommandBuilder, OptionBased {
// pass
}