mirror of
https://github.com/tiramisulabs/seyfert.git
synced 2025-07-01 20:46:08 +00:00
109 lines
3.6 KiB
TypeScript
109 lines
3.6 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 {
|
|
protected constructor(
|
|
// required
|
|
public type: ApplicationCommandTypes = ApplicationCommandTypes.ChatInput,
|
|
public name = "",
|
|
public description = "",
|
|
// non-required
|
|
public defaultMemberPermissions?: PermissionStrings[],
|
|
// etc
|
|
public nameLocalizations?: Localization,
|
|
public descriptionLocalizations?: Localization,
|
|
public dmPermission = true,
|
|
) {
|
|
this.type = type;
|
|
this.name = name;
|
|
this.description = description;
|
|
this.defaultMemberPermissions = defaultMemberPermissions;
|
|
this.nameLocalizations = nameLocalizations;
|
|
this.descriptionLocalizations = descriptionLocalizations;
|
|
this.dmPermission = dmPermission;
|
|
}
|
|
|
|
public setType(type: ApplicationCommandTypes) {
|
|
return (this.type = type), this;
|
|
}
|
|
|
|
public setName(name: string) {
|
|
return (this.name = name), this;
|
|
}
|
|
|
|
public setDescription(description: string) {
|
|
return (this.description = description), this;
|
|
}
|
|
|
|
public setDefaultMemberPermission(perm: PermissionStrings[]) {
|
|
return (this.defaultMemberPermissions = perm), this;
|
|
}
|
|
|
|
public setNameLocalizations(l: Localization) {
|
|
return (this.nameLocalizations = l), this;
|
|
}
|
|
|
|
public setDescriptionLocalizations(l: Localization) {
|
|
return (this.descriptionLocalizations = l), this;
|
|
}
|
|
|
|
public setDmPermission(perm: boolean) {
|
|
return (this.dmPermission = perm), this;
|
|
}
|
|
}
|
|
|
|
export class MessageApplicationCommandBuilder {
|
|
public constructor(
|
|
// required
|
|
public type?: ApplicationCommandTypes,
|
|
public name?: string,
|
|
) {
|
|
this.type = ApplicationCommandTypes.Message;
|
|
this.name = name;
|
|
}
|
|
|
|
public setName(name: string) {
|
|
return (this.name = name), this;
|
|
}
|
|
|
|
public 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 {
|
|
public type: ApplicationCommandTypes.ChatInput = ApplicationCommandTypes.ChatInput;
|
|
|
|
public 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
|
|
}
|