feat: add announcement channels, publishing and following (#3090)

This commit is contained in:
Hampus authored and GitHub committed 2026-10-01 16:57:21 +02:00
1 parent 376afd2ad6
commit 7e4d5137f8
381 files changed
+45650 -14076

No files matched your search

+26 -1
View File
@@ -8,19 +8,34 @@ export const ChannelTypes = {
GUILD_VOICE: 2,
GROUP_DM: 3,
GUILD_CATEGORY: 4,
GUILD_ANNOUNCEMENT: 5,
GUILD_LINK: 998,
DM_PERSONAL_NOTES: 999,
} as const;
export type ChannelType = ValueOf<typeof ChannelTypes>;
export const GUILD_TEXT_BASED_CHANNEL_TYPES = new Set<number>([ChannelTypes.GUILD_TEXT, ChannelTypes.GUILD_VOICE]);
export const GUILD_TEXT_BASED_CHANNEL_TYPES = new Set<number>([
ChannelTypes.GUILD_TEXT,
ChannelTypes.GUILD_VOICE,
ChannelTypes.GUILD_ANNOUNCEMENT,
]);
export const TEXT_BASED_CHANNEL_TYPES = new Set<number>([
...GUILD_TEXT_BASED_CHANNEL_TYPES,
ChannelTypes.DM,
ChannelTypes.DM_PERSONAL_NOTES,
ChannelTypes.GROUP_DM,
]);
export const ANNOUNCEMENT_CONVERTIBLE_CHANNEL_TYPES = new Set<number>([
ChannelTypes.GUILD_TEXT,
ChannelTypes.GUILD_ANNOUNCEMENT,
]);
export const CHANNEL_FOLLOW_TARGET_TYPES = new Set<number>([ChannelTypes.GUILD_TEXT]);
export const WebhookTypes = {
INCOMING: 1,
CHANNEL_FOLLOWER: 2,
} as const;
export type WebhookTypeValue = ValueOf<typeof WebhookTypes>;
export const AUTOMATIC_VOICE_REGION_ID = 'automatic';
export const ChannelOverwriteTypes = {
ROLE: 0,
@@ -43,6 +58,7 @@ export const MessageTypes = {
CHANNEL_ICON_CHANGE: 5,
CHANNEL_PINNED_MESSAGE: 6,
USER_JOIN: 7,
CHANNEL_FOLLOW_ADD: 12,
REPLY: 19,
CLIENT_SYSTEM: 99,
} as const;
@@ -54,6 +70,7 @@ const MESSAGE_TYPE_DELETABLE = {
[MessageTypes.REPLY]: true,
[MessageTypes.CHANNEL_PINNED_MESSAGE]: true,
[MessageTypes.USER_JOIN]: true,
[MessageTypes.CHANNEL_FOLLOW_ADD]: true,
[MessageTypes.RECIPIENT_ADD]: false,
[MessageTypes.RECIPIENT_REMOVE]: false,
[MessageTypes.CALL]: false,
@@ -88,17 +105,25 @@ export const AllowedMentionParseTypesDescriptions: Record<keyof typeof AllowedMe
EVERYONE: 'Parse @everyone and @here mentions from the message content',
};
export const MessageFlags = {
CROSSPOSTED: 1 << 0,
IS_CROSSPOST: 1 << 1,
SUPPRESS_EMBEDS: 1 << 2,
SOURCE_MESSAGE_DELETED: 1 << 3,
SUPPRESS_NOTIFICATIONS: 1 << 12,
VOICE_MESSAGE: 1 << 13,
} as const;
export const MessageFlagsDescriptions: Record<keyof typeof MessageFlags, string> = {
CROSSPOSTED: 'This message has been published to channels that follow this announcement channel',
IS_CROSSPOST: 'This message was delivered from an announcement channel this channel follows',
SUPPRESS_EMBEDS: 'Do not include embeds when serialising this message',
SOURCE_MESSAGE_DELETED: 'The published message this copy came from has been deleted',
SUPPRESS_NOTIFICATIONS: 'This message will not trigger push or desktop notifications',
VOICE_MESSAGE: 'This message is a voice message',
};
export const SENDABLE_MESSAGE_FLAGS =
MessageFlags.SUPPRESS_EMBEDS | MessageFlags.SUPPRESS_NOTIFICATIONS | MessageFlags.VOICE_MESSAGE;
export const CROSSPOST_SERVER_FLAGS =
MessageFlags.CROSSPOSTED | MessageFlags.IS_CROSSPOST | MessageFlags.SOURCE_MESSAGE_DELETED;
export const MessageAttachmentFlags = {
IS_SPOILER: 1 << 3,
CONTAINS_EXPLICIT_MEDIA: 1 << 4,