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";
|
import { DmChannelDTO } from "../dtos";
|
||||||
|
|
||||||
export enum ChannelType {
|
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
|
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
|
GROUP_DM = 3, // a direct message between multiple users
|
||||||
GUILD_CATEGORY = 4, // an organizational category that contains up to 50 channels
|
GUILD_CATEGORY = 4, // an organizational category that contains zero or more channels
|
||||||
GUILD_NEWS = 5, // a channel that users can follow and crosspost into their own server
|
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
|
GUILD_STORE = 6, // a channel in which game developers can sell their game on Discord
|
||||||
ENCRYPTED = 7, // end-to-end encrypted channel
|
ENCRYPTED = 7, // end-to-end encrypted channel
|
||||||
ENCRYPTED_THREAD = 8, // end-to-end encrypted thread channel
|
ENCRYPTED_THREAD = 8, // end-to-end encrypted thread channel
|
||||||
@ -72,7 +72,7 @@ export class Channel extends BaseClass {
|
|||||||
@ManyToOne(() => Channel)
|
@ManyToOne(() => Channel)
|
||||||
parent?: Channel;
|
parent?: Channel;
|
||||||
|
|
||||||
// only for group dms
|
// for group DMs and owned custom channel types
|
||||||
@Column({ nullable: true })
|
@Column({ nullable: true })
|
||||||
@RelationId((channel: Channel) => channel.owner)
|
@RelationId((channel: Channel) => channel.owner)
|
||||||
owner_id: string;
|
owner_id: string;
|
||||||
@ -117,6 +117,9 @@ export class Channel extends BaseClass {
|
|||||||
})
|
})
|
||||||
invites?: Invite[];
|
invites?: Invite[];
|
||||||
|
|
||||||
|
@Column({ nullable: true })
|
||||||
|
retention_policy_id?: string;
|
||||||
|
|
||||||
@OneToMany(() => Message, (message: Message) => message.channel, {
|
@OneToMany(() => Message, (message: Message) => message.channel, {
|
||||||
cascade: true,
|
cascade: true,
|
||||||
orphanedRowAction: "delete",
|
orphanedRowAction: "delete",
|
||||||
@ -182,6 +185,7 @@ export class Channel extends BaseClass {
|
|||||||
|
|
||||||
switch (channel.type) {
|
switch (channel.type) {
|
||||||
case ChannelType.GUILD_TEXT:
|
case ChannelType.GUILD_TEXT:
|
||||||
|
case ChannelType.GUILD_NEWS:
|
||||||
case ChannelType.GUILD_VOICE:
|
case ChannelType.GUILD_VOICE:
|
||||||
if (channel.parent_id && !opts?.skipExistsCheck) {
|
if (channel.parent_id && !opts?.skipExistsCheck) {
|
||||||
const exists = await Channel.findOneOrFail({ id: channel.parent_id });
|
const exists = await Channel.findOneOrFail({ id: channel.parent_id });
|
||||||
@ -191,25 +195,24 @@ export class Channel extends BaseClass {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ChannelType.GUILD_CATEGORY:
|
case ChannelType.GUILD_CATEGORY:
|
||||||
|
case ChannelType.UNHANDLED:
|
||||||
break;
|
break;
|
||||||
case ChannelType.DM:
|
case ChannelType.DM:
|
||||||
case ChannelType.GROUP_DM:
|
case ChannelType.GROUP_DM:
|
||||||
throw new HTTPError("You can't create a dm channel in a guild");
|
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_STORE:
|
||||||
case ChannelType.GUILD_NEWS:
|
|
||||||
default:
|
default:
|
||||||
throw new HTTPError("Not yet supported");
|
throw new HTTPError("Not yet supported");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!channel.permission_overwrites) channel.permission_overwrites = [];
|
if (!channel.permission_overwrites) channel.permission_overwrites = [];
|
||||||
// TODO: auto generate position
|
// TODO: eagerly auto generate position of all guild channels
|
||||||
|
|
||||||
channel = {
|
channel = {
|
||||||
...channel,
|
...channel,
|
||||||
...(!opts?.keepId && { id: Snowflake.generate() }),
|
...(!opts?.keepId && { id: Snowflake.generate() }),
|
||||||
created_at: new Date(),
|
created_at: new Date(),
|
||||||
position: channel.position || 0,
|
position: ((channel.type === ChannelType.UNHANDLED) || channel.position) || 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
await Promise.all([
|
await Promise.all([
|
||||||
@ -231,11 +234,13 @@ export class Channel extends BaseClass {
|
|||||||
const otherRecipientsUsers = await User.find({ where: recipients.map((x) => ({ id: x })) });
|
const otherRecipientsUsers = await User.find({ where: recipients.map((x) => ({ id: x })) });
|
||||||
|
|
||||||
// TODO: check config for max number of recipients
|
// 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) {
|
if (otherRecipientsUsers.length !== recipients.length) {
|
||||||
throw new HTTPError("Recipient/s not found");
|
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;
|
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 });
|
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) {
|
static async removeRecipientFromChannel(channel: Channel, user_id: string) {
|
||||||
@ -354,4 +360,5 @@ export interface ChannelPermissionOverwrite {
|
|||||||
export enum ChannelPermissionOverwriteType {
|
export enum ChannelPermissionOverwriteType {
|
||||||
role = 0,
|
role = 0,
|
||||||
member = 1,
|
member = 1,
|
||||||
|
group = 2,
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user