summary refs log tree commit diff
path: root/util/oldModels/Channel.ts
diff options
context:
space:
mode:
Diffstat (limited to 'util/oldModels/Channel.ts')
-rw-r--r--util/oldModels/Channel.ts111
1 files changed, 111 insertions, 0 deletions
diff --git a/util/oldModels/Channel.ts b/util/oldModels/Channel.ts
new file mode 100644

index 00000000..2959decd --- /dev/null +++ b/util/oldModels/Channel.ts
@@ -0,0 +1,111 @@ +import { Schema, model, Types, Document } from "mongoose"; +import db from "../util/Database"; +import toBigInt from "../util/toBigInt"; +import { PublicUserProjection, UserModel } from "./User"; + +// @ts-ignore +export interface AnyChannel extends Channel, DMChannel, TextChannel, VoiceChannel { + recipient_ids: null | string[]; +} + +export interface ChannelDocument extends Document, AnyChannel { + id: string; +} + +export const ChannelSchema = new Schema({ + id: String, + created_at: { type: Schema.Types.Date, required: true }, + name: String, // can't be required for dm channels + type: { type: Number, required: true }, + guild_id: String, + owner_id: String, + parent_id: String, + recipient_ids: [String], + position: Number, + last_message_id: String, + last_pin_timestamp: Date, + nsfw: Boolean, + rate_limit_per_user: Number, + default_auto_archive_duration: Number, + topic: String, + permission_overwrites: [ + { + allow: { type: String, get: toBigInt }, + deny: { type: String, get: toBigInt }, + id: String, + type: { type: Number }, + }, + ], +}); + +ChannelSchema.virtual("recipients", { + ref: UserModel, + localField: "recipient_ids", + foreignField: "id", + justOne: false, + autopopulate: { select: PublicUserProjection }, +}); + +ChannelSchema.set("removeResponse", ["recipient_ids"]); + +// @ts-ignore +export const ChannelModel = db.model<ChannelDocument>("Channel", ChannelSchema, "channels"); + +export interface Channel { + id: string; + created_at: Date; + name: string; + type: number; +} + +export interface TextBasedChannel { + last_message_id?: string; + last_pin_timestamp?: number; + default_auto_archive_duration?: number; +} + +export interface GuildChannel extends Channel { + guild_id: string; + position: number; + parent_id?: string; + permission_overwrites: ChannelPermissionOverwrite[]; +} + +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, +} + +export interface VoiceChannel extends GuildChannel { + video_quality_mode?: number; + bitrate?: number; + user_limit?: number; +} + +export interface TextChannel extends GuildChannel, TextBasedChannel { + nsfw: boolean; + rate_limit_per_user: number; + topic?: string; +} +// @ts-ignore +export interface DMChannel extends Channel, TextBasedChannel { + owner_id: string; + recipient_ids: string[]; +} + +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 +}