Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

types: Add tagged type unions for channel types #200

Merged
merged 36 commits into from
Jan 19, 2022
Merged
Show file tree
Hide file tree
Changes from 30 commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
4145dff
types: Add unions for channel types
suneettipirneni Sep 17, 2021
feb3fee
types: generate deno
suneettipirneni Sep 17, 2021
600bcc9
fix: make tags work properly
suneettipirneni Sep 17, 2021
1775f85
types: add other channel types
suneettipirneni Sep 17, 2021
78ec93e
types: add other channel types
suneettipirneni Sep 17, 2021
0514ae8
fix: compiler error
suneettipirneni Sep 17, 2021
f4de298
types: try to make requested changes
suneettipirneni Sep 18, 2021
17914ff
fix: make requested changes
suneettipirneni Sep 20, 2021
cef57a5
fix: compiler error
suneettipirneni Sep 20, 2021
045b9c3
chore: add v8 support
suneettipirneni Sep 20, 2021
088215b
fix: run post publish
suneettipirneni Sep 20, 2021
e07cd20
Merge branch 'main' of https://github.com/discordjs/discord-api-types…
suneettipirneni Sep 20, 2021
8153443
fix: v8 compiler error
suneettipirneni Sep 20, 2021
b95a82a
Update deno/payloads/v8/channel.ts
suneettipirneni Sep 21, 2021
84cb495
Update deno/payloads/v8/channel.ts
suneettipirneni Sep 21, 2021
b0164f7
chore: build deno
suneettipirneni Sep 21, 2021
16c3a6e
fix: rename text channels type
suneettipirneni Sep 21, 2021
c63cafe
fix: diffs and exports
suneettipirneni Sep 21, 2021
91b997c
Apply suggestions from code review
suneettipirneni Sep 21, 2021
01aad69
Merge branch 'types/channel-type-unions' of https://github.com/suneet…
suneettipirneni Sep 21, 2021
47c31a6
fix: add changes to v8
suneettipirneni Sep 21, 2021
c53db10
fix: remove DS store
suneettipirneni Sep 21, 2021
78f6357
Update .gitignore
vladfrangu Oct 29, 2021
4bdbc1f
Merge branch 'main' of https://github.com/discordjs/discord-api-types…
suneettipirneni Nov 17, 2021
e37eb1d
fix: make requested changes
suneettipirneni Nov 17, 2021
8d6f512
Merge branch 'types/channel-type-unions' of https://github.com/suneet…
suneettipirneni Nov 17, 2021
f301397
fix: duplicated symbol
suneettipirneni Nov 17, 2021
452eb74
docs: add TODO
suneettipirneni Nov 18, 2021
ab5cb5c
docs: fix typo
suneettipirneni Nov 18, 2021
f2c0258
docs: update todo description
suneettipirneni Nov 22, 2021
0428084
docs: move to text channel
suneettipirneni Nov 22, 2021
f431155
types: make requested changes
suneettipirneni Nov 23, 2021
a7278a2
Merge branch 'main' of https://github.com/discordjs/discord-api-types…
suneettipirneni Jan 9, 2022
3078644
Merge branch 'types/channel-type-unions' of https://github.com/suneet…
suneettipirneni Jan 9, 2022
38733e3
chore: make requested changes
suneettipirneni Jan 9, 2022
c697ac1
chore: singular types
suneettipirneni Jan 9, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -45,3 +45,6 @@ voice/**/*.js
voice/**/*.map
voice/**/*.d.ts
voice/**/*.mjs

# macOS files
.DS_store
130 changes: 94 additions & 36 deletions deno/payloads/v8/channel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,35 +32,82 @@ export interface APIPartialChannel {
}

/**
* https://discord.com/developers/docs/resources/channel#channel-object-channel-structure
* This interface is used to allow easy extension for other channel types. While
* also allowing `APIPartialChannel` to be used without breaking.
*/
export interface APIChannel extends APIPartialChannel {
export interface APIChannelBase<T extends ChannelType> extends APIPartialChannel {
type: T;
}

export type TextChannelTypes = ChannelType.DM | ChannelType.GroupDM | ChannelType.GuildNews | ChannelType.GuildText;

// TODO: remove when text in voice is released
suneettipirneni marked this conversation as resolved.
Show resolved Hide resolved
export type GuildChannelTypes = Exclude<
TextChannelTypes | ChannelType.GuildVoice | ChannelType.GuildStageVoice,
suneettipirneni marked this conversation as resolved.
Show resolved Hide resolved
ChannelType.DM | ChannelType.GroupDM
>;

export interface APITextBasedChannel<T extends ChannelType> extends APIChannelBase<T> {
/**
* The id of the guild (may be missing for some channel objects received over gateway guild dispatches)
* The id of the last message sent in this channel (may not point to an existing or valid message)
*/
guild_id?: Snowflake;
last_message_id?: Snowflake | null;
}

export interface APIGuildChannel<T extends ChannelType> extends APIChannelBase<T> {
/**
* Sorting position of the channel
* The id of the guild (may be missing for some channel objects received over gateway guild dispatches)
*/
position?: number;
guild_id?: Snowflake;
/**
* Explicit permission overwrites for members and roles
*
* See https://discord.com/developers/docs/resources/channel#overwrite-object
*/
permission_overwrites?: APIOverwrite[];
/**
* The channel topic (0-1024 characters)
* Sorting position of the channel
*/
topic?: string | null;
position?: number;
/**
* ID of the parent category for a channel (each parent category can contain up to 50 channels)
*/
parent_id?: Snowflake | null;
/**
* Whether the channel is nsfw
*/
nsfw?: boolean;
}

export type GuildTextChannelTypes = Exclude<TextChannelTypes, ChannelType.DM | ChannelType.GroupDM>;

export interface APIGuildTextChannel<T extends GuildTextChannelTypes>
extends APITextBasedChannel<T>,
APIGuildChannel<T> {
/**
* The id of the last message sent in this channel (may not point to an existing or valid message)
* The channel topic (0-1024 characters)
*/
last_message_id?: Snowflake | null;
topic?: string | null;
/**
* When the last pinned message was pinned.
* This may be `null` in events such as `GUILD_CREATE` when a message is not pinned
*/
last_pin_timestamp?: string | null;
}

export interface APITextChannel extends APIGuildTextChannel<ChannelType.GuildText> {
/**
* Amount of seconds a user has to wait before sending another message (0-21600);
* bots, as well as users with the permission `MANAGE_MESSAGES` or `MANAGE_CHANNELS`, are unaffected
*/
rate_limit_per_user?: number;
}

export type APINewsChannel = APIGuildTextChannel<ChannelType.GuildNews>;
export type APIGuildCategoryChannel = APIGuildChannel<ChannelType.GuildCategory>;
export type APIGuildStoreChannel = APIGuildChannel<ChannelType.GuildStore>;

export interface APIVoiceChannel extends APIGuildChannel<ChannelType.GuildStageVoice | ChannelType.GuildVoice> {
/**
* The bitrate (in bits) of the voice channel
*/
Expand All @@ -70,51 +117,62 @@ export interface APIChannel extends APIPartialChannel {
*/
user_limit?: number;
/**
* Amount of seconds a user has to wait before sending another message (0-21600);
* bots, as well as users with the permission `MANAGE_MESSAGES` or `MANAGE_CHANNELS`, are unaffected
* Voice region id for the voice or stage channel, automatic when set to `null`
*
* See https://discord.com/developers/docs/resources/voice#voice-region-object
*/
rate_limit_per_user?: number;
rtc_region?: string | null;
/**
* The camera video quality mode of the voice channel, `1` when not present
*
* See https://discord.com/developers/docs/resources/channel#channel-object-video-quality-modes
*/
video_quality_mode?: VideoQualityMode;
}

interface APIDMChannelBase<T extends ChannelType> extends APITextBasedChannel<T> {
/**
* The recipients of the DM
*
* See https://discord.com/developers/docs/resources/user#user-object
*/
recipients?: APIUser[];
/**
* Icon hash
*/
icon?: string | null;
/**
* ID of the DM creator
*/
owner_id?: Snowflake;
}

export type APIDMChannel = APIDMChannelBase<ChannelType.DM>;

export interface APIGroupDMChannel extends APIDMChannelBase<ChannelType.GroupDM> {
/**
* Application id of the group DM creator if it is bot-created
*/
application_id?: Snowflake;
/**
* ID of the parent category for a channel (each parent category can contain up to 50 channels)
*/
parent_id?: Snowflake | null;
/**
* When the last pinned message was pinned.
* This may be `null` in events such as `GUILD_CREATE` when a message is not pinned
* Icon hash
*/
last_pin_timestamp?: string | null;
icon?: string | null;
/**
* Voice region id for the voice or stage channel, automatic when set to `null`
*
* See https://discord.com/developers/docs/resources/voice#voice-region-object
* ID of the DM creator
*/
rtc_region?: string | null;
owner_id?: Snowflake;
/**
* The camera video quality mode of the voice channel, `1` when not present
*
* See https://discord.com/developers/docs/resources/channel#channel-object-video-quality-modes
* The id of the last message sent in this channel (may not point to an existing or valid message)
*/
video_quality_mode?: VideoQualityMode;
last_message_id?: Snowflake | null;
}

/**
* https://discord.com/developers/docs/resources/channel#channel-object-channel-structure
*/
export type APIChannel =
| APIGroupDMChannel
| APIDMChannel
| APITextChannel
| APINewsChannel
| APIGuildStoreChannel
| APIVoiceChannel
| APIGuildCategoryChannel
| APINewsChannel;

/**
* https://discord.com/developers/docs/resources/channel#channel-object-channel-types
*/
Expand Down