diff options
author | Erkin Alp Güney <erkinalp9035@gmail.com> | 2022-03-23 22:18:04 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-23 22:18:04 +0300 |
commit | 02f3b253fd50cface131d49f471784442d050ceb (patch) | |
tree | 1ae176aa424f96fe4ad6de49a92282eebf4f081f /util/src/entities | |
parent | Fix `servers[0].url` in `openapi.json`. (diff) | |
download | server-02f3b253fd50cface131d49f471784442d050ceb.tar.xz |
A few channels on channels
- Added a field for retention policies (progress towards #164) - Allowed note to self channels - Added the UNHANDLED type
Diffstat (limited to 'util/src/entities')
-rw-r--r-- | util/src/entities/Channel.ts | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/util/src/entities/Channel.ts b/util/src/entities/Channel.ts index 1cc4a538..f6b1a6b4 100644 --- a/util/src/entities/Channel.ts +++ b/util/src/entities/Channel.ts @@ -14,12 +14,12 @@ import { Webhook } from "./Webhook"; import { DmChannelDTO } from "../dtos"; export enum ChannelType { - GUILD_TEXT = 0, // a text channel within a server + GUILD_TEXT = 0, // a text channel within a guild DM = 1, // a direct message between users - GUILD_VOICE = 2, // a voice channel within a server + GUILD_VOICE = 2, // a voice channel within a guild 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_CATEGORY = 4, // an organizational category that contains zero or more channels + GUILD_NEWS = 5, // a channel that users can follow and crosspost into a guild or route GUILD_STORE = 6, // a channel in which game developers can sell their game on Discord ENCRYPTED = 7, // end-to-end encrypted channel ENCRYPTED_THREAD = 8, // end-to-end encrypted thread channel @@ -72,7 +72,7 @@ export class Channel extends BaseClass { @ManyToOne(() => Channel) parent?: Channel; - // only for group dms + // for group DMs and owned custom channel types @Column({ nullable: true }) @RelationId((channel: Channel) => channel.owner) owner_id: string; @@ -117,6 +117,9 @@ export class Channel extends BaseClass { }) invites?: Invite[]; + @Column({ nullable: true }) + retention_policy_id?: string; + @OneToMany(() => Message, (message: Message) => message.channel, { cascade: true, orphanedRowAction: "delete", @@ -140,7 +143,7 @@ export class Channel extends BaseClass { orphanedRowAction: "delete", }) webhooks?: Webhook[]; - + // TODO: DM channel static async createChannel( channel: Partial<Channel>, @@ -182,6 +185,7 @@ export class Channel extends BaseClass { switch (channel.type) { case ChannelType.GUILD_TEXT: + case ChannelType.GUILD_NEWS: case ChannelType.GUILD_VOICE: if (channel.parent_id && !opts?.skipExistsCheck) { const exists = await Channel.findOneOrFail({ id: channel.parent_id }); @@ -191,25 +195,24 @@ export class Channel extends BaseClass { } break; case ChannelType.GUILD_CATEGORY: + case ChannelType.UNHANDLED: break; case ChannelType.DM: case ChannelType.GROUP_DM: throw new HTTPError("You can't create a dm channel in a guild"); - // TODO: check if guild is community server case ChannelType.GUILD_STORE: - case ChannelType.GUILD_NEWS: default: throw new HTTPError("Not yet supported"); } if (!channel.permission_overwrites) channel.permission_overwrites = []; - // TODO: auto generate position + // TODO: eagerly auto generate position of all guild channels channel = { ...channel, ...(!opts?.keepId && { id: Snowflake.generate() }), created_at: new Date(), - position: channel.position || 0, + position: ((channel.type === ChannelType.UNHANDLED) || channel.position) || 0, }; await Promise.all([ @@ -231,11 +234,13 @@ export class Channel extends BaseClass { const otherRecipientsUsers = await User.find({ where: recipients.map((x) => ({ id: x })) }); // TODO: check config for max number of recipients + /** if you want to disallow note to self channels, uncomment the conditional below if (otherRecipientsUsers.length !== recipients.length) { throw new HTTPError("Recipient/s not found"); } + **/ - const type = recipients.length === 1 ? ChannelType.DM : ChannelType.GROUP_DM; + const type = recipients.length > 1 ? ChannelType.DM : ChannelType.GROUP_DM; let channel = null; @@ -288,7 +293,8 @@ export class Channel extends BaseClass { await emitEvent({ event: "CHANNEL_CREATE", data: channel_dto, user_id: creator_user_id }); } - return channel_dto.excludedRecipients([creator_user_id]); + if (recipients.length === 1) return channel_dto; + else return channel_dto.excludedRecipients([creator_user_id]); } static async removeRecipientFromChannel(channel: Channel, user_id: string) { @@ -354,4 +360,5 @@ export interface ChannelPermissionOverwrite { export enum ChannelPermissionOverwriteType { role = 0, member = 1, + group = 2, } |