spacebar/src/util/entities/Application.ts
2022-12-18 23:48:17 +11:00

158 lines
3.6 KiB
TypeScript

import { Column, Entity, JoinColumn, ManyToOne, OneToOne, RelationId } from "typeorm";
import { BaseClass } from "./BaseClass";
import { Guild } from "./Guild";
import { Team } from "./Team";
import { User } from "./User";
@Entity("applications")
export class Application extends BaseClass {
@Column()
name: string;
@Column({ nullable: true })
icon?: string;
@Column({ nullable: true })
description: string;
@Column({ nullable: true })
summary: string = "";
@Column({ type: "simple-json", nullable: true })
type?: any;
@Column()
hook: boolean = true;
@Column()
bot_public?: boolean = true;
@Column()
bot_require_code_grant?: boolean = false;
@Column()
verify_key: string;
@JoinColumn({ name: "owner_id" })
@ManyToOne(() => User)
owner: User;
// TODO: enum this? https://discord.com/developers/docs/resources/application#application-object-application-flags
@Column()
flags: number = 0;
@Column({ type: "simple-array", nullable: true })
redirect_uris: string[] = [];
@Column({ nullable: true })
rpc_application_state: number = 0;
@Column({ nullable: true })
store_application_state: number = 1;
@Column({ nullable: true })
verification_state: number = 1;
@Column({ nullable: true })
interactions_endpoint_url?: string;
@Column({ nullable: true })
integration_public: boolean = true;
@Column({ nullable: true })
integration_require_code_grant: boolean = false;
@Column({ nullable: true })
discoverability_state: number = 1;
@Column({ nullable: true })
discovery_eligibility_flags: number = 2240;
@JoinColumn({ name: "bot_user_id" })
@OneToOne(() => User)
bot?: User;
@Column({ type: "simple-array", nullable: true })
tags?: string[];
@Column({ nullable: true })
cover_image?: string; // the application's default rich presence invite cover image hash
@Column({ type: "simple-json", nullable: true })
install_params?: {scopes: string[], permissions: string};
@Column({ nullable: true })
terms_of_service_url?: string;
@Column({ nullable: true })
privacy_policy_url?: string;
//just for us
//@Column({ type: "simple-array", nullable: true })
//rpc_origins?: string[];
//@JoinColumn({ name: "guild_id" })
//@ManyToOne(() => Guild)
//guild?: Guild; // if this application is a game sold, this field will be the guild to which it has been linked
//@Column({ nullable: true })
//primary_sku_id?: string; // if this application is a game sold, this field will be the id of the "Game SKU" that is created,
//@Column({ nullable: true })
//slug?: string; // if this application is a game sold, this field will be the URL slug that links to the store page
@JoinColumn({ name: "team_id" })
@ManyToOne(() => Team, {
onDelete: "CASCADE",
nullable: true
})
team?: Team;
}
export interface ApplicationCommand {
id: string;
application_id: string;
name: string;
description: string;
options?: ApplicationCommandOption[];
}
export interface ApplicationCommandOption {
type: ApplicationCommandOptionType;
name: string;
description: string;
required?: boolean;
choices?: ApplicationCommandOptionChoice[];
options?: ApplicationCommandOption[];
}
export interface ApplicationCommandOptionChoice {
name: string;
value: string | number;
}
export enum ApplicationCommandOptionType {
SUB_COMMAND = 1,
SUB_COMMAND_GROUP = 2,
STRING = 3,
INTEGER = 4,
BOOLEAN = 5,
USER = 6,
CHANNEL = 7,
ROLE = 8,
}
export interface ApplicationCommandInteractionData {
id: string;
name: string;
options?: ApplicationCommandInteractionDataOption[];
}
export interface ApplicationCommandInteractionDataOption {
name: string;
value?: any;
options?: ApplicationCommandInteractionDataOption[];
}