diff options
Diffstat (limited to 'util/src/entities/Channel.ts')
-rw-r--r-- | util/src/entities/Channel.ts | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/util/src/entities/Channel.ts b/util/src/entities/Channel.ts new file mode 100644 index 00000000..5845607a --- /dev/null +++ b/util/src/entities/Channel.ts @@ -0,0 +1,104 @@ +import { Column, Entity, JoinColumn, ManyToMany, ManyToOne } from "typeorm"; +import { BaseClass } from "./BaseClass"; +import { Guild } from "./Guild"; +import { Message } from "./Message"; +import { User } from "./User"; + +export enum ChannelType { + GUILD_TEXT = 0, // a text channel within a server + DM = 1, // a direct message between users + GUILD_VOICE = 2, // a voice channel within a server + GROUP_DM = 3, // a direct message between multiple users + GUILD_CATEGORY = 4, // an organizational category that contains up to 50 channels + GUILD_NEWS = 5, // a channel that users can follow and crosspost into their own server + GUILD_STORE = 6, // a channel in which game developers can sell their game on Discord +} + +@Entity("channels") +export class Channel extends BaseClass { + @Column() + created_at: Date; + + @Column() + name: string; + + @Column({ type: "simple-enum", enum: ChannelType }) + type: ChannelType; + + @Column("simple-array") + recipient_ids: string[]; + + @JoinColumn({ name: "recipient_ids" }) + @ManyToMany(() => User, (user: User) => user.id) + recipients?: User[]; + + @Column() + last_message_id: string; + + @JoinColumn({ name: "last_message_id" }) + @ManyToOne(() => Message, (message: Message) => message.id) + last_message?: Message; + + @Column() + guild_id?: string; + + @JoinColumn({ name: "guild_id" }) + @ManyToOne(() => Guild, (guild: Guild) => guild.id) + guild: Guild; + + @Column() + parent_id: string; + + @JoinColumn({ name: "parent_id" }) + @ManyToOne(() => Channel, (channel: Channel) => channel.id) + parent?: Channel; + + @Column() + owner_id: string; + + @JoinColumn({ name: "owner_id" }) + @ManyToOne(() => User, (user: User) => user.id) + owner: User; + + @Column() + last_pin_timestamp?: number; + + @Column() + default_auto_archive_duration?: number; + + @Column() + position: number; + + @Column("simple-json") + permission_overwrites: ChannelPermissionOverwrite[]; + + @Column() + video_quality_mode?: number; + + @Column() + bitrate?: number; + + @Column() + user_limit?: number; + + @Column() + nsfw: boolean; + + @Column() + rate_limit_per_user: number; + + @Column() + topic?: string; +} + +export interface ChannelPermissionOverwrite { + allow: bigint; // for bitfields we use bigints + deny: bigint; // for bitfields we use bigints + id: string; + type: ChannelPermissionOverwriteType; +} + +export enum ChannelPermissionOverwriteType { + role = 0, + member = 1, +} |