summary refs log tree commit diff
path: root/src/models/Channel.ts
blob: 36f5e83dced100215432f65535378f0c82f17d0a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import { Schema, model, Types, Document } from "mongoose";

export interface ChannelDocument extends Channel, DMChannel, TextChannel, VoiceChannel, Document {
	id: bigint;
}

export const ChannelSchema = new Schema({
	id: Types.Long,
	created_at: { type: Schema.Types.Date, required: true },
	name: { type: String, required: true },
	type: { type: Number, required: true },
	guild_id: Types.Long,
	owner_id: Types.Long,
	parent_id: Types.Long,
	recipients: [Types.Long],
	position: Number,
	last_message_id: Types.Long,
	last_pin_timestamp: Date,
	nsfw: Boolean,
	rate_limit_per_user: Number,
	topic: String,
	permission_overwrites: [
		{
			allow: Types.Long,
			deny: Types.Long,
			id: Types.Long,
			type: Number,
		},
	],
});

export const ChannelModel = model<ChannelDocument>("Channel", ChannelSchema, "channels");

export interface Channel {
	id: bigint;
	created_at: number;
	name: string;
	type: number;
}

export interface TextBasedChannel {
	last_message_id?: bigint;
	last_pin_timestamp?: number;
}

export interface GuildChannel extends Channel {
	guild_id: bigint;
	position: number;
	parent_id?: bigint;
	permission_overwrites: {
		allow: bigint;
		deny: bigint;
		id: bigint;
		type: number;
	}[];
}

export interface VoiceChannel extends GuildChannel {}

export interface TextChannel extends GuildChannel, TextBasedChannel {
	nsfw: boolean;
	rate_limit_per_user: number;
	topic?: string;
}

export interface DMChannel extends Channel, TextBasedChannel {
	owner_id: bigint;
	recipients: bigint[];
}

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
}