A few channels on channels
- Added a field for retention policies (progress towards #164) - Allowed note to self channels - Added the UNHANDLED type
This commit is contained in:
		
							parent
							
								
									e20fd04547
								
							
						
					
					
						commit
						1b087b134a
					
				| @ -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, | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Erkin Alp Güney
						Erkin Alp Güney