From 11b95c86099e609128a8ca76d06d43498fae72f5 Mon Sep 17 00:00:00 2001 From: Zaid - Nico Date: Sun, 4 Oct 2020 14:23:29 -0400 Subject: [PATCH] feat: v8 support (#14) Co-authored-by: Vlad Frangu Co-authored-by: Advaith --- .gitignore | 2 + common/index.ts | 2 + default/index.ts | 2 +- v6/gateway/index.ts | 77 ++++ v6/payloads/auditLog.ts | 59 +++ v6/payloads/channel.ts | 32 +- v6/payloads/emoji.ts | 2 + v6/payloads/gateway.ts | 16 + v6/payloads/guild.ts | 39 +- v6/payloads/invite.ts | 3 + v6/payloads/oauth2.ts | 1 + v6/payloads/permissions.ts | 5 + v6/payloads/teams.ts | 3 + v6/payloads/user.ts | 7 + v6/payloads/voice.ts | 2 + v6/payloads/webhook.ts | 4 + v6/rest/auditLog.ts | 4 + v6/rest/channel.ts | 82 +++++ v6/rest/emoji.ts | 11 + v6/rest/gateway.ts | 2 + v6/rest/guild.ts | 139 +++++++- v6/rest/index.ts | 16 +- v6/rest/invite.ts | 2 + v6/rest/oauth2.ts | 22 ++ v6/rest/user.ts | 19 + v6/rest/voice.ts | 1 + v6/rest/webhook.ts | 26 ++ v8/gateway/index.ts | 710 +++++++++++++++++++++++++++++++++++++ v8/index.ts | 4 + v8/payloads/auditLog.ts | 467 ++++++++++++++++++++++++ v8/payloads/channel.ts | 307 ++++++++++++++++ v8/payloads/emoji.ts | 25 ++ v8/payloads/gateway.ts | 134 +++++++ v8/payloads/guild.ts | 301 ++++++++++++++++ v8/payloads/index.ts | 12 + v8/payloads/invite.ts | 39 ++ v8/payloads/oauth2.ts | 27 ++ v8/payloads/permissions.ts | 72 ++++ v8/payloads/teams.ts | 33 ++ v8/payloads/user.ts | 73 ++++ v8/payloads/voice.ts | 35 ++ v8/payloads/webhook.ts | 29 ++ v8/rest/auditLog.ts | 13 + v8/rest/channel.ts | 208 +++++++++++ v8/rest/emoji.ts | 40 +++ v8/rest/gateway.ts | 11 + v8/rest/guild.ts | 387 ++++++++++++++++++++ v8/rest/index.ts | 513 +++++++++++++++++++++++++++ v8/rest/invite.ts | 15 + v8/rest/oauth2.ts | 159 +++++++++ v8/rest/user.ts | 60 ++++ v8/rest/voice.ts | 6 + v8/rest/webhook.ts | 116 ++++++ 53 files changed, 4360 insertions(+), 16 deletions(-) create mode 100644 v8/gateway/index.ts create mode 100644 v8/index.ts create mode 100644 v8/payloads/auditLog.ts create mode 100644 v8/payloads/channel.ts create mode 100644 v8/payloads/emoji.ts create mode 100644 v8/payloads/gateway.ts create mode 100644 v8/payloads/guild.ts create mode 100644 v8/payloads/index.ts create mode 100644 v8/payloads/invite.ts create mode 100644 v8/payloads/oauth2.ts create mode 100644 v8/payloads/permissions.ts create mode 100644 v8/payloads/teams.ts create mode 100644 v8/payloads/user.ts create mode 100644 v8/payloads/voice.ts create mode 100644 v8/payloads/webhook.ts create mode 100644 v8/rest/auditLog.ts create mode 100644 v8/rest/channel.ts create mode 100644 v8/rest/emoji.ts create mode 100644 v8/rest/gateway.ts create mode 100644 v8/rest/guild.ts create mode 100644 v8/rest/index.ts create mode 100644 v8/rest/invite.ts create mode 100644 v8/rest/oauth2.ts create mode 100644 v8/rest/user.ts create mode 100644 v8/rest/voice.ts create mode 100644 v8/rest/webhook.ts diff --git a/.gitignore b/.gitignore index dcbb80cc..40b0ecdc 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,8 @@ out/ coverage/ .nyc_output/ +debug.log + # Don't commit build outputs v*/**/*.js diff --git a/common/index.ts b/common/index.ts index 664949e1..f35c8c74 100644 --- a/common/index.ts +++ b/common/index.ts @@ -33,6 +33,8 @@ export enum RESTJSONErrorCodes { BotsCannotUseThisEndpoint = 20001, OnlyBotsCanUseThisEndpoint, + AnnouncementEditLimitExceeded = 20022, + ChannelSendRateLimit = 20028, MaximumNumberOfGuildsReached = 30001, diff --git a/default/index.ts b/default/index.ts index e34c9009..4a426057 100644 --- a/default/index.ts +++ b/default/index.ts @@ -1,4 +1,4 @@ // This file exports all the types available in the default API version // Thereby, things MAY break in the future -export * from '../v6'; +export * from '../v8'; diff --git a/v6/gateway/index.ts b/v6/gateway/index.ts index fdd5a454..37ae0ee5 100644 --- a/v6/gateway/index.ts +++ b/v6/gateway/index.ts @@ -18,10 +18,14 @@ import type { PresenceUpdateStatus, } from '../payloads'; +/** + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. + */ export const GatewayVersion = '6'; /** * https://discord.com/developers/docs/topics/opcodes-and-status-codes#gateway-gateway-opcodes + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export enum GatewayOPCodes { Dispatch, @@ -40,6 +44,7 @@ export enum GatewayOPCodes { /** * https://discord.com/developers/docs/topics/opcodes-and-status-codes#gateway-gateway-close-event-codes + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export enum GatewayCloseCodes { UnknownError = 4000, @@ -61,6 +66,7 @@ export enum GatewayCloseCodes { /** * https://discord.com/developers/docs/topics/opcodes-and-status-codes#voice-voice-opcodes + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export enum VoiceOPCodes { Identify, @@ -79,6 +85,7 @@ export enum VoiceOPCodes { /** * https://discord.com/developers/docs/topics/opcodes-and-status-codes#voice-voice-close-event-codes + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export enum VoiceCloseCodes { UnknownOpCode = 4001, @@ -100,6 +107,7 @@ export enum VoiceCloseCodes { /** * https://discord.com/developers/docs/topics/gateway#list-of-intents + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export enum GatewayIntentBits { GUILDS = 1 << 0, @@ -121,6 +129,7 @@ export enum GatewayIntentBits { /** * https://discord.com/developers/docs/topics/gateway#commands-and-events-gateway-events + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export enum GatewayDispatchEvents { Ready = 'READY', @@ -161,6 +170,9 @@ export enum GatewayDispatchEvents { WebhooksUpdate = 'WEBHOOKS_UPDATE', } +/** + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. + */ export type GatewaySendPayload = | GatewayHeartbeat | GatewayIdentify @@ -169,6 +181,9 @@ export type GatewaySendPayload = | GatewayResume | GatewayRequestGuildMembers; +/** + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. + */ export type GatewayReceivePayload = | GatewayHello | GatewayHeartbeatRequest @@ -177,6 +192,9 @@ export type GatewayReceivePayload = | GatewayReconnect | GatewayDispatchPayload; +/** + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. + */ export type GatewayDispatchPayload = | GatewayReadyDispatch | GatewayResumedDispatch @@ -213,6 +231,7 @@ export type GatewayDispatchPayload = // #region Dispatch Payloads /** * https://discord.com/developers/docs/topics/gateway#hello + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface GatewayHello extends NonDispatchPayload { op: GatewayOPCodes.Hello; @@ -223,6 +242,7 @@ export interface GatewayHello extends NonDispatchPayload { /** * https://discord.com/developers/docs/topics/gateway#heartbeating + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface GatewayHeartbeatRequest extends NonDispatchPayload { op: GatewayOPCodes.Heartbeat; @@ -231,6 +251,7 @@ export interface GatewayHeartbeatRequest extends NonDispatchPayload { /** * https://discord.com/developers/docs/topics/gateway#heartbeating-example-gateway-heartbeat-ack + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface GatewayHeartbeatAck extends NonDispatchPayload { op: GatewayOPCodes.HeartbeatAck; @@ -239,6 +260,7 @@ export interface GatewayHeartbeatAck extends NonDispatchPayload { /** * https://discord.com/developers/docs/topics/gateway#invalid-session + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface GatewayInvalidSession extends NonDispatchPayload { op: GatewayOPCodes.InvalidSession; @@ -247,6 +269,7 @@ export interface GatewayInvalidSession extends NonDispatchPayload { /** * https://discord.com/developers/docs/topics/gateway#reconnect + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface GatewayReconnect extends NonDispatchPayload { op: GatewayOPCodes.Reconnect; @@ -255,6 +278,7 @@ export interface GatewayReconnect extends NonDispatchPayload { /** * https://discord.com/developers/docs/topics/gateway#ready + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export type GatewayReadyDispatch = DataPayload< GatewayDispatchEvents.Ready, @@ -270,6 +294,7 @@ export type GatewayReadyDispatch = DataPayload< /** * https://discord.com/developers/docs/topics/gateway#resumed + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export type GatewayResumedDispatch = DataPayload; @@ -278,6 +303,7 @@ export type GatewayResumedDispatch = DataPayload; /** * https://discord.com/developers/docs/topics/gateway#guild-ban-add * https://discord.com/developers/docs/topics/gateway#guild-ban-remove + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export type GatewayGuildBanModifyDispatch = DataPayload< GatewayDispatchEvents.GuildBanAdd | GatewayDispatchEvents.GuildBanRemove, @@ -335,6 +365,7 @@ export type GatewayGuildBanRemoveDispatch = GatewayGuildBanModifyDispatch; /** * https://discord.com/developers/docs/topics/gateway#guild-emojis-update + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export type GatewayGuildEmojisUpdateDispatch = DataPayload< GatewayDispatchEvents.GuildEmojisUpdate, @@ -346,6 +377,7 @@ export type GatewayGuildEmojisUpdateDispatch = DataPayload< /** * https://discord.com/developers/docs/topics/gateway#guild-integrations-update + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export type GatewayGuildIntegrationsUpdateDispatch = DataPayload< GatewayDispatchEvents.GuildIntegrationsUpdate, @@ -354,6 +386,7 @@ export type GatewayGuildIntegrationsUpdateDispatch = DataPayload< /** * https://discord.com/developers/docs/topics/gateway#guild-member-add + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export type GatewayGuildMemberAddDispatch = DataPayload< GatewayDispatchEvents.GuildMemberAdd, @@ -362,6 +395,7 @@ export type GatewayGuildMemberAddDispatch = DataPayload< /** * https://discord.com/developers/docs/topics/gateway#guild-member-remove + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export type GatewayGuildMemberRemoveDispatch = DataPayload< GatewayDispatchEvents.GuildMemberRemove, @@ -373,6 +407,7 @@ export type GatewayGuildMemberRemoveDispatch = DataPayload< /** * https://discord.com/developers/docs/topics/gateway#guild-member-update + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export type GatewayGuildMemberUpdateDispatch = DataPayload< GatewayDispatchEvents.GuildMemberUpdate, @@ -383,6 +418,7 @@ export type GatewayGuildMemberUpdateDispatch = DataPayload< /** * https://discord.com/developers/docs/topics/gateway#guild-members-chunk + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export type GatewayGuildMembersChunkDispatch = DataPayload< GatewayDispatchEvents.GuildMembersChunk, @@ -400,6 +436,7 @@ export type GatewayGuildMembersChunkDispatch = DataPayload< /** * https://discord.com/developers/docs/topics/gateway#guild-role-create * https://discord.com/developers/docs/topics/gateway#guild-role-update + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export type GatewayGuildRoleModifyDispatch = DataPayload< GatewayDispatchEvents.GuildRoleCreate | GatewayDispatchEvents.GuildRoleUpdate, @@ -414,6 +451,7 @@ export type GatewayGuildRoleUpdateDispatch = GatewayGuildRoleModifyDispatch; /** * https://discord.com/developers/docs/topics/gateway#guild-role-delete + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export type GatewayGuildRoleDeleteDispatch = DataPayload< GatewayDispatchEvents.GuildRoleDelete, @@ -425,6 +463,7 @@ export type GatewayGuildRoleDeleteDispatch = DataPayload< /** * https://discord.com/developers/docs/topics/gateway#invite-create + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export type GatewayInviteCreateDispatch = DataPayload< GatewayDispatchEvents.InviteCreate, @@ -445,6 +484,7 @@ export type GatewayInviteCreateDispatch = DataPayload< /** * https://discord.com/developers/docs/topics/gateway#invite-delete + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export type GatewayInviteDeleteDispatch = DataPayload< GatewayDispatchEvents.InviteDelete, @@ -457,11 +497,13 @@ export type GatewayInviteDeleteDispatch = DataPayload< /** * https://discord.com/developers/docs/topics/gateway#message-create + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export type GatewayMessageCreateDispatch = DataPayload; /** * https://discord.com/developers/docs/topics/gateway#message-update + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export type GatewayMessageUpdateDispatch = DataPayload< GatewayDispatchEvents.MessageUpdate, @@ -470,6 +512,7 @@ export type GatewayMessageUpdateDispatch = DataPayload< /** * https://discord.com/developers/docs/topics/gateway#message-delete + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export type GatewayMessageDeleteDispatch = DataPayload< GatewayDispatchEvents.MessageDelete, @@ -482,6 +525,7 @@ export type GatewayMessageDeleteDispatch = DataPayload< /** * https://discord.com/developers/docs/topics/gateway#message-delete-bulk + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export type GatewayMessageDeleteBulkDispatch = DataPayload< GatewayDispatchEvents.MessageDeleteBulk, @@ -494,16 +538,19 @@ export type GatewayMessageDeleteBulkDispatch = DataPayload< /** * https://discord.com/developers/docs/topics/gateway#message-reaction-add + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export type GatewayMessageReactionAddDispatch = ReactionData; /** * https://discord.com/developers/docs/topics/gateway#message-reaction-remove + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export type GatewayMessageReactionRemoveDispatch = ReactionData; /** * https://discord.com/developers/docs/topics/gateway#message-reaction-remove-all + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export type GatewayMessageReactionRemoveAllDispatch = DataPayload< GatewayDispatchEvents.MessageReactionRemoveAll, @@ -512,6 +559,7 @@ export type GatewayMessageReactionRemoveAllDispatch = DataPayload< /** * https://discord.com/developers/docs/topics/gateway#message-reaction-remove-emoji + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export type GatewayMessageReactionRemoveEmojiDispatch = DataPayload< GatewayDispatchEvents.MessageReactionRemoveEmoji, @@ -522,11 +570,13 @@ export type GatewayMessageReactionRemoveEmojiDispatch = DataPayload< /** * https://discord.com/developers/docs/topics/gateway#presence-update + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export type GatewayPresenceUpdateDispatch = DataPayload; /** * https://discord.com/developers/docs/topics/gateway#typing-start + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export type GatewayTypingStartDispatch = DataPayload< GatewayDispatchEvents.TypingStart, @@ -541,16 +591,19 @@ export type GatewayTypingStartDispatch = DataPayload< /** * https://discord.com/developers/docs/topics/gateway#user-update + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export type GatewayUserUpdateDispatch = DataPayload; /** * https://discord.com/developers/docs/topics/gateway#voice-state-update + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export type GatewayVoiceStateUpdateDispatch = DataPayload; /** * https://discord.com/developers/docs/topics/gateway#voice-server-update + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export type GatewayVoiceServerUpdateDispatch = DataPayload< GatewayDispatchEvents.VoiceServerUpdate, @@ -563,6 +616,7 @@ export type GatewayVoiceServerUpdateDispatch = DataPayload< /** * https://discord.com/developers/docs/topics/gateway#webhooks-update + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export type GatewayWebhooksUpdateDispatch = DataPayload< GatewayDispatchEvents.WebhooksUpdate, @@ -578,6 +632,7 @@ export type GatewayWebhooksUpdateDispatch = DataPayload< /** * https://discord.com/developers/docs/topics/gateway#heartbeating + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface GatewayHeartbeat { op: GatewayOPCodes.Heartbeat; @@ -586,6 +641,7 @@ export interface GatewayHeartbeat { /** * https://discord.com/developers/docs/topics/gateway#identify-identify-connection-properties + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface GatewayIdentifyProperties { $os: string; @@ -595,6 +651,7 @@ export interface GatewayIdentifyProperties { /** * https://discord.com/developers/docs/topics/gateway#identify + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface GatewayIdentify { op: GatewayOPCodes.Identify; @@ -613,6 +670,7 @@ export interface GatewayIdentify { /** * https://discord.com/developers/docs/topics/gateway#resume + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface GatewayResume { op: GatewayOPCodes.Resume; @@ -625,6 +683,7 @@ export interface GatewayResume { /** * https://discord.com/developers/docs/topics/gateway#request-guild-members + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface GatewayRequestGuildMembers { op: GatewayOPCodes.RequestGuildMembers; @@ -640,6 +699,7 @@ export interface GatewayRequestGuildMembers { /** * https://discord.com/developers/docs/topics/gateway#update-voice-state + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface GatewayVoiceStateUpdate { op: GatewayOPCodes.VoiceStateUpdate; @@ -653,6 +713,7 @@ export interface GatewayVoiceStateUpdate { /** * https://discord.com/developers/docs/topics/gateway#update-status + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface GatewayUpdatePresence { op: GatewayOPCodes.PresenceUpdate; @@ -661,6 +722,7 @@ export interface GatewayUpdatePresence { /** * https://discord.com/developers/docs/topics/gateway#update-status-gateway-status-update-structure + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface GatewayPresenceUpdateData { since: number | null; @@ -672,6 +734,9 @@ export interface GatewayPresenceUpdateData { // #endregion Sendable Payloads // #region Shared +/** + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. + */ interface BasePayload { op: GatewayOPCodes; s: number; @@ -679,14 +744,23 @@ interface BasePayload { t?: string; } +/** + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. + */ type NonDispatchPayload = Omit; +/** + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. + */ interface DataPayload extends BasePayload { op: GatewayOPCodes.Dispatch; t: Event; d: D; } +/** + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. + */ type ReactionData = DataPayload< E, Omit< @@ -702,6 +776,9 @@ type ReactionData = D > >; +/** + * @deprecated Gateway v6 is deprecated and the types will not receive further updates, please update to v8. + */ interface MessageReactionRemoveData { channel_id: string; message_id: string; diff --git a/v6/payloads/auditLog.ts b/v6/payloads/auditLog.ts index f6c8b01d..6cbc7970 100644 --- a/v6/payloads/auditLog.ts +++ b/v6/payloads/auditLog.ts @@ -17,6 +17,7 @@ import type { APIWebhook } from './webhook'; /** * https://discord.com/developers/docs/resources/audit-log#audit-log-object-audit-log-structure + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export interface APIAuditLog { webhooks: APIWebhook[]; @@ -27,6 +28,7 @@ export interface APIAuditLog { /** * https://discord.com/developers/docs/resources/audit-log#audit-log-entry-object-audit-log-entry-structure + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export interface APIAuditLogEntry { target_id: string | null; @@ -40,6 +42,7 @@ export interface APIAuditLogEntry { /** * https://discord.com/developers/docs/resources/audit-log#audit-log-entry-object-audit-log-events + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export enum AuditLogEvent { GUILD_UPDATE = 1, @@ -89,6 +92,7 @@ export enum AuditLogEvent { /** * https://discord.com/developers/docs/resources/audit-log#audit-log-entry-object-optional-audit-entry-info + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export interface APIAuditLogOptions { /** @@ -154,6 +158,9 @@ export interface APIAuditLogOptions { role_name?: string; } +/** + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. + */ export enum AuditLogOptionsType { Member = 'member', Role = 'role', @@ -161,6 +168,7 @@ export enum AuditLogOptionsType { /** * https://discord.com/developers/docs/resources/audit-log#audit-log-change-object-audit-log-change-structure + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChange = | APIAuditLogChangeKeyName @@ -216,51 +224,61 @@ export type APIAuditLogChange = /** * Returned when a guild's name is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyName = AuditLogChangeData<'name', string>; /** * Returned when a guild's icon is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyIconHash = AuditLogChangeData<'icon_hash', string>; /** * Returned when a guild's splash is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeySplashHash = AuditLogChangeData<'splash_hash', string>; /** * Returned when a guild's owner ID is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyOwnerID = AuditLogChangeData<'owner_id', string>; /** * Returned when a guild's region is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyRegion = AuditLogChangeData<'region', string>; /** * Returned when a guild's afk_channel_id is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyAFKChannelID = AuditLogChangeData<'afk_channel_id', string>; /** * Returned when a guild's afk_timeout is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyAFKTimeout = AuditLogChangeData<'afk_timeout', number>; /** * Returned when a guild's mfa_level is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyMFALevel = AuditLogChangeData<'mfa_level', GuildMFALevel>; /** * Returned when a guild's verification_level is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyVerificationLevel = AuditLogChangeData<'verification_level', GuildVerificationLevel>; /** * Returned when a guild's explicit_content_filter is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyExplicitContentFilter = AuditLogChangeData< 'explicit_content_filter', @@ -269,6 +287,7 @@ export type APIAuditLogChangeKeyExplicitContentFilter = AuditLogChangeData< /** * Returned when a guild's default_message_notifications is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyDefaultMessageNotifications = AuditLogChangeData< 'default_message_notifications', @@ -277,180 +296,215 @@ export type APIAuditLogChangeKeyDefaultMessageNotifications = AuditLogChangeData /** * Returned when a guild's vanity_url_code is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyVanityURLCode = AuditLogChangeData<'vanity_url_code', string>; /** * Returned when new role(s) are added + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKey$Add = AuditLogChangeData<'$add', APIRole[]>; /** * Returned when role(s) are removed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKey$Remove = AuditLogChangeData<'$remove', APIRole[]>; /** * Returned when there is a change in number of days after which inactive and role-unassigned members are kicked + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyPruneDeleteDays = AuditLogChangeData<'prune_delete_days', number>; /** * Returned when a guild's widget is enabled + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyWidgetEnabled = AuditLogChangeData<'widget_enabled', boolean>; /** * Returned when a guild's widget_channel_id is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyWidgetChannelID = AuditLogChangeData<'widget_channel_id', string>; /** * Returned when a guild's system_channel_id is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeySystemChannelID = AuditLogChangeData<'system_channel_id', string>; /** * Returned when a channel's position is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyPosition = AuditLogChangeData<'position', number>; /** * Returned when a channel's topic is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyTopic = AuditLogChangeData<'topic', string>; /** * Returned when a voice channel's bitrate is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyBitrate = AuditLogChangeData<'bitrate', number>; /** * Returned when a channel's permission overwrites is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyPermissionOverwrites = AuditLogChangeData<'permission_overwrites', APIOverwrite[]>; /** * Returned when a channel's NSFW restriction is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyNSFW = AuditLogChangeData<'nsfw', boolean>; /** * The application ID of the added or removed Webhook or Bot + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyApplicationID = AuditLogChangeData<'application_id', string>; /** * Returned when a channel's amount of seconds a user has to wait before sending another message * is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyRateLimitPerUser = AuditLogChangeData<'rate_limit_per_user', number>; /** * Returned when a permission bitfield is changed * @deprecated Use `permissions_new` instead + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyPermissions = AuditLogChangeData<'permissions', number>; /** * Returned when a permission bitfield is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyPermissionsNew = AuditLogChangeData<'permissions_new', string>; /** * Returned when a role's color is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyColor = AuditLogChangeData<'color', number>; /** * Returned when a role's hoist status is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyHoist = AuditLogChangeData<'hoist', boolean>; /** * Returned when a role's mentionable status is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyMentionable = AuditLogChangeData<'mentionable', boolean>; /** * Returned when an overwrite's allowed permissions bitfield is changed * @deprecated Use `allow_new` instead + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyAllow = AuditLogChangeData<'allow', number>; /** * Returned when an overwrite's allowed permissions bitfield is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyAllowNew = AuditLogChangeData<'allow_new', string>; /** * Returned when an overwrite's denied permissions bitfield is changed * @deprecated Use `deny_new` instead + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyDeny = AuditLogChangeData<'deny', number>; /** * Returned when an overwrite's denied permissions bitfield is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyDenyNew = AuditLogChangeData<'deny_new', string>; /** * Returned when an invite's code is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyCode = AuditLogChangeData<'code', string>; /** * Returned when an invite's channel_id is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyChannelID = AuditLogChangeData<'channel_id', string>; /** * Returned when an invite's inviter_id is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyInviterID = AuditLogChangeData<'inviter_id', string>; /** * Returned when an invite's max_uses is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyMaxUses = AuditLogChangeData<'max_uses', number>; /** * Returned when an invite's uses is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyUses = AuditLogChangeData<'uses', number>; /** * Returned when an invite's max_age is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyMaxAge = AuditLogChangeData<'max_age', number>; /** * Returned when an invite's temporary status is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyTemporary = AuditLogChangeData<'temporary', boolean>; /** * Returned when a user's deaf status is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyDeaf = AuditLogChangeData<'deaf', boolean>; /** * Returned when a user's mute status is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyMute = AuditLogChangeData<'mute', boolean>; /** * Returned when a user's nick is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyNick = AuditLogChangeData<'mute', boolean>; /** * Returned when a user's avatar_hash is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyAvatarHash = AuditLogChangeData<'avatar_hash', string>; /** * The ID of the changed entity - sometimes used in conjunction with other keys + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export interface APIAuditLogChangeKeyID { key: 'id'; @@ -460,26 +514,31 @@ export interface APIAuditLogChangeKeyID { /** * The type of entity created + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyType = AuditLogChangeData<'type', ChannelType | string>; /** * Returned when an integration's enable_emoticons is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyEnableEmoticons = AuditLogChangeData<'enable_emoticons', boolean>; /** * Returned when an integration's expire_behavior is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyExpireBehavior = AuditLogChangeData<'expire_behavior', IntegrationExpireBehavior>; /** * Returned when an integration's expire_grace_period is changed + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type APIAuditLogChangeKeyExpireGracePeriod = AuditLogChangeData<'expire_grace_period', number>; /** * @internal + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ interface AuditLogChangeData { key: K; diff --git a/v6/payloads/channel.ts b/v6/payloads/channel.ts index df745be9..aaf79a32 100644 --- a/v6/payloads/channel.ts +++ b/v6/payloads/channel.ts @@ -8,6 +8,7 @@ import type { APIUser } from './user'; /** * Not documented, but partial only includes id, name, and type + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export interface APIPartialChannel { id: string; @@ -17,6 +18,7 @@ export interface APIPartialChannel { /** * https://discord.com/developers/docs/resources/channel#channel-object-channel-structure + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export interface APIChannel extends APIPartialChannel { guild_id?: string; @@ -39,6 +41,7 @@ export interface APIChannel extends APIPartialChannel { /** * https://discord.com/developers/docs/resources/channel#channel-object-channel-types + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export enum ChannelType { GUILD_TEXT = 0, @@ -52,6 +55,7 @@ export enum ChannelType { /** * https://discord.com/developers/docs/resources/channel#message-object-message-structure + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export interface APIMessage { id: string; @@ -78,13 +82,15 @@ export interface APIMessage { application?: APIMessageApplication; message_reference?: APIMessageReference; flags?: MessageFlags; + referenced_message?: APIMessage | null; } /** * https://discord.com/developers/docs/resources/channel#message-object-message-types + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export enum MessageType { - DEFAULT = 0, + DEFAULT, RECIPIENT_ADD, RECIPIENT_REMOVE, CALL, @@ -105,6 +111,7 @@ export enum MessageType { /** * https://discord.com/developers/docs/resources/channel#message-object-message-activity-structure + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export interface APIMessageActivity { type: MessageActivityType; @@ -113,6 +120,7 @@ export interface APIMessageActivity { /** * https://discord.com/developers/docs/resources/channel#message-object-message-application-structure + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export interface APIMessageApplication { id: string; @@ -124,6 +132,7 @@ export interface APIMessageApplication { /** * https://discord.com/developers/docs/resources/channel#message-object-message-reference-structure + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export interface APIMessageReference { message_id?: string; @@ -133,6 +142,7 @@ export interface APIMessageReference { /** * https://discord.com/developers/docs/resources/channel#message-object-message-activity-types + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export enum MessageActivityType { JOIN = 1, @@ -143,6 +153,7 @@ export enum MessageActivityType { /** * https://discord.com/developers/docs/resources/channel#message-object-message-flags + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export enum MessageFlags { CROSSPOSTED = 1 << 0, @@ -154,6 +165,7 @@ export enum MessageFlags { /** * https://discord.com/developers/docs/resources/channel#reaction-object-reaction-structure + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export interface APIReaction { count: number; @@ -163,6 +175,7 @@ export interface APIReaction { /** * https://discord.com/developers/docs/resources/channel#overwrite-object-overwrite-structure + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export interface APIOverwrite { id: string; @@ -179,6 +192,9 @@ export interface APIOverwrite { deny_new: string; } +/** + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. + */ export enum OverwriteType { Member = 'member', Role = 'role', @@ -186,6 +202,7 @@ export enum OverwriteType { /** * https://discord.com/developers/docs/resources/channel#embed-object-embed-structure + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export interface APIEmbed { title?: string; @@ -209,6 +226,7 @@ export interface APIEmbed { /** * https://discord.com/developers/docs/resources/channel#embed-object-embed-types * @deprecated *Embed types should be considered deprecated and might be removed in a future API version* + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export enum EmbedType { Rich = 'rich', @@ -221,6 +239,7 @@ export enum EmbedType { /** * https://discord.com/developers/docs/resources/channel#embed-object-embed-thumbnail-structure + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export interface APIEmbedThumbnail { url?: string; @@ -231,6 +250,7 @@ export interface APIEmbedThumbnail { /** * https://discord.com/developers/docs/resources/channel#embed-object-embed-video-structure + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export interface APIEmbedVideo { url?: string; @@ -240,6 +260,7 @@ export interface APIEmbedVideo { /** * https://discord.com/developers/docs/resources/channel#embed-object-embed-image-structure + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export interface APIEmbedImage { url?: string; @@ -250,6 +271,7 @@ export interface APIEmbedImage { /** * https://discord.com/developers/docs/resources/channel#embed-object-embed-provider-structure + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export interface APIEmbedProvider { name?: string; @@ -258,6 +280,7 @@ export interface APIEmbedProvider { /** * https://discord.com/developers/docs/resources/channel#embed-object-embed-author-structure + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export interface APIEmbedAuthor { name?: string; @@ -268,6 +291,7 @@ export interface APIEmbedAuthor { /** * https://discord.com/developers/docs/resources/channel#embed-object-embed-footer-structure + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export interface APIEmbedFooter { text: string; @@ -277,6 +301,7 @@ export interface APIEmbedFooter { /** * https://discord.com/developers/docs/resources/channel#embed-object-embed-field-structure + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export interface APIEmbedField { name: string; @@ -286,6 +311,7 @@ export interface APIEmbedField { /** * https://discord.com/developers/docs/resources/channel#attachment-object-attachment-structure + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export interface APIAttachment { id: string; @@ -299,6 +325,7 @@ export interface APIAttachment { /** * https://discord.com/developers/docs/resources/channel#channel-mention-object-channel-mention-structure + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export interface APIChannelMention { id: string; @@ -307,6 +334,9 @@ export interface APIChannelMention { name: string; } +/** + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. + */ export interface APIFollowedChannel { channel_id: string; webhook_id: string; diff --git a/v6/payloads/emoji.ts b/v6/payloads/emoji.ts index 3f038a25..74c3731a 100644 --- a/v6/payloads/emoji.ts +++ b/v6/payloads/emoji.ts @@ -6,6 +6,7 @@ import type { APIUser } from './user'; /** * Not documented but mentioned + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export interface APIPartialEmoji { id: string | null; @@ -15,6 +16,7 @@ export interface APIPartialEmoji { /** * https://discord.com/developers/docs/resources/emoji#emoji-object-emoji-structure + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export interface APIEmoji extends APIPartialEmoji { roles?: string[]; diff --git a/v6/payloads/gateway.ts b/v6/payloads/gateway.ts index c2a545a3..2bb8d11e 100644 --- a/v6/payloads/gateway.ts +++ b/v6/payloads/gateway.ts @@ -7,6 +7,7 @@ import type { APIUser } from './user'; /** * https://discord.com/developers/docs/topics/gateway#get-gateway + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export interface APIGatewayInfo { url: string; @@ -14,6 +15,7 @@ export interface APIGatewayInfo { /** * https://discord.com/developers/docs/topics/gateway#get-gateway-bot + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export interface APIGatewayBotInfo extends APIGatewayInfo { shards: number; @@ -22,6 +24,7 @@ export interface APIGatewayBotInfo extends APIGatewayInfo { /** * https://discord.com/developers/docs/topics/gateway#session-start-limit-object + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export interface APIGatewaySessionStartLimit { total: number; @@ -31,6 +34,7 @@ export interface APIGatewaySessionStartLimit { /** * https://discord.com/developers/docs/topics/gateway#presence-update-presence-update-event-fields + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export interface GatewayPresenceUpdate { user: Partial & { @@ -46,6 +50,9 @@ export interface GatewayPresenceUpdate { nick?: string | null; } +/** + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ export enum PresenceUpdateStatus { DoNotDisturb = 'dnd', Idle = 'idle', @@ -56,11 +63,13 @@ export enum PresenceUpdateStatus { /** * https://discord.com/developers/docs/topics/gateway#client-status-object + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type GatewayPresenceClientStatus = Partial>; /** * https://discord.com/developers/docs/topics/gateway#activity-object + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export interface GatewayActivity { name: string; @@ -81,6 +90,7 @@ export interface GatewayActivity { /** * https://discord.com/developers/docs/topics/gateway#activity-object-activity-types + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export enum ActivityType { Game, @@ -93,6 +103,7 @@ export enum ActivityType { /** * https://discord.com/developers/docs/topics/gateway#activity-object-activity-timestamps + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export interface GatewayActivityTimestamps { start?: number; @@ -101,11 +112,13 @@ export interface GatewayActivityTimestamps { /** * https://discord.com/developers/docs/topics/gateway#activity-object-activity-emoji + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type GatewayActivityEmoji = Partial> & Pick; /** * https://discord.com/developers/docs/topics/gateway#activity-object-activity-party + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export interface GatewayActivityParty { id?: string; @@ -115,6 +128,7 @@ export interface GatewayActivityParty { /** * https://discord.com/developers/docs/topics/gateway#activity-object-activity-assets + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type GatewayActivityAssets = Partial< Record<'large_image' | 'large_text' | 'small_image' | 'small_text', string> @@ -122,11 +136,13 @@ export type GatewayActivityAssets = Partial< /** * https://discord.com/developers/docs/topics/gateway#activity-object-activity-secrets + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export type GatewayActivitySecrets = Partial>; /** * https://discord.com/developers/docs/topics/gateway#activity-object-activity-flags + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export enum ActivityFlags { INSTANCE = 1 << 0, diff --git a/v6/payloads/guild.ts b/v6/payloads/guild.ts index 963dad69..4b75b3ae 100644 --- a/v6/payloads/guild.ts +++ b/v6/payloads/guild.ts @@ -11,12 +11,16 @@ import type { GatewayVoiceState } from './voice'; /** * https://discord.com/developers/docs/resources/guild#unavailable-guild-object + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. */ export interface APIUnavailableGuild { id: string; unavailable: boolean; } +/** + * @deprecated API and Gateway v6 are deprecated and the types will not receive further updates, please update to v8. + */ export interface APIPartialGuild extends Omit, Pick { name: string; icon: string | null; @@ -29,6 +33,9 @@ export interface APIPartialGuild extends Omit & { +/** + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ +export interface APIGuildCreateOverwrite extends RESTPutAPIChannelPermissionsJSONBody { id: number | string; - allow: number | string; - deny: number | string; -}; +} +/** + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ export type APIGuildCreatePartialChannel = Partial< Pick > & { @@ -33,13 +37,16 @@ export type APIGuildCreatePartialChannel = Partial< permission_overwrites?: APIGuildCreateOverwrite[]; }; +/** + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ export interface APIGuildCreateRole extends RESTPostAPIGuildRoleJSONBody { id: number | string; - permissions?: number; } /** * https://discord.com/developers/docs/resources/guild#create-guild + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface RESTPostAPIGuildsJSONBody { name: string; @@ -55,10 +62,14 @@ export interface RESTPostAPIGuildsJSONBody { system_channel_id?: number | string; } +/** + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ export type RESTPostAPIGuildsResult = APIGuild; /** * https://discord.com/developers/docs/resources/guild#get-guild + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface RESTGetAPIGuildQuery { with_counts?: boolean; @@ -68,11 +79,13 @@ export type RESTGetAPIGuildResult = APIGuild; /** * https://discord.com/developers/docs/resources/guild#get-guild-preview + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type RESTGetAPIGuildPreviewResult = APIGuildPreview; /** * https://discord.com/developers/docs/resources/guild#modify-guild + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface RESTPatchAPIGuildJSONBody { name?: string; @@ -95,20 +108,26 @@ export interface RESTPatchAPIGuildJSONBody { description?: string | null; } +/** + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ export type RESTPatchAPIGuildResult = APIGuild; /** * https://discord.com/developers/docs/resources/guild#delete-guild + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type RESTDeleteAPIGuildResult = never; /** * https://discord.com/developers/docs/resources/guild#get-guild-channels + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type RESTGetAPIGuildChannelsResult = APIChannel[]; /** * https://discord.com/developers/docs/resources/guild#create-guild-channel + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type RESTPostAPIGuildChannelJSONBody = Partial< Pick< @@ -122,6 +141,7 @@ export type RESTPostAPIGuildChannelResult = APIChannel; /** * https://discord.com/developers/docs/resources/guild#modify-guild-channel-positions + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type RESTPatchAPIGuildChannelPositionsJSONBody = Array<{ id: string; @@ -130,32 +150,47 @@ export type RESTPatchAPIGuildChannelPositionsJSONBody = Array<{ parent_id?: string | null; }>; +/** + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ export type RESTPatchAPIGuildChannelPositionsResult = never; /** * https://discord.com/developers/docs/resources/guild#get-guild-member + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type RESTGetAPIGuildMemberResult = APIGuildMember; /** * https://discord.com/developers/docs/resources/guild#list-guild-members + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface RESTGetAPIGuildMembersQuery { limit?: number; after?: string; } +/** + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ export type RESTGetAPIGuildMembersResult = APIGuildMember[]; +/** + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ export interface RESTGetAPIGuildMembersSearchQuery { query: string; limit?: number; } +/** + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ export type RESTGetAPIGuildMembersSearchResult = APIGuildMember[]; /** * https://discord.com/developers/docs/resources/guild#add-guild-member + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface RESTPutAPIGuildMemberJSONBody { access_token: string; @@ -165,10 +200,14 @@ export interface RESTPutAPIGuildMemberJSONBody { deaf?: boolean; } +/** + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ export type RESTPutAPIGuildMemberResult = APIGuildMember | undefined; /** * https://discord.com/developers/docs/resources/guild#modify-guild-member + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface RESTPatchAPIGuildMemberJSONBody { nick?: string | null; @@ -178,64 +217,83 @@ export interface RESTPatchAPIGuildMemberJSONBody { channel_id?: string | null; } +/** + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ export type RESTPatchAPIGuildMemberResult = never; /** * https://discord.com/developers/docs/resources/guild#modify-current-user-nick + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface RESTPatchAPICurrentGuildMemberNicknameJSONBody { nick?: string | null; } +/** + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ export type RESTPatchAPICurrentGuildMemberNicknameResult = Required; /** * https://discord.com/developers/docs/resources/guild#add-guild-member-role + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type RESTPutAPIGuildMemberRoleResult = never; /** * https://discord.com/developers/docs/resources/guild#remove-guild-member-role + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type RESTDeleteAPIGuildMemberRoleResult = never; /** * https://discord.com/developers/docs/resources/guild#remove-guild-member + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type RESTDeleteAPIGuildMemberResult = never; /** * https://discord.com/developers/docs/resources/guild#get-guild-bans + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type RESTGetAPIGuildBansResult = APIBan[]; /** * https://discord.com/developers/docs/resources/guild#get-guild-ban + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type RESTGetAPIGuildBanResult = APIBan; /** * https://discord.com/developers/docs/resources/guild#create-guild-ban + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface RESTPutAPIGuildBanJSONBody { delete_message_days?: number; reason?: string; } +/** + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ export type RESTPutAPIGuildBanResult = never; /** * https://discord.com/developers/docs/resources/guild#remove-guild-ban + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type RESTDeleteAPIGuildBanResult = never; /** * https://discord.com/developers/docs/resources/guild#get-guild-roles + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type RESTGetAPIGuildRolesResult = APIRole[]; /** * https://discord.com/developers/docs/resources/guild#create-guild-role + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface RESTPostAPIGuildRoleJSONBody { name?: string | null; @@ -245,20 +303,28 @@ export interface RESTPostAPIGuildRoleJSONBody { mentionable?: boolean | null; } +/** + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ export type RESTPostAPIGuildRoleResult = APIRole; /** * https://discord.com/developers/docs/resources/guild#modify-guild-role-positions + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type RESTPatchAPIGuildRolePositionsJSONBody = Array<{ id: string; position?: number; }>; +/** + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ export type RESTPatchAPIGuildRolePositionsResult = APIRole[]; /** * https://discord.com/developers/docs/resources/guild#modify-guild-role + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface RESTPatchAPIGuildRoleJSONBody { name?: string; @@ -268,15 +334,20 @@ export interface RESTPatchAPIGuildRoleJSONBody { mentionable?: boolean; } +/** + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ export type RESTPatchAPIGuildRoleResult = APIRole; /** * https://discord.com/developers/docs/resources/guild#delete-guild-role + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type RESTDeleteAPIGuildRoleResult = never; /** * https://discord.com/developers/docs/resources/guild#get-guild-prune-count + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface RESTGetAPIGuildPruneCountQuery { days?: number; @@ -289,12 +360,16 @@ export interface RESTGetAPIGuildPruneCountQuery { include_roles?: string; } +/** + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ export interface RESTGetAPIGuildPruneCountResult { pruned: number; } /** * https://discord.com/developers/docs/resources/guild#begin-guild-prune + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface RESTPostAPIGuildPruneJSONBody { days?: number; @@ -302,41 +377,55 @@ export interface RESTPostAPIGuildPruneJSONBody { include_roles?: string[]; } +/** + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ export interface RESTPostAPIGuildPruneResult { pruned: number | null; } /** * https://discord.com/developers/docs/resources/guild#get-guild-voice-regions + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type RESTGetAPIGuildVoiceRegionsResult = APIVoiceRegion[]; /** * https://discord.com/developers/docs/resources/guild#get-guild-invites + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type RESTGetAPIGuildInvitesResult = APIInvite[]; /** * https://discord.com/developers/docs/resources/guild#get-guild-integrations + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface RESTGetAPIGuildIntegrationsQuery { include_applications?: boolean; } +/** + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ export type RESTGetAPIGuildIntegrationsResult = APIGuildIntegration[]; /** * https://discord.com/developers/docs/resources/guild#create-guild-integration + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface RESTPostAPIGuildIntegrationJSONBody { type: string; id: string; } +/** + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ export type RESTPostAPIGuildIntegrationResult = never; /** * https://discord.com/developers/docs/resources/guild#modify-guild-integration + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface RESTPatchAPIGuildIntegrationJSONBody { expire_behavior?: IntegrationExpireBehavior | null; @@ -348,28 +437,54 @@ export type RESTPatchAPIGuildIntegrationResult = never; /** * https://discord.com/developers/docs/resources/guild#delete-guild-integration + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type RESTDeleteAPIGuildIntegrationResult = never; /** * https://discord.com/developers/docs/resources/guild#sync-guild-integration + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type RESTPostAPIGuildIntegrationSyncResult = never; /** - * https://discord.com/developers/docs/resources/guild#get-guild-widget + * @deprecated Renamed to RESTGetAPIGuildWidgetSettingsResult + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ -export type RESTGetAPIGuildWidgetResult = APIGuildWidget; +export type RESTGetAPIGuildWidgetResult = APIGuildWidgetSettings; + +/** + * https://discord.com/developers/docs/resources/guild#get-guild-widget-settings + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ +export type RESTGetAPIGuildWidgetSettingsResult = APIGuildWidgetSettings; + +/** + * @deprecated Renamed to RESTPatchAPIGuildWidgetSettingsJSONBody + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ +export type RESTPatchAPIGuildWidgetJSONBody = Partial; /** * https://discord.com/developers/docs/resources/guild#modify-guild-widget + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ -export type RESTPatchAPIGuildWidgetJSONBody = Partial; +export type RESTPatchAPIGuildWidgetSettingsJSONBody = Partial; -export type RESTPatchAPIGuildWidgetResult = APIGuildWidget; +/** + * @deprecated Use `RESTPatchAPIGuildWidgetSettingsResult` instead + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ +export type RESTPatchAPIGuildWidgetResult = APIGuildWidgetSettings; + +/** + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ +export type RESTPatchAPIGuildWidgetSettingsResult = APIGuildWidgetSettings; /** * https://discord.com/developers/docs/resources/guild#get-guild-vanity-url + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface RESTGetAPIGuildVanityUrlResult { code: string | null; @@ -378,6 +493,7 @@ export interface RESTGetAPIGuildVanityUrlResult { /** * https://discord.com/developers/docs/resources/guild#get-guild-widget-image + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface RESTGetAPIGuildWidgetImageQuery { style?: GuildWidgetStyle; @@ -386,5 +502,6 @@ export interface RESTGetAPIGuildWidgetImageQuery { /** * Note: while the return type is `ArrayBuffer`, the expected result is * a buffer of sorts (depends if in browser or on node.js/deno). + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type RESTGetAPIGuildWidgetImageResult = ArrayBuffer; diff --git a/v6/rest/index.ts b/v6/rest/index.ts index 9edd04a3..dd95d2be 100644 --- a/v6/rest/index.ts +++ b/v6/rest/index.ts @@ -9,7 +9,14 @@ export * from './user'; export * from './voice'; export * from './webhook'; +/** + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ export const APIVersion = '6'; + +/** + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ export const Routes = { /** * Route for: @@ -351,12 +358,19 @@ export const Routes = { return `/guilds/${guildID}/integrations/${integrationID}/sync`; }, + /** + * @deprecated Use `guildWidgetSettings` instead + */ + guildWidget(guildID: string) { + return `/guilds/${guildID}/widget`; + }, + /** * Route for: * - GET `/guilds/{guild.id}/widget` * - PATCH `/guilds/{guild.id}/widget` */ - guildWidget(guildID: string) { + guildWidgetSettings(guildID: string) { return `/guilds/${guildID}/widget`; }, diff --git a/v6/rest/invite.ts b/v6/rest/invite.ts index e215a680..d5cc6d03 100644 --- a/v6/rest/invite.ts +++ b/v6/rest/invite.ts @@ -2,6 +2,7 @@ import type { APIInvite } from '../payloads'; /** * https://discord.com/developers/docs/resources/invite#get-invite + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface RESTGetAPIInviteQuery { with_counts?: boolean; @@ -11,5 +12,6 @@ export type RESTGetAPIInviteResult = APIInvite; /** * https://discord.com/developers/docs/resources/invite#delete-invite + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type RESTDeleteAPIInviteResult = APIInvite; diff --git a/v6/rest/oauth2.ts b/v6/rest/oauth2.ts index fc0b1316..d3ed608c 100644 --- a/v6/rest/oauth2.ts +++ b/v6/rest/oauth2.ts @@ -2,11 +2,13 @@ import type { APIApplication, APIGuild, APIWebhook } from '../payloads'; /** * https://discord.com/developers/docs/topics/oauth2#get-current-application-information + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type RESTGetAPIOauth2CurrentApplicationResult = APIApplication; /** * https://discord.com/developers/docs/topics/oauth2#authorization-code-grant + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface RESTOAuth2AuthorizationQuery { response_type: 'code'; @@ -19,6 +21,7 @@ export interface RESTOAuth2AuthorizationQuery { /** * https://discord.com/developers/docs/topics/oauth2#authorization-code-grant-redirect-url-example + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface RESTOAuth2AuthorizationQueryResult { code: string; @@ -27,6 +30,7 @@ export interface RESTOAuth2AuthorizationQueryResult { /** * https://discord.com/developers/docs/topics/oauth2#authorization-code-grant-redirect-url-example + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface RESTPostOAuth2AccessTokenURIEncodedData { client_id: string; @@ -39,6 +43,7 @@ export interface RESTPostOAuth2AccessTokenURIEncodedData { /** * https://discord.com/developers/docs/topics/oauth2#authorization-code-grant-access-token-response + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface RESTPostOAuth2AccessTokenResult { access_token: string; @@ -50,6 +55,7 @@ export interface RESTPostOAuth2AccessTokenResult { /** * https://discord.com/developers/docs/topics/oauth2#authorization-code-grant-refresh-token-exchange-example + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface RESTPostOAuth2RefreshTokenURIEncodedData { client_id: string; @@ -64,6 +70,7 @@ export type RESTPostOAuth2RefreshTokenResult = RESTPostOAuth2AccessTokenResult; /** * https://discord.com/developers/docs/topics/oauth2#implicit-grant + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface RESTOAuth2ImplicitAuthorizationQuery { response_type: 'token'; @@ -76,11 +83,13 @@ export interface RESTOAuth2ImplicitAuthorizationQuery { /** * https://discord.com/developers/docs/topics/oauth2#implicit-grant-redirect-url-example + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type RESTOAuth2ImplicitAuthorizationURIFragmentResult = Omit; /** * https://discord.com/developers/docs/topics/oauth2#client-credentials-grant + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface RESTPostOAuth2ClientCredentialsURIEncodedData { client_id: string; @@ -89,10 +98,14 @@ export interface RESTPostOAuth2ClientCredentialsURIEncodedData { scope: string; } +/** + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ export type RESTPostOAuth2ClientCredentialsResult = RESTOAuth2ImplicitAuthorizationURIFragmentResult; /** * https://discord.com/developers/docs/topics/oauth2#bot-authorization-flow-bot-auth-parameters + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface RESTOAuth2BotAuthorizationQuery { client_id: string; @@ -107,6 +120,7 @@ export interface RESTOAuth2BotAuthorizationQuery { /** * https://discord.com/developers/docs/topics/oauth2#advanced-bot-authorization + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface RESTOAuth2AdvancedBotAuthorizationQuery { client_id: string; @@ -124,6 +138,9 @@ export interface RESTOAuth2AdvancedBotAuthorizationQuery { redirect_uri?: string; } +/** + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ export interface RESTOAuth2AdvancedBotAuthorizationQueryResult { code: string; state?: string; @@ -133,6 +150,7 @@ export interface RESTOAuth2AdvancedBotAuthorizationQueryResult { /** * https://discord.com/developers/docs/topics/oauth2#advanced-bot-authorization-extended-bot-authorization-access-token-example + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface RESTPostOAuth2AccessTokenWithBotAndGuildsScopeResult { access_token: string; @@ -145,6 +163,7 @@ export interface RESTPostOAuth2AccessTokenWithBotAndGuildsScopeResult { /** * https://discord.com/developers/docs/topics/oauth2#webhooks-webhook-token-response-example + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface RESTPostOAuth2AccessTokenWithBotAndWebhookIncomingScopeResult { access_token: string; @@ -155,5 +174,8 @@ export interface RESTPostOAuth2AccessTokenWithBotAndWebhookIncomingScopeResult { webhook: APIWebhook; } +/** + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ export type RESTPostOAuth2AccessTokenWithBotAndGuildsAndWebhookIncomingScopeResult = RESTPostOAuth2AccessTokenWithBotAndGuildsScopeResult & RESTPostOAuth2AccessTokenWithBotAndWebhookIncomingScopeResult; diff --git a/v6/rest/user.ts b/v6/rest/user.ts index 77796936..c47ce563 100644 --- a/v6/rest/user.ts +++ b/v6/rest/user.ts @@ -2,26 +2,33 @@ import type { APIChannel, APIConnection, APIUser, GuildFeature } from '../payloa /** * https://discord.com/developers/docs/resources/user#get-current-user + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type RESTGetAPICurrentUserResult = APIUser; /** * https://discord.com/developers/docs/resources/user#get-user + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type RESTGetAPIUserResult = APIUser; /** * https://discord.com/developers/docs/resources/user#modify-current-user + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface RESTPatchAPICurrentUserJSONBody { username?: string; avatar?: string | null; } +/** + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ export type RESTPatchAPICurrentUserResult = APIUser; /** * https://discord.com/developers/docs/resources/user#get-current-user-guilds + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface RESTGetAPICurrentUserGuildsQuery { before?: string; @@ -29,6 +36,9 @@ export interface RESTGetAPICurrentUserGuildsQuery { limit?: number; } +/** + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ export interface RESTAPIPartialCurrentUserGuild { id: string; name: string; @@ -42,23 +52,32 @@ export interface RESTAPIPartialCurrentUserGuild { permissions_new: string; } +/** + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ export type RESTGetAPICurrentUserGuildsResult = RESTAPIPartialCurrentUserGuild[]; /** * https://discord.com/developers/docs/resources/user#leave-guild + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type RESTDeleteAPICurrentUserGuildResult = never; /** * https://discord.com/developers/docs/resources/user#create-dm + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface RESTPostAPICurrentUserCreateDMChannelJSONBody { recipient_id: string; } +/** + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ export type RESTPostAPICurrentUserCreateDMChannelResult = APIChannel; /** * https://discord.com/developers/docs/resources/user#get-user-connections + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type RESTGetAPICurrentUserConnectionsResult = APIConnection[]; diff --git a/v6/rest/voice.ts b/v6/rest/voice.ts index c50f4760..24b75365 100644 --- a/v6/rest/voice.ts +++ b/v6/rest/voice.ts @@ -2,5 +2,6 @@ import type { APIVoiceRegion } from '../payloads'; /** * https://discord.com/developers/docs/resources/voice#list-voice-regions + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type GetAPIVoiceRegionsResult = APIVoiceRegion[]; diff --git a/v6/rest/webhook.ts b/v6/rest/webhook.ts index b89856fb..5346e9f6 100644 --- a/v6/rest/webhook.ts +++ b/v6/rest/webhook.ts @@ -3,36 +3,45 @@ import type { APIEmbed, APIMessage, APIWebhook } from '../payloads'; /** * https://discord.com/developers/docs/resources/webhook#create-webhook + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface RESTPostAPIChannelWebhookJSONBody { name: string; avatar?: string | null; } +/** + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ export type RESTPostAPIChannelWebhookResult = APIWebhook; /** * https://discord.com/developers/docs/resources/webhook#get-channel-webhooks + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type RESTGetAPIChannelWebhooksResult = APIWebhook[]; /** * https://discord.com/developers/docs/resources/webhook#get-guild-webhooks + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type RESTGetAPIGuildWebhooksResult = APIWebhook[]; /** * https://discord.com/developers/docs/resources/webhook#get-webhook + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type RESTGetAPIWebhookResult = APIWebhook; /** * https://discord.com/developers/docs/resources/webhook#get-webhook-with-token + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type RESTGetAPIWebhookWithTokenResult = Omit; /** * https://discord.com/developers/docs/resources/webhook#modify-webhook + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface RESTPatchAPIWebhookJSONBody { name?: string; @@ -40,23 +49,32 @@ export interface RESTPatchAPIWebhookJSONBody { channel_id?: string; } +/** + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ export type RESTPatchAPIWebhookResult = APIWebhook; /** * https://discord.com/developers/docs/resources/webhook#modify-webhook-with-token + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type RESTPatchAPIWebhookWithTokenJSONBody = Omit; +/** + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ export type RESTPatchAPIWebhookWithTokenResult = Omit; /** * https://discord.com/developers/docs/resources/webhook#delete-webhook + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type RESTDeleteAPIWebhookResult = never; export type RESTDeleteAPIWebhookWithTokenResult = never; /** * https://discord.com/developers/docs/resources/webhook#execute-webhook + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface RESTPostAPIWebhookWithTokenJSONBody { content?: string; @@ -69,6 +87,7 @@ export interface RESTPostAPIWebhookWithTokenJSONBody { /** * https://discord.com/developers/docs/resources/webhook#execute-webhook + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type RESTPostAPIWebhookWithTokenFormDataBody = | { @@ -90,11 +109,15 @@ export type RESTPostAPIWebhookWithTokenFormDataBody = /** * https://discord.com/developers/docs/resources/webhook#execute-webhook-querystring-params + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export interface RESTPostAPIWebhookWithTokenQuery { wait?: boolean; } +/** + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. + */ export type RESTPostAPIWebhookWithTokenResult = never; /** @@ -102,15 +125,18 @@ export type RESTPostAPIWebhookWithTokenResult = never; * the `wait` query parameter set to `true` * * @see https://discord.com/developers/docs/resources/webhook#execute-webhook-querystring-params + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type RESTPostAPIWebhookWithTokenWaitResult = APIMessage; /** * https://discord.com/developers/docs/resources/webhook#execute-slackcompatible-webhook-querystring-params + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type RESTPostAPIWebhookWithTokenSlackQuery = RESTPostAPIWebhookWithTokenQuery; /** * https://discord.com/developers/docs/resources/webhook#execute-githubcompatible-webhook-querystring-params + * @deprecated API v6 is deprecated and the types will not receive further updates, please update to v8. */ export type RESTPostAPIWebhookWithTokenGitHubQuery = RESTPostAPIWebhookWithTokenQuery; diff --git a/v8/gateway/index.ts b/v8/gateway/index.ts new file mode 100644 index 00000000..b29bce68 --- /dev/null +++ b/v8/gateway/index.ts @@ -0,0 +1,710 @@ +/** + * Types extracted from https://discord.com/developers/docs/topics/gateway + */ + +import type { + APIChannel, + APIEmoji, + APIGuild, + APIGuildMember, + APIMessage, + APIRole, + APIUnavailableGuild, + APIUser, + GatewayActivity, + GatewayPresenceUpdate as RawGatewayPresenceUpdate, + GatewayVoiceState, + InviteTargetUserType, + PresenceUpdateStatus, +} from '../payloads'; + +export const GatewayVersion = '8'; + +/** + * https://discord.com/developers/docs/topics/opcodes-and-status-codes#gateway-gateway-opcodes + */ +export enum GatewayOPCodes { + Dispatch, + Heartbeat, + Identify, + PresenceUpdate, + VoiceStateUpdate, + + Resume = 6, + Reconnect, + RequestGuildMembers, + InvalidSession, + Hello, + HeartbeatAck, +} + +/** + * https://discord.com/developers/docs/topics/opcodes-and-status-codes#gateway-gateway-close-event-codes + */ +export enum GatewayCloseCodes { + UnknownError = 4000, + UnknownOpCode, + DecodeError, + NotAuthenticated, + AuthenticationFailed, + AlreadyAuthenticated, + + InvalidSeq = 4007, + RateLimited, + SessionTimedOut, + InvalidShard, + ShardingRequired, + InvalidAPIVersion, + InvalidIntents, + DisallowedIntents, +} + +/** + * https://discord.com/developers/docs/topics/opcodes-and-status-codes#voice-voice-opcodes + */ +export enum VoiceOPCodes { + Identify, + SelectProtocol, + Ready, + Heartbeat, + SessionDescription, + Speaking, + HeartbeatAck, + Resume, + Hello, + Resumed, + + ClientDisconnect = 13, +} + +/** + * https://discord.com/developers/docs/topics/opcodes-and-status-codes#voice-voice-close-event-codes + */ +export enum VoiceCloseCodes { + UnknownOpCode = 4001, + + NotAuthenticated = 4003, + AuthenticationFailed, + AlreadyAuthenticated, + SessionNoLongerValid, + + SessionTimeout = 4009, + + ServerNotFound = 4011, + UnknownProtocol, + + Disconnected = 4014, + VoiceServerCrashed, + UnknownEncryptionMode, +} + +/** + * https://discord.com/developers/docs/topics/gateway#list-of-intents + */ +export enum GatewayIntentBits { + GUILDS = 1 << 0, + GUILD_MEMBERS = 1 << 1, + GUILD_BANS = 1 << 2, + GUILD_EMOJIS = 1 << 3, + GUILD_INTEGRATIONS = 1 << 4, + GUILD_WEBHOOKS = 1 << 5, + GUILD_INVITES = 1 << 6, + GUILD_VOICE_STATES = 1 << 7, + GUILD_PRESENCES = 1 << 8, + GUILD_MESSAGES = 1 << 9, + GUILD_MESSAGE_REACTIONS = 1 << 10, + GUILD_MESSAGE_TYPING = 1 << 11, + DIRECT_MESSAGES = 1 << 12, + DIRECT_MESSAGE_REACTIONS = 1 << 13, + DIRECT_MESSAGE_TYPING = 1 << 14, +} + +/** + * https://discord.com/developers/docs/topics/gateway#commands-and-events-gateway-events + */ +export enum GatewayDispatchEvents { + Ready = 'READY', + Resumed = 'RESUMED', + ChannelCreate = 'CHANNEL_CREATE', + ChannelUpdate = 'CHANNEL_UPDATE', + ChannelDelete = 'CHANNEL_DELETE', + ChannelPinsUpdate = 'CHANNEL_PINS_UPDATE', + GuildCreate = 'GUILD_CREATE', + GuildUpdate = 'GUILD_UPDATE', + GuildDelete = 'GUILD_DELETE', + GuildBanAdd = 'GUILD_BAN_ADD', + GuildBanRemove = 'GUILD_BAN_REMOVE', + GuildEmojisUpdate = 'GUILD_EMOJIS_UPDATE', + GuildIntegrationsUpdate = 'GUILD_INTEGRATIONS_UPDATE', + GuildMemberAdd = 'GUILD_MEMBER_ADD', + GuildMemberRemove = 'GUILD_MEMBER_REMOVE', + GuildMemberUpdate = 'GUILD_MEMBER_UPDATE', + GuildMembersChunk = 'GUILD_MEMBERS_CHUNK', + GuildRoleCreate = 'GUILD_ROLE_CREATE', + GuildRoleUpdate = 'GUILD_ROLE_UPDATE', + GuildRoleDelete = 'GUILD_ROLE_DELETE', + InviteCreate = 'INVITE_CREATE', + InviteDelete = 'INVITE_DELETE', + MessageCreate = 'MESSAGE_CREATE', + MessageUpdate = 'MESSAGE_UPDATE', + MessageDelete = 'MESSAGE_DELETE', + MessageDeleteBulk = 'MESSAGE_DELETE_BULK', + MessageReactionAdd = 'MESSAGE_REACTION_ADD', + MessageReactionRemove = 'MESSAGE_REACTION_REMOVE', + MessageReactionRemoveAll = 'MESSAGE_REACTION_REMOVE_ALL', + MessageReactionRemoveEmoji = 'MESSAGE_REACTION_REMOVE_EMOJI', + PresenceUpdate = 'PRESENCE_UPDATE', + TypingStart = 'TYPING_START', + UserUpdate = 'USER_UPDATE', + VoiceStateUpdate = 'VOICE_STATE_UPDATE', + VoiceServerUpdate = 'VOICE_SERVER_UPDATE', + WebhooksUpdate = 'WEBHOOKS_UPDATE', +} + +export type GatewaySendPayload = + | GatewayHeartbeat + | GatewayIdentify + | GatewayUpdatePresence + | GatewayVoiceStateUpdate + | GatewayResume + | GatewayRequestGuildMembers; + +export type GatewayReceivePayload = + | GatewayHello + | GatewayHeartbeatRequest + | GatewayHeartbeatAck + | GatewayInvalidSession + | GatewayReconnect + | GatewayDispatchPayload; + +export type GatewayDispatchPayload = + | GatewayReadyDispatch + | GatewayResumedDispatch + | GatewayChannelModifyDispatch + | GatewayChannelPinsUpdateDispatch + | GatewayGuildModifyDispatch + | GatewayGuildDeleteDispatch + | GatewayGuildBanModifyDispatch + | GatewayGuildEmojisUpdateDispatch + | GatewayGuildIntegrationsUpdateDispatch + | GatewayGuildMemberAddDispatch + | GatewayGuildMemberRemoveDispatch + | GatewayGuildMemberUpdateDispatch + | GatewayGuildMembersChunkDispatch + | GatewayGuildRoleModifyDispatch + | GatewayGuildRoleDeleteDispatch + | GatewayInviteCreateDispatch + | GatewayInviteDeleteDispatch + | GatewayMessageCreateDispatch + | GatewayMessageUpdateDispatch + | GatewayMessageDeleteDispatch + | GatewayMessageDeleteBulkDispatch + | GatewayMessageReactionAddDispatch + | GatewayMessageReactionRemoveDispatch + | GatewayMessageReactionRemoveAllDispatch + | GatewayMessageReactionRemoveEmojiDispatch + | GatewayPresenceUpdateDispatch + | GatewayTypingStartDispatch + | GatewayUserUpdateDispatch + | GatewayVoiceStateUpdateDispatch + | GatewayVoiceServerUpdateDispatch + | GatewayWebhooksUpdateDispatch; + +// #region Dispatch Payloads +/** + * https://discord.com/developers/docs/topics/gateway#hello + */ +export interface GatewayHello extends NonDispatchPayload { + op: GatewayOPCodes.Hello; + d: { + heartbeat_interval: number; + }; +} + +/** + * https://discord.com/developers/docs/topics/gateway#heartbeating + */ +export interface GatewayHeartbeatRequest extends NonDispatchPayload { + op: GatewayOPCodes.Heartbeat; + d: never; +} + +/** + * https://discord.com/developers/docs/topics/gateway#heartbeating-example-gateway-heartbeat-ack + */ +export interface GatewayHeartbeatAck extends NonDispatchPayload { + op: GatewayOPCodes.HeartbeatAck; + d: never; +} + +/** + * https://discord.com/developers/docs/topics/gateway#invalid-session + */ +export interface GatewayInvalidSession extends NonDispatchPayload { + op: GatewayOPCodes.InvalidSession; + d: boolean; +} + +/** + * https://discord.com/developers/docs/topics/gateway#reconnect + */ +export interface GatewayReconnect extends NonDispatchPayload { + op: GatewayOPCodes.Reconnect; + d: never; +} + +/** + * https://discord.com/developers/docs/topics/gateway#ready + */ +export type GatewayReadyDispatch = DataPayload< + GatewayDispatchEvents.Ready, + { + v: number; + user: APIUser; + session_id: string; + private_channels: []; + guilds: APIUnavailableGuild[]; + shard?: [shardID: number, shardCount: number]; + } +>; + +/** + * https://discord.com/developers/docs/topics/gateway#resumed + */ +export type GatewayResumedDispatch = DataPayload; + +/* eslint-disable @typescript-eslint/indent */ +/** + * https://discord.com/developers/docs/topics/gateway#channel-create + * https://discord.com/developers/docs/topics/gateway#channel-update + * https://discord.com/developers/docs/topics/gateway#channel-delete + */ +export type GatewayChannelModifyDispatch = DataPayload< + GatewayDispatchEvents.ChannelCreate | GatewayDispatchEvents.ChannelDelete | GatewayDispatchEvents.ChannelUpdate, + APIChannel +>; +/* eslint-enable @typescript-eslint/indent */ + +export type GatewayChannelCreateDispatch = GatewayChannelModifyDispatch; +export type GatewayChannelUpdateDispatch = GatewayChannelModifyDispatch; +export type GatewayChannelDeleteDispatch = GatewayChannelModifyDispatch; + +/** + * https://discord.com/developers/docs/topics/gateway#channel-pins-update + */ +export type GatewayChannelPinsUpdateDispatch = DataPayload< + GatewayDispatchEvents.ChannelPinsUpdate, + { + guild_id?: string; + channel_id: string; + last_pin_timestamp?: string; + } +>; + +/** + * https://discord.com/developers/docs/topics/gateway#guild-create + * https://discord.com/developers/docs/topics/gateway#guild-update + */ +export type GatewayGuildModifyDispatch = DataPayload< + GatewayDispatchEvents.GuildCreate | GatewayDispatchEvents.GuildUpdate, + APIGuild +>; + +export type GatewayGuildCreateDispatch = GatewayGuildModifyDispatch; +export type GatewayGuildUpdateDispatch = GatewayGuildModifyDispatch; + +/** + * https://discord.com/developers/docs/topics/gateway#guild-delete + */ +export type GatewayGuildDeleteDispatch = DataPayload; + +/** + * https://discord.com/developers/docs/topics/gateway#guild-ban-add + * https://discord.com/developers/docs/topics/gateway#guild-ban-remove + */ +export type GatewayGuildBanModifyDispatch = DataPayload< + GatewayDispatchEvents.GuildBanAdd | GatewayDispatchEvents.GuildBanRemove, + { + guild_id: string; + user: APIUser; + } +>; + +export type GatewayGuildBanAddDispatch = GatewayGuildBanModifyDispatch; +export type GatewayGuildBanRemoveDispatch = GatewayGuildBanModifyDispatch; + +/** + * https://discord.com/developers/docs/topics/gateway#guild-emojis-update + */ +export type GatewayGuildEmojisUpdateDispatch = DataPayload< + GatewayDispatchEvents.GuildEmojisUpdate, + { + guild_id: string; + emojis: APIEmoji[]; + } +>; + +/** + * https://discord.com/developers/docs/topics/gateway#guild-integrations-update + */ +export type GatewayGuildIntegrationsUpdateDispatch = DataPayload< + GatewayDispatchEvents.GuildIntegrationsUpdate, + { guild_id: string } +>; + +/** + * https://discord.com/developers/docs/topics/gateway#guild-member-add + */ +export type GatewayGuildMemberAddDispatch = DataPayload< + GatewayDispatchEvents.GuildMemberAdd, + APIGuildMember & { guild_id: string } +>; + +/** + * https://discord.com/developers/docs/topics/gateway#guild-member-remove + */ +export type GatewayGuildMemberRemoveDispatch = DataPayload< + GatewayDispatchEvents.GuildMemberRemove, + { + guild_id: string; + user: APIUser; + } +>; + +/** + * https://discord.com/developers/docs/topics/gateway#guild-member-update + */ +export type GatewayGuildMemberUpdateDispatch = DataPayload< + GatewayDispatchEvents.GuildMemberUpdate, + Omit & { + guild_id: string; + } +>; + +/** + * https://discord.com/developers/docs/topics/gateway#guild-members-chunk + */ +export type GatewayGuildMembersChunkDispatch = DataPayload< + GatewayDispatchEvents.GuildMembersChunk, + { + guild_id: string; + members: APIGuildMember[]; + chunk_index?: number; + chunk_count?: number; + not_found?: unknown[]; + presences?: RawGatewayPresenceUpdate[]; + nonce?: string; + } +>; + +/** + * https://discord.com/developers/docs/topics/gateway#guild-role-create + * https://discord.com/developers/docs/topics/gateway#guild-role-update + */ +export type GatewayGuildRoleModifyDispatch = DataPayload< + GatewayDispatchEvents.GuildRoleCreate | GatewayDispatchEvents.GuildRoleUpdate, + { + guild_id: string; + role: APIRole; + } +>; + +export type GatewayGuildRoleCreateDispatch = GatewayGuildRoleModifyDispatch; +export type GatewayGuildRoleUpdateDispatch = GatewayGuildRoleModifyDispatch; + +/** + * https://discord.com/developers/docs/topics/gateway#guild-role-delete + */ +export type GatewayGuildRoleDeleteDispatch = DataPayload< + GatewayDispatchEvents.GuildRoleDelete, + { + guild_id: string; + role_id: string; + } +>; + +/** + * https://discord.com/developers/docs/topics/gateway#invite-create + */ +export type GatewayInviteCreateDispatch = DataPayload< + GatewayDispatchEvents.InviteCreate, + { + channel_id: string; + code: string; + created_at: number; + guild_id?: string; + inviter?: APIUser; + max_age: number; + max_uses: number; + target_user?: APIUser; + target_user_type?: InviteTargetUserType; + temporary: boolean; + uses: 0; + } +>; + +/** + * https://discord.com/developers/docs/topics/gateway#invite-delete + */ +export type GatewayInviteDeleteDispatch = DataPayload< + GatewayDispatchEvents.InviteDelete, + { + channel_id: string; + guild_id?: string; + code: string; + } +>; + +/** + * https://discord.com/developers/docs/topics/gateway#message-create + */ +export type GatewayMessageCreateDispatch = DataPayload; + +/** + * https://discord.com/developers/docs/topics/gateway#message-update + */ +export type GatewayMessageUpdateDispatch = DataPayload< + GatewayDispatchEvents.MessageUpdate, + { id: string; channel_id: string } & Partial +>; + +/** + * https://discord.com/developers/docs/topics/gateway#message-delete + */ +export type GatewayMessageDeleteDispatch = DataPayload< + GatewayDispatchEvents.MessageDelete, + { + id: string; + channel_id: string; + guild_id?: string; + } +>; + +/** + * https://discord.com/developers/docs/topics/gateway#message-delete-bulk + */ +export type GatewayMessageDeleteBulkDispatch = DataPayload< + GatewayDispatchEvents.MessageDeleteBulk, + { + ids: string[]; + channel_id: string; + guild_id?: string; + } +>; + +/** + * https://discord.com/developers/docs/topics/gateway#message-reaction-add + */ +export type GatewayMessageReactionAddDispatch = ReactionData; + +/** + * https://discord.com/developers/docs/topics/gateway#message-reaction-remove + */ +export type GatewayMessageReactionRemoveDispatch = ReactionData; + +/** + * https://discord.com/developers/docs/topics/gateway#message-reaction-remove-all + */ +export type GatewayMessageReactionRemoveAllDispatch = DataPayload< + GatewayDispatchEvents.MessageReactionRemoveAll, + MessageReactionRemoveData +>; + +/** + * https://discord.com/developers/docs/topics/gateway#message-reaction-remove-emoji + */ +export type GatewayMessageReactionRemoveEmojiDispatch = DataPayload< + GatewayDispatchEvents.MessageReactionRemoveEmoji, + MessageReactionRemoveData & { + emoji: APIEmoji; + } +>; + +/** + * https://discord.com/developers/docs/topics/gateway#presence-update + */ +export type GatewayPresenceUpdateDispatch = DataPayload; + +/** + * https://discord.com/developers/docs/topics/gateway#typing-start + */ +export type GatewayTypingStartDispatch = DataPayload< + GatewayDispatchEvents.TypingStart, + { + channel_id: string; + guild_id?: string; + user_id: string; + timestamp: number; + member?: APIGuildMember; + } +>; + +/** + * https://discord.com/developers/docs/topics/gateway#user-update + */ +export type GatewayUserUpdateDispatch = DataPayload; + +/** + * https://discord.com/developers/docs/topics/gateway#voice-state-update + */ +export type GatewayVoiceStateUpdateDispatch = DataPayload; + +/** + * https://discord.com/developers/docs/topics/gateway#voice-server-update + */ +export type GatewayVoiceServerUpdateDispatch = DataPayload< + GatewayDispatchEvents.VoiceServerUpdate, + { + token: string; + guild_id: string; + endpoint: string; + } +>; + +/** + * https://discord.com/developers/docs/topics/gateway#webhooks-update + */ +export type GatewayWebhooksUpdateDispatch = DataPayload< + GatewayDispatchEvents.WebhooksUpdate, + { + guild_id: string; + channel_id: string; + } +>; + +// #endregion Dispatch Payloads + +// #region Sendable Payloads + +/** + * https://discord.com/developers/docs/topics/gateway#heartbeating + */ +export interface GatewayHeartbeat { + op: GatewayOPCodes.Heartbeat; + d: number; +} + +/** + * https://discord.com/developers/docs/topics/gateway#identify-identify-connection-properties + */ +export interface GatewayIdentifyProperties { + $os: string; + $browser: string; + $device: string; +} + +/** + * https://discord.com/developers/docs/topics/gateway#identify + */ +export interface GatewayIdentify { + op: GatewayOPCodes.Identify; + d: { + token: string; + properties: GatewayIdentifyProperties; + compress?: boolean; + large_threshold?: number; + // eslint-disable-next-line prettier/prettier + shard?: [shard_id: number, shard_count: number]; + presence?: RawGatewayPresenceUpdate; + guild_subscriptions?: boolean; + intents: number; + }; +} + +/** + * https://discord.com/developers/docs/topics/gateway#resume + */ +export interface GatewayResume { + op: GatewayOPCodes.Resume; + d: { + token: string; + session_id: string; + seq: number; + }; +} + +/** + * https://discord.com/developers/docs/topics/gateway#request-guild-members + */ +export interface GatewayRequestGuildMembers { + op: GatewayOPCodes.RequestGuildMembers; + d: { + guild_id: string | string[]; + query?: string; + limit: number; + presences?: boolean; + user_ids?: string | string[]; + nonce?: string; + }; +} + +/** + * https://discord.com/developers/docs/topics/gateway#update-voice-state + */ +export interface GatewayVoiceStateUpdate { + op: GatewayOPCodes.VoiceStateUpdate; + d: { + guild_id: string; + channel_id: string | null; + self_mute: boolean; + self_deaf: boolean; + }; +} + +/** + * https://discord.com/developers/docs/topics/gateway#update-status + */ +export interface GatewayUpdatePresence { + op: GatewayOPCodes.PresenceUpdate; + d: GatewayPresenceUpdateData; +} + +/** + * https://discord.com/developers/docs/topics/gateway#update-status-gateway-status-update-structure + */ +export interface GatewayPresenceUpdateData { + since: number | null; + activities: GatewayActivity[] | null; + status: PresenceUpdateStatus; + afk: boolean; +} + +// #endregion Sendable Payloads + +// #region Shared +interface BasePayload { + op: GatewayOPCodes; + s: number; + d?: unknown; + t?: string; +} + +type NonDispatchPayload = Omit; + +interface DataPayload extends BasePayload { + op: GatewayOPCodes.Dispatch; + t: Event; + d: D; +} + +type ReactionData = DataPayload< + E, + Omit< + { + user_id: string; + channel_id: string; + message_id: string; + guild_id?: string; + member?: APIGuildMember; + emoji: APIEmoji; + }, + O + > +>; + +interface MessageReactionRemoveData { + channel_id: string; + message_id: string; + guild_id?: string; +} +// #endregion Shared diff --git a/v8/index.ts b/v8/index.ts new file mode 100644 index 00000000..03aa2c8b --- /dev/null +++ b/v8/index.ts @@ -0,0 +1,4 @@ +export * from '../common'; +export * from './gateway'; +export * from './payloads'; +export * from './rest'; diff --git a/v8/payloads/auditLog.ts b/v8/payloads/auditLog.ts new file mode 100644 index 00000000..6666fee5 --- /dev/null +++ b/v8/payloads/auditLog.ts @@ -0,0 +1,467 @@ +/** + * Types extracted from https://discord.com/developers/docs/resources/audit-log + */ + +import type { APIOverwrite, ChannelType } from './channel'; +import type { + APIGuildIntegration, + GuildDefaultMessageNotifications, + GuildExplicitContentFilter, + GuildMFALevel, + GuildVerificationLevel, + IntegrationExpireBehavior, +} from './guild'; +import type { APIRole } from './permissions'; +import type { APIUser } from './user'; +import type { APIWebhook } from './webhook'; + +/** + * https://discord.com/developers/docs/resources/audit-log#audit-log-object-audit-log-structure + */ +export interface APIAuditLog { + webhooks: APIWebhook[]; + users: APIUser[]; + audit_log_entries: APIAuditLogEntry[]; + integrations: APIGuildIntegration[]; +} + +/** + * https://discord.com/developers/docs/resources/audit-log#audit-log-entry-object-audit-log-entry-structure + */ +export interface APIAuditLogEntry { + target_id: string | null; + changes?: APIAuditLogChange[]; + user_id: string | null; + id: string; + action_type: AuditLogEvent; + options?: APIAuditLogOptions; + reason?: string; +} + +/** + * https://discord.com/developers/docs/resources/audit-log#audit-log-entry-object-audit-log-events + */ +export enum AuditLogEvent { + GUILD_UPDATE = 1, + + CHANNEL_CREATE = 10, + CHANNEL_UPDATE, + CHANNEL_DELETE, + CHANNEL_OVERWRITE_CREATE, + CHANNEL_OVERWRITE_UPDATE, + CHANNEL_OVERWRITE_DELETE, + + MEMBER_KICK = 20, + MEMBER_PRUNE, + MEMBER_BAN_ADD, + MEMBER_BAN_REMOVE, + MEMBER_UPDATE, + MEMBER_ROLE_UPDATE, + MEMBER_MOVE, + MEMBER_DISCONNECT, + BOT_ADD, + + ROLE_CREATE = 30, + ROLE_UPDATE, + ROLE_DELETE, + + INVITE_CREATE = 40, + INVITE_UPDATE, + INVITE_DELETE, + + WEBHOOK_CREATE = 50, + WEBHOOK_UPDATE, + WEBHOOK_DELETE, + + EMOJI_CREATE = 60, + EMOJI_UPDATE, + EMOJI_DELETE, + + MESSAGE_DELETE = 72, + MESSAGE_BULK_DELETE, + MESSAGE_PIN, + MESSAGE_UNPIN, + + INTEGRATION_CREATE = 80, + INTEGRATION_UPDATE, + INTEGRATION_DELETE, +} + +/** + * https://discord.com/developers/docs/resources/audit-log#audit-log-entry-object-optional-audit-entry-info + */ +export interface APIAuditLogOptions { + /** + * Present from: + * - MEMBER_PRUNE + */ + delete_member_days?: string; + /** + * Present from: + * - MEMBER_PRUNE + */ + members_removed?: string; + + /** + * Present from: + * - MEMBER_MOVE + * - MESSAGE_PIN + * - MESSAGE_UNPIN + * - MESSAGE_DELETE + */ + channel_id?: string; + + /** + * Present from: + * - MESSAGE_PIN + * - MESSAGE_UNPIN + */ + message_id?: string; + + /** + * Present from: + * - MESSAGE_DELETE + * - MESSAGE_BULK_DELETE + * - MEMBER_DISCONNECT + * - MEMBER_MOVE + */ + count?: string; + + /** + * Present from: + * - CHANNEL_OVERWRITE_CREATE + * - CHANNEL_OVERWRITE_UPDATE + * - CHANNEL_OVERWRITE_DELETE + */ + id?: string; + + /** + * Present from: + * - CHANNEL_OVERWRITE_CREATE + * - CHANNEL_OVERWRITE_UPDATE + * - CHANNEL_OVERWRITE_DELETE + */ + type: AuditLogOptionsType; + + /** + * Present from: + * - CHANNEL_OVERWRITE_CREATE + * - CHANNEL_OVERWRITE_UPDATE + * - CHANNEL_OVERWRITE_DELETE + * + * **Present only if the {@link APIAuditLogOptions#type entry type} is "role"** + */ + role_name?: string; +} + +export enum AuditLogOptionsType { + Role = '0', + Member = '1', +} + +/** + * https://discord.com/developers/docs/resources/audit-log#audit-log-change-object-audit-log-change-structure + */ +export type APIAuditLogChange = + | APIAuditLogChangeKeyName + | APIAuditLogChangeKeyIconHash + | APIAuditLogChangeKeySplashHash + | APIAuditLogChangeKeyOwnerID + | APIAuditLogChangeKeyRegion + | APIAuditLogChangeKeyAFKChannelID + | APIAuditLogChangeKeyAFKTimeout + | APIAuditLogChangeKeyMFALevel + | APIAuditLogChangeKeyVerificationLevel + | APIAuditLogChangeKeyExplicitContentFilter + | APIAuditLogChangeKeyDefaultMessageNotifications + | APIAuditLogChangeKeyVanityURLCode + | APIAuditLogChangeKey$Add + | APIAuditLogChangeKey$Remove + | APIAuditLogChangeKeyPruneDeleteDays + | APIAuditLogChangeKeyWidgetEnabled + | APIAuditLogChangeKeyWidgetChannelID + | APIAuditLogChangeKeySystemChannelID + | APIAuditLogChangeKeyPosition + | APIAuditLogChangeKeyTopic + | APIAuditLogChangeKeyBitrate + | APIAuditLogChangeKeyPermissionOverwrites + | APIAuditLogChangeKeyNSFW + | APIAuditLogChangeKeyApplicationID + | APIAuditLogChangeKeyRateLimitPerUser + | APIAuditLogChangeKeyPermissions + | APIAuditLogChangeKeyColor + | APIAuditLogChangeKeyHoist + | APIAuditLogChangeKeyMentionable + | APIAuditLogChangeKeyAllow + | APIAuditLogChangeKeyDeny + | APIAuditLogChangeKeyCode + | APIAuditLogChangeKeyChannelID + | APIAuditLogChangeKeyInviterID + | APIAuditLogChangeKeyMaxUses + | APIAuditLogChangeKeyUses + | APIAuditLogChangeKeyMaxAge + | APIAuditLogChangeKeyTemporary + | APIAuditLogChangeKeyDeaf + | APIAuditLogChangeKeyMute + | APIAuditLogChangeKeyNick + | APIAuditLogChangeKeyAvatarHash + | APIAuditLogChangeKeyID + | APIAuditLogChangeKeyType + | APIAuditLogChangeKeyEnableEmoticons + | APIAuditLogChangeKeyExpireBehavior + | APIAuditLogChangeKeyExpireGracePeriod; + +/** + * Returned when a guild's name is changed + */ +export type APIAuditLogChangeKeyName = AuditLogChangeData<'name', string>; + +/** + * Returned when a guild's icon is changed + */ +export type APIAuditLogChangeKeyIconHash = AuditLogChangeData<'icon_hash', string>; + +/** + * Returned when a guild's splash is changed + */ +export type APIAuditLogChangeKeySplashHash = AuditLogChangeData<'splash_hash', string>; + +/** + * Returned when a guild's owner ID is changed + */ +export type APIAuditLogChangeKeyOwnerID = AuditLogChangeData<'owner_id', string>; + +/** + * Returned when a guild's region is changed + */ +export type APIAuditLogChangeKeyRegion = AuditLogChangeData<'region', string>; + +/** + * Returned when a guild's afk_channel_id is changed + */ +export type APIAuditLogChangeKeyAFKChannelID = AuditLogChangeData<'afk_channel_id', string>; + +/** + * Returned when a guild's afk_timeout is changed + */ +export type APIAuditLogChangeKeyAFKTimeout = AuditLogChangeData<'afk_timeout', number>; + +/** + * Returned when a guild's mfa_level is changed + */ +export type APIAuditLogChangeKeyMFALevel = AuditLogChangeData<'mfa_level', GuildMFALevel>; + +/** + * Returned when a guild's verification_level is changed + */ +export type APIAuditLogChangeKeyVerificationLevel = AuditLogChangeData<'verification_level', GuildVerificationLevel>; + +/** + * Returned when a guild's explicit_content_filter is changed + */ +export type APIAuditLogChangeKeyExplicitContentFilter = AuditLogChangeData< + 'explicit_content_filter', + GuildExplicitContentFilter +>; + +/** + * Returned when a guild's default_message_notifications is changed + */ +export type APIAuditLogChangeKeyDefaultMessageNotifications = AuditLogChangeData< + 'default_message_notifications', + GuildDefaultMessageNotifications +>; + +/** + * Returned when a guild's vanity_url_code is changed + */ +export type APIAuditLogChangeKeyVanityURLCode = AuditLogChangeData<'vanity_url_code', string>; + +/** + * Returned when new role(s) are added + */ +export type APIAuditLogChangeKey$Add = AuditLogChangeData<'$add', APIRole[]>; + +/** + * Returned when role(s) are removed + */ +export type APIAuditLogChangeKey$Remove = AuditLogChangeData<'$remove', APIRole[]>; + +/** + * Returned when there is a change in number of days after which inactive and role-unassigned members are kicked + */ +export type APIAuditLogChangeKeyPruneDeleteDays = AuditLogChangeData<'prune_delete_days', number>; + +/** + * Returned when a guild's widget is enabled + */ +export type APIAuditLogChangeKeyWidgetEnabled = AuditLogChangeData<'widget_enabled', boolean>; + +/** + * Returned when a guild's widget_channel_id is changed + */ +export type APIAuditLogChangeKeyWidgetChannelID = AuditLogChangeData<'widget_channel_id', string>; + +/** + * Returned when a guild's system_channel_id is changed + */ +export type APIAuditLogChangeKeySystemChannelID = AuditLogChangeData<'system_channel_id', string>; + +/** + * Returned when a channel's position is changed + */ +export type APIAuditLogChangeKeyPosition = AuditLogChangeData<'position', number>; + +/** + * Returned when a channel's topic is changed + */ +export type APIAuditLogChangeKeyTopic = AuditLogChangeData<'topic', string>; + +/** + * Returned when a voice channel's bitrate is changed + */ +export type APIAuditLogChangeKeyBitrate = AuditLogChangeData<'bitrate', number>; + +/** + * Returned when a channel's permission overwrites is changed + */ +export type APIAuditLogChangeKeyPermissionOverwrites = AuditLogChangeData<'permission_overwrites', APIOverwrite[]>; + +/** + * Returned when a channel's NSFW restriction is changed + */ +export type APIAuditLogChangeKeyNSFW = AuditLogChangeData<'nsfw', boolean>; + +/** + * The application ID of the added or removed Webhook or Bot + */ +export type APIAuditLogChangeKeyApplicationID = AuditLogChangeData<'application_id', string>; + +/** + * Returned when a channel's amount of seconds a user has to wait before sending another message + * is changed + */ +export type APIAuditLogChangeKeyRateLimitPerUser = AuditLogChangeData<'rate_limit_per_user', number>; + +/** + * Returned when a permission bitfield is changed + */ +export type APIAuditLogChangeKeyPermissions = AuditLogChangeData<'permissions', string>; + +/** + * Returned when a role's color is changed + */ +export type APIAuditLogChangeKeyColor = AuditLogChangeData<'color', number>; + +/** + * Returned when a role's hoist status is changed + */ +export type APIAuditLogChangeKeyHoist = AuditLogChangeData<'hoist', boolean>; + +/** + * Returned when a role's mentionable status is changed + */ +export type APIAuditLogChangeKeyMentionable = AuditLogChangeData<'mentionable', boolean>; + +/** + * Returned when an overwrite's allowed permissions bitfield is changed + */ +export type APIAuditLogChangeKeyAllow = AuditLogChangeData<'allow', string>; + +/** + * Returned when an overwrite's denied permissions bitfield is changed + */ +export type APIAuditLogChangeKeyDeny = AuditLogChangeData<'deny', string>; + +/** + * Returned when an invite's code is changed + */ +export type APIAuditLogChangeKeyCode = AuditLogChangeData<'code', string>; + +/** + * Returned when an invite's channel_id is changed + */ +export type APIAuditLogChangeKeyChannelID = AuditLogChangeData<'channel_id', string>; + +/** + * Returned when an invite's inviter_id is changed + */ +export type APIAuditLogChangeKeyInviterID = AuditLogChangeData<'inviter_id', string>; + +/** + * Returned when an invite's max_uses is changed + */ +export type APIAuditLogChangeKeyMaxUses = AuditLogChangeData<'max_uses', number>; + +/** + * Returned when an invite's uses is changed + */ +export type APIAuditLogChangeKeyUses = AuditLogChangeData<'uses', number>; + +/** + * Returned when an invite's max_age is changed + */ +export type APIAuditLogChangeKeyMaxAge = AuditLogChangeData<'max_age', number>; + +/** + * Returned when an invite's temporary status is changed + */ +export type APIAuditLogChangeKeyTemporary = AuditLogChangeData<'temporary', boolean>; + +/** + * Returned when a user's deaf status is changed + */ +export type APIAuditLogChangeKeyDeaf = AuditLogChangeData<'deaf', boolean>; + +/** + * Returned when a user's mute status is changed + */ +export type APIAuditLogChangeKeyMute = AuditLogChangeData<'mute', boolean>; + +/** + * Returned when a user's nick is changed + */ +export type APIAuditLogChangeKeyNick = AuditLogChangeData<'mute', boolean>; + +/** + * Returned when a user's avatar_hash is changed + */ +export type APIAuditLogChangeKeyAvatarHash = AuditLogChangeData<'avatar_hash', string>; + +/** + * The ID of the changed entity - sometimes used in conjunction with other keys + */ +export interface APIAuditLogChangeKeyID { + key: 'id'; + new_value: string; + old_value?: string; +} + +/** + * The type of entity created + */ +export type APIAuditLogChangeKeyType = AuditLogChangeData<'type', ChannelType | string>; + +/** + * Returned when an integration's enable_emoticons is changed + */ +export type APIAuditLogChangeKeyEnableEmoticons = AuditLogChangeData<'enable_emoticons', boolean>; + +/** + * Returned when an integration's expire_behavior is changed + */ +export type APIAuditLogChangeKeyExpireBehavior = AuditLogChangeData<'expire_behavior', IntegrationExpireBehavior>; + +/** + * Returned when an integration's expire_grace_period is changed + */ +export type APIAuditLogChangeKeyExpireGracePeriod = AuditLogChangeData<'expire_grace_period', number>; + +/** + * @internal + */ +interface AuditLogChangeData { + key: K; + new_value?: D; + old_value?: D; +} diff --git a/v8/payloads/channel.ts b/v8/payloads/channel.ts new file mode 100644 index 00000000..286a65be --- /dev/null +++ b/v8/payloads/channel.ts @@ -0,0 +1,307 @@ +/** + * Types extracted from https://discord.com/developers/docs/resources/channel + */ + +import type { APIPartialEmoji } from './emoji'; +import type { APIGuildMember } from './guild'; +import type { APIUser } from './user'; + +/** + * Not documented, but partial only includes id, name, and type + */ +export interface APIPartialChannel { + id: string; + type: ChannelType; + name?: string; +} + +/** + * https://discord.com/developers/docs/resources/channel#channel-object-channel-structure + */ +export interface APIChannel extends APIPartialChannel { + guild_id?: string; + position?: number; + permission_overwrites?: APIOverwrite[]; + name?: string; + topic?: string | null; + nsfw?: boolean; + last_message_id?: string | null; + bitrate?: number; + user_limit?: number; + rate_limit_per_user?: number; + recipients?: APIUser[]; + icon?: string | null; + owner_id?: string; + application_id?: string; + parent_id?: string | null; + last_pin_timestamp?: string | null; +} + +/** + * https://discord.com/developers/docs/resources/channel#channel-object-channel-types + */ +export enum ChannelType { + GUILD_TEXT = 0, + DM, + GUILD_VOICE, + GROUP_DM, + GUILD_CATEGORY, + GUILD_NEWS, + GUILD_STORE, +} + +/** + * https://discord.com/developers/docs/resources/channel#message-object-message-structure + */ +export interface APIMessage { + id: string; + channel_id: string; + guild_id?: string; + author: APIUser; + member?: APIGuildMember; + content: string; + timestamp: string; + edited_timestamp: string | null; + tts: boolean; + mention_everyone: boolean; + mentions: (APIUser & { member?: Omit })[]; + mention_roles: string[]; + mention_channels?: APIChannelMention[]; + attachments: APIAttachment[]; + embeds: APIEmbed[]; + reactions?: APIReaction[]; + nonce?: string | number; + pinned: boolean; + webhook_id?: string; + type: MessageType; + activity?: APIMessageActivity; + application?: APIMessageApplication; + message_reference?: APIMessageReference; + flags?: MessageFlags; + referenced_message?: APIMessage | null; +} + +/** + * https://discord.com/developers/docs/resources/channel#message-object-message-types + */ +export enum MessageType { + DEFAULT, + RECIPIENT_ADD, + RECIPIENT_REMOVE, + CALL, + CHANNEL_NAME_CHANGE, + CHANNEL_ICON_CHANGE, + CHANNEL_PINNED_MESSAGE, + GUILD_MEMBER_JOIN, + USER_PREMIUM_GUILD_SUBSCRIPTION, + USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_1, + USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_2, + USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_3, + CHANNEL_FOLLOW_ADD, + GUILD_DISCOVERY_DISQUALIFIED = 14, + GUILD_DISCOVERY_REQUALIFIED, + GUILD_DISCOVERY_GRACE_PERIOD_INITIAL_WARNING, + GUILD_DISCOVERY_GRACE_PERIOD_FINAL_WARNING, + INLINE_REPLY, +} + +/** + * https://discord.com/developers/docs/resources/channel#message-object-message-activity-structure + */ +export interface APIMessageActivity { + type: MessageActivityType; + party_id?: string; +} + +/** + * https://discord.com/developers/docs/resources/channel#message-object-message-application-structure + */ +export interface APIMessageApplication { + id: string; + cover_image?: string; + description: string; + icon: string | null; + name: string; +} + +/** + * https://discord.com/developers/docs/resources/channel#message-object-message-reference-structure + */ +export interface APIMessageReference { + message_id?: string; + channel_id: string; + guild_id?: string; +} + +/** + * https://discord.com/developers/docs/resources/channel#message-object-message-activity-types + */ +export enum MessageActivityType { + JOIN = 1, + SPECTATE, + LISTEN, + JOIN_REQUEST = 5, +} + +/** + * https://discord.com/developers/docs/resources/channel#message-object-message-flags + */ +export enum MessageFlags { + CROSSPOSTED = 1 << 0, + IS_CROSSPOST = 1 << 1, + SUPPRESS_EMBEDS = 1 << 2, + SOURCE_MESSAGE_DELETED = 1 << 3, + URGENT = 1 << 4, +} + +/** + * https://discord.com/developers/docs/resources/channel#reaction-object-reaction-structure + */ +export interface APIReaction { + count: number; + me: boolean; + emoji: APIPartialEmoji; +} + +/** + * https://discord.com/developers/docs/resources/channel#overwrite-object-overwrite-structure + */ +export interface APIOverwrite { + id: string; + type: OverwriteType; + allow: string; + deny: string; +} + +export enum OverwriteType { + Role, + Member, +} + +/** + * https://discord.com/developers/docs/resources/channel#embed-object-embed-structure + */ +export interface APIEmbed { + title?: string; + /** + * @deprecated *Embed types should be considered deprecated and might be removed in a future API version* + */ + type?: EmbedType; + description?: string; + url?: string; + timestamp?: string; + color?: number; + footer?: APIEmbedFooter; + image?: APIEmbedImage; + thumbnail?: APIEmbedThumbnail; + video?: APIEmbedVideo; + provider?: APIEmbedProvider; + author?: APIEmbedAuthor; + fields?: APIEmbedField[]; +} + +/** + * https://discord.com/developers/docs/resources/channel#embed-object-embed-types + * @deprecated *Embed types should be considered deprecated and might be removed in a future API version* + */ +export enum EmbedType { + Rich = 'rich', + Image = 'image', + Video = 'video', + GifV = 'gifv', + Article = 'article', + Link = 'link', +} + +/** + * https://discord.com/developers/docs/resources/channel#embed-object-embed-thumbnail-structure + */ +export interface APIEmbedThumbnail { + url?: string; + proxy_url?: string; + height?: number; + width?: number; +} + +/** + * https://discord.com/developers/docs/resources/channel#embed-object-embed-video-structure + */ +export interface APIEmbedVideo { + url?: string; + height?: number; + width?: number; +} + +/** + * https://discord.com/developers/docs/resources/channel#embed-object-embed-image-structure + */ +export interface APIEmbedImage { + url?: string; + proxy_url?: string; + height?: number; + width?: number; +} + +/** + * https://discord.com/developers/docs/resources/channel#embed-object-embed-provider-structure + */ +export interface APIEmbedProvider { + name?: string; + url?: string; +} + +/** + * https://discord.com/developers/docs/resources/channel#embed-object-embed-author-structure + */ +export interface APIEmbedAuthor { + name?: string; + url?: string; + icon_url?: string; + proxy_icon_url?: string; +} + +/** + * https://discord.com/developers/docs/resources/channel#embed-object-embed-footer-structure + */ +export interface APIEmbedFooter { + text: string; + icon_url?: string; + proxy_icon_url?: string; +} + +/** + * https://discord.com/developers/docs/resources/channel#embed-object-embed-field-structure + */ +export interface APIEmbedField { + name: string; + value: string; + inline?: boolean; +} + +/** + * https://discord.com/developers/docs/resources/channel#attachment-object-attachment-structure + */ +export interface APIAttachment { + id: string; + filename: string; + size: number; + url: string; + proxy_url: string; + height: number | null; + width: number | null; +} + +/** + * https://discord.com/developers/docs/resources/channel#channel-mention-object-channel-mention-structure + */ +export interface APIChannelMention { + id: string; + guild_id: string; + type: ChannelType; + name: string; +} + +export interface APIFollowedChannel { + channel_id: string; + webhook_id: string; +} diff --git a/v8/payloads/emoji.ts b/v8/payloads/emoji.ts new file mode 100644 index 00000000..3f038a25 --- /dev/null +++ b/v8/payloads/emoji.ts @@ -0,0 +1,25 @@ +/** + * Types extracted from https://discord.com/developers/docs/resources/emoji + */ + +import type { APIUser } from './user'; + +/** + * Not documented but mentioned + */ +export interface APIPartialEmoji { + id: string | null; + name: string | null; + animated?: boolean; +} + +/** + * https://discord.com/developers/docs/resources/emoji#emoji-object-emoji-structure + */ +export interface APIEmoji extends APIPartialEmoji { + roles?: string[]; + user?: APIUser; + require_colons?: boolean; + managed?: boolean; + available?: boolean; +} diff --git a/v8/payloads/gateway.ts b/v8/payloads/gateway.ts new file mode 100644 index 00000000..dcdee523 --- /dev/null +++ b/v8/payloads/gateway.ts @@ -0,0 +1,134 @@ +/** + * Types extracted from https://discord.com/developers/docs/topics/gateway + */ + +import type { APIEmoji } from './emoji'; +import type { APIUser } from './user'; + +/** + * https://discord.com/developers/docs/topics/gateway#get-gateway + */ +export interface APIGatewayInfo { + url: string; +} + +/** + * https://discord.com/developers/docs/topics/gateway#get-gateway-bot + */ +export interface APIGatewayBotInfo extends APIGatewayInfo { + shards: number; + session_start_limit: APIGatewaySessionStartLimit; +} + +/** + * https://discord.com/developers/docs/topics/gateway#session-start-limit-object + */ +export interface APIGatewaySessionStartLimit { + total: number; + remaining: number; + reset_after: number; +} + +/** + * https://discord.com/developers/docs/topics/gateway#presence-update-presence-update-event-fields + */ +export interface GatewayPresenceUpdate { + user: Partial & { + id: string; + }; + guild_id?: string; + status?: PresenceUpdateStatus; + activities?: GatewayActivity[]; + client_status?: GatewayPresenceClientStatus; +} + +export enum PresenceUpdateStatus { + DoNotDisturb = 'dnd', + Idle = 'idle', + Invisible = 'invisible', + Offline = 'offline', + Online = 'online', +} + +/** + * https://discord.com/developers/docs/topics/gateway#client-status-object + */ +export type GatewayPresenceClientStatus = Partial>; + +/** + * https://discord.com/developers/docs/topics/gateway#activity-object + */ +export interface GatewayActivity { + name: string; + type: ActivityType; + url?: string | null; + created_at: number; + timestamps?: GatewayActivityTimestamps; + application_id?: string; + details?: string | null; + state?: string | null; + emoji?: GatewayActivityEmoji; + party?: GatewayActivityParty; + assets?: GatewayActivityAssets; + secrets?: GatewayActivitySecrets; + instance?: boolean; + flags?: ActivityFlags; +} + +/** + * https://discord.com/developers/docs/topics/gateway#activity-object-activity-types + */ +export enum ActivityType { + Game, + Streaming, + Listening, + + Custom = 4, + Competing, +} + +/** + * https://discord.com/developers/docs/topics/gateway#activity-object-activity-timestamps + */ +export interface GatewayActivityTimestamps { + start?: number; + end?: number; +} + +/** + * https://discord.com/developers/docs/topics/gateway#activity-object-activity-emoji + */ +export type GatewayActivityEmoji = Partial> & Pick; + +/** + * https://discord.com/developers/docs/topics/gateway#activity-object-activity-party + */ +export interface GatewayActivityParty { + id?: string; + // eslint-disable-next-line prettier/prettier + size?: [currentSize: number, maxSize: number]; +} + +/** + * https://discord.com/developers/docs/topics/gateway#activity-object-activity-assets + */ +export type GatewayActivityAssets = Partial< + Record<'large_image' | 'large_text' | 'small_image' | 'small_text', string> +>; + +/** + * https://discord.com/developers/docs/topics/gateway#activity-object-activity-secrets + */ +export type GatewayActivitySecrets = Partial>; + +/** + * https://discord.com/developers/docs/topics/gateway#activity-object-activity-flags + */ +export enum ActivityFlags { + INSTANCE = 1 << 0, + JOIN = 1 << 1, + SPECTATE = 1 << 2, + JOIN_REQUEST = 1 << 3, + SYNC = 1 << 4, + PLAY = 1 << 5, +} diff --git a/v8/payloads/guild.ts b/v8/payloads/guild.ts new file mode 100644 index 00000000..4c5d6f53 --- /dev/null +++ b/v8/payloads/guild.ts @@ -0,0 +1,301 @@ +/** + * Types extracted from https://discord.com/developers/docs/resources/guild + */ + +import type { APIChannel } from './channel'; +import type { APIEmoji } from './emoji'; +import type { GatewayPresenceUpdate } from './gateway'; +import type { APIRole } from './permissions'; +import type { APIUser } from './user'; +import type { GatewayVoiceState } from './voice'; + +/** + * https://discord.com/developers/docs/resources/guild#unavailable-guild-object + */ +export interface APIUnavailableGuild { + id: string; + unavailable: boolean; +} + +export interface APIPartialGuild extends Omit, Pick { + name: string; + icon: string | null; + splash: string | null; + banner?: string | null; + description?: string | null; + features?: GuildFeature[]; + verification_level?: GuildVerificationLevel; + vanity_url_code?: string | null; + unavailable?: boolean; +} + +export interface APIGuild extends APIPartialGuild { + discovery_splash: string | null; + owner?: boolean; + owner_id: string; + permissions?: string; + region: string; + afk_channel_id: string | null; + afk_timeout: number; + widget_enabled?: boolean; + widget_channel_id?: string | null; + verification_level: GuildVerificationLevel; + default_message_notifications: GuildDefaultMessageNotifications; + explicit_content_filter: GuildExplicitContentFilter; + roles: APIRole[]; + emojis: APIEmoji[]; + features: GuildFeature[]; + mfa_level: GuildMFALevel; + application_id: string | null; + system_channel_id: string | null; + system_channel_flags: GuildSystemChannelFlags; + rules_channel_id: string | null; + joined_at?: string; + large?: boolean; + member_count?: number; + voice_states?: Omit[]; + members?: APIGuildMember[]; + channels?: APIChannel[]; + presences?: GatewayPresenceUpdate[]; + max_presences?: number | null; + max_members?: number; + vanity_url_code: string | null; + description: string | null; + banner: string | null; + premium_tier: GuildPremiumTier; + premium_subscription_count?: number; + preferred_locale: string; + public_updates_channel_id: string | null; + max_video_channel_users?: number; + /** + * Returned by calling GET `/guilds/{guild.id}` with the query `with_counts` set to `true` + */ + approximate_member_count?: number; + /** + * Returned by calling GET `/guilds/{guild.id}` with the query `with_counts` set to `true` + */ + approximate_presence_count?: number; + welcome_screen?: APIGuildWelcomeScreen; +} + +/** + * https://discord.com/developers/docs/resources/guild#guild-object-default-message-notification-level + */ +export enum GuildDefaultMessageNotifications { + ALL_MESSAGES, + ONLY_MENTIONS, +} + +/** + * https://discord.com/developers/docs/resources/guild#guild-object-explicit-content-filter-level + */ +export enum GuildExplicitContentFilter { + DISABLED, + MEMBERS_WITHOUT_ROLES, + ALL_MEMBERS, +} + +/** + * https://discord.com/developers/docs/resources/guild#guild-object-mfa-level + */ +export enum GuildMFALevel { + NONE, + ELEVATED, +} + +/** + * https://discord.com/developers/docs/resources/guild#guild-object-verification-level + */ +export enum GuildVerificationLevel { + NONE, + LOW, + MEDIUM, + HIGH, + VERY_HIGH, +} + +/** + * https://discord.com/developers/docs/resources/guild#guild-object-premium-tier + */ +export enum GuildPremiumTier { + NONE, + TIER_1, + TIER_2, + TIER_3, +} + +/** + * https://discord.com/developers/docs/resources/guild#guild-object-system-channel-flags + */ +export enum GuildSystemChannelFlags { + SUPPRESS_JOIN_NOTIFICATIONS = 1 << 0, + SUPPRESS_PREMIUM_SUBSCRIPTIONS = 1 << 1, +} + +/** + * https://discord.com/developers/docs/resources/guild#guild-object-guild-features + */ +export enum GuildFeature { + ANIMATED_ICON = 'ANIMATED_ICON', + BANNER = 'BANNER', + COMMERCE = 'COMMERCE', + COMMUNITY = 'COMMUNITY', + DISCOVERABLE = 'DISCOVERABLE', + FEATURABLE = 'FEATURABLE', + INVITE_SPLASH = 'INVITE_SPLASH', + NEWS = 'NEWS', + PARTNERED = 'PARTNERED', + RELAY_ENABLED = 'RELAY_ENABLED', + VANITY_URL = 'VANITY_URL', + VERIFIED = 'VERIFIED', + VIP_REGIONS = 'VIP_REGIONS', + WELCOME_SCREEN_ENABLED = 'WELCOME_SCREEN_ENABLED', +} + +/** + * https://discord.com/developers/docs/resources/guild#guild-preview-object + */ +export interface APIGuildPreview { + id: string; + name: string; + icon: string | null; + splash: string | null; + discovery_splash: string | null; + emojis: APIEmoji[]; + features: GuildFeature[]; + approximate_member_count: number; + approximate_presence_count: number; +} + +/** + * https://discord.com/developers/docs/resources/guild#guild-widget-object + */ +export interface APIGuildWidgetSettings { + enabled: boolean; + channel_id: string | null; +} + +/** + * https://discord.com/developers/docs/resources/guild#get-guild-widget-example-get-guild-widget + */ +export interface APIGuildWidget { + id: string; + name: string; + instant_invite: string | null; + channels: APIGuildWidgetChannel[]; + members: APIGuildWidgetMember[]; + presence_count: number; +} + +/** + * https://discord.com/developers/docs/resources/guild#get-guild-widget-example-get-guild-widget + */ +export interface APIGuildWidgetChannel { + id: string; + name: string; + position: number; +} + +/** + * https://discord.com/developers/docs/resources/guild#get-guild-widget-example-get-guild-widget + */ +export interface APIGuildWidgetMember { + id: string; + username: string; + discriminator: string; + avatar: string | null; + status: string; + avatar_url: string; +} + +/** + * https://discord.com/developers/docs/resources/guild#guild-member-object + */ +export interface APIGuildMember { + user?: APIUser; + nick: string | null; + roles: string[]; + joined_at: string; + premium_since?: string | null; + deaf: boolean; + mute: boolean; +} + +/** + * https://discord.com/developers/docs/resources/guild#integration-object + */ +export interface APIGuildIntegration { + id: string; + name: string; + type: string; + enabled: boolean; + syncing?: boolean; + role_id?: string; + enable_emoticons?: boolean; + expire_behavior?: IntegrationExpireBehavior; + expire_grace_period?: number; + user?: APIUser; + account: APIIntegrationAccount; + synced_at?: string; + subscriber_count?: number; + revoked?: boolean; + application?: APIGuildIntegrationApplication; +} + +/** + * https://discord.com/developers/docs/resources/guild#integration-object-integration-expire-behaviors + */ +export enum IntegrationExpireBehavior { + RemoveRole, + Kick, +} + +/** + * https://discord.com/developers/docs/resources/guild#integration-account-object + */ +export interface APIIntegrationAccount { + id: string; + name: string; +} + +/** + * https://discord.com/developers/docs/resources/guild#integration-application-object + */ +export interface APIGuildIntegrationApplication { + id: string; + name: string; + icon: string | null; + description: string; + summary: string; + bot?: APIUser; +} + +/** + * https://discord.com/developers/docs/resources/guild#ban-object + */ +export interface APIBan { + reason: string | null; + user: APIUser; +} + +/** + * https://discord.com/developers/docs/resources/guild#get-guild-widget-image-widget-style-options + */ +export enum GuildWidgetStyle { + Banner1 = 'banner1', + Banner2 = 'banner2', + Banner3 = 'banner3', + Banner4 = 'banner4', + Shield = 'shield', +} + +export interface APIGuildWelcomeScreen { + description: string | null; + welcome_channels: APIGuildWelcomeScreenChannel[]; +} + +export interface APIGuildWelcomeScreenChannel { + channel_id: string; + emoji_id: string | null; + emoji_name: string | null; +} diff --git a/v8/payloads/index.ts b/v8/payloads/index.ts new file mode 100644 index 00000000..ecec901c --- /dev/null +++ b/v8/payloads/index.ts @@ -0,0 +1,12 @@ +export * from './auditLog'; +export * from './channel'; +export * from './emoji'; +export * from './gateway'; +export * from './guild'; +export * from './invite'; +export * from './oauth2'; +export * from './permissions'; +export * from './teams'; +export * from './user'; +export * from './voice'; +export * from './webhook'; diff --git a/v8/payloads/invite.ts b/v8/payloads/invite.ts new file mode 100644 index 00000000..b4267cb6 --- /dev/null +++ b/v8/payloads/invite.ts @@ -0,0 +1,39 @@ +/** + * Types extracted from https://discord.com/developers/docs/resources/invite + */ + +import type { APIPartialChannel } from './channel'; +import type { APIPartialGuild } from './guild'; +import type { APIUser } from './user'; + +/** + * https://discord.com/developers/docs/resources/invite#invite-object + */ +export interface APIInvite { + code: string; + guild?: APIPartialGuild; + channel?: Required; + inviter?: APIUser; + target_user?: APIUser; + target_user_type?: InviteTargetUserType; + approximate_presence_count?: number; + approximate_member_count?: number; +} + +/** + * https://discord.com/developers/docs/resources/invite#invite-object-target-user-types + */ +export enum InviteTargetUserType { + STREAM = 1, +} + +/** + * https://discord.com/developers/docs/resources/invite#invite-metadata-object + */ +export interface APIExtendedInvite extends APIInvite { + uses: number; + max_uses: number; + max_age: number; + temporary: boolean; + created_at: string; +} diff --git a/v8/payloads/oauth2.ts b/v8/payloads/oauth2.ts new file mode 100644 index 00000000..79c8bc42 --- /dev/null +++ b/v8/payloads/oauth2.ts @@ -0,0 +1,27 @@ +/** + * Types extracted from https://discord.com/developers/docs/topics/oauth2 + */ + +import type { APITeam } from './teams'; +import type { APIUser } from './user'; + +/** + * https://discord.com/developers/docs/topics/oauth2#get-current-application-information-response-structure + */ +export interface APIApplication { + id: string; + name: string; + icon: string | null; + description: string; + rpc_origins?: string[]; + bot_public: boolean; + bot_require_code_grant: boolean; + owner: APIUser; + summary: string; + verify_key: string; + team: APITeam | null; + guild_id?: string; + primary_sku_id?: string; + slug?: string; + cover_image?: string; +} diff --git a/v8/payloads/permissions.ts b/v8/payloads/permissions.ts new file mode 100644 index 00000000..491aaed7 --- /dev/null +++ b/v8/payloads/permissions.ts @@ -0,0 +1,72 @@ +/** + * Types extracted from https://discord.com/developers/docs/topics/permissions + */ + +/** + * https://discord.com/developers/docs/topics/permissions#permissions-bitwise-permission-flags + * + * These flags are exported as `BigInt`s and NOT numbers. For most of them, you can + * convert them in a number by wrapping it in `Number()`, however be careful as any + * further bits added may cause issues if done so. Try to use BigInts as much as possible + * or modules that can replicate them in some way. + */ +export const PermissionFlagsBits = { + CREATE_INSTANT_INVITE: 1n, + KICK_MEMBERS: 2n, + BAN_MEMBERS: 4n, + ADMINISTRATOR: 8n, + MANAGE_CHANNELS: 16n, + MANAGE_GUILD: 32n, + ADD_REACTIONS: 64n, + VIEW_AUDIT_LOG: 128n, + PRIORITY_SPEAKER: 256n, + STREAM: 512n, + VIEW_CHANNEL: 1024n, + SEND_MESSAGES: 2048n, + SEND_TTS_MESSAGES: 4096n, + MANAGE_MESSAGES: 8192n, + EMBED_LINKS: 16384n, + ATTACH_FILES: 32768n, + READ_MESSAGE_HISTORY: 65536n, + MENTION_EVERYONE: 131072n, + USE_EXTERNAL_EMOJIS: 262144n, + VIEW_GUILD_INSIGHTS: 524288n, + CONNECT: 1048576n, + SPEAK: 2097152n, + MUTE_MEMBERS: 4194304n, + DEAFEN_MEMBERS: 8388608n, + MOVE_MEMBERS: 16777216n, + USE_VAD: 33554432n, + CHANGE_NICKNAME: 67108864n, + MANAGE_NICKNAMES: 134217728n, + MANAGE_ROLES: 268435456n, + MANAGE_WEBHOOKS: 536870912n, + MANAGE_EMOJIS: 1073741824n, +} as const; + +/** + * Freeze the object of bits, preventing any modifications to it. + * @internal + */ +Object.freeze(PermissionFlagsBits); + +/** + * https://discord.com/developers/docs/topics/permissions#role-object + */ +export interface APIRole { + id: string; + name: string; + color: number; + hoist: boolean; + position: number; + permissions: string; + managed: boolean; + mentionable: boolean; + tags?: APIRoleTags; +} + +export interface APIRoleTags { + bot_id?: string; + premium_subscriber?: null; + integration_id?: string; +} diff --git a/v8/payloads/teams.ts b/v8/payloads/teams.ts new file mode 100644 index 00000000..4ab8b4c1 --- /dev/null +++ b/v8/payloads/teams.ts @@ -0,0 +1,33 @@ +/** + * Types extracted from https://discord.com/developers/docs/topics/teams + */ + +import type { APIUser } from './user'; + +/** + * https://discord.com/developers/docs/topics/teams#data-models-team-object + */ +export interface APITeam { + id: string; + icon: string | null; + members: APITeamMember[]; + owner_user_id: string; +} + +/** + * https://discord.com/developers/docs/topics/teams#data-models-team-members-object + */ +export interface APITeamMember { + membership_state: TeamMemberMembershipState; + permissions: string[]; + team_id: string; + user: APIUser; +} + +/** + * https://discord.com/developers/docs/topics/teams#data-models-membership-state-enum + */ +export enum TeamMemberMembershipState { + INVITED = 1, + ACCEPTED, +} diff --git a/v8/payloads/user.ts b/v8/payloads/user.ts new file mode 100644 index 00000000..7c19c8e1 --- /dev/null +++ b/v8/payloads/user.ts @@ -0,0 +1,73 @@ +/** + * Types extracted from https://discord.com/developers/docs/resources/user + */ + +import type { APIGuildIntegration } from './guild'; + +/** + * https://discord.com/developers/docs/resources/user#user-object + */ +export interface APIUser { + id: string; + username: string; + discriminator: string; + avatar: string | null; + bot?: boolean; + system?: boolean; + mfa_enabled?: boolean; + locale?: string; + verified?: boolean; + email?: string | null; + flags?: UserFlags; + premium_type?: UserPremiumType; + public_flags?: UserFlags; +} + +/** + * https://discord.com/developers/docs/resources/user#user-object-user-flags + */ +export enum UserFlags { + None = 0, + DiscordEmployee = 1 << 0, + PartneredServerOwner = 1 << 1, + DiscordHypeSquadEvents = 1 << 2, + BugHunterLevel1 = 1 << 3, + HypeSquadHouseBravery = 1 << 6, + HypeSquadHouseBrilliance = 1 << 7, + HypeSquadHouseBalance = 1 << 8, + EarlySupporter = 1 << 9, + TeamUser = 1 << 10, + System = 1 << 12, + BugHunterLevel2 = 1 << 14, + VerifiedBot = 1 << 16, + EarlyVerifiedBotDeveloper = 1 << 17, +} + +/** + * https://discord.com/developers/docs/resources/user#user-object-premium-types + */ +export enum UserPremiumType { + None, + NitroClassic, + Nitro, +} + +/** + * https://discord.com/developers/docs/resources/user#connection-object + */ +export interface APIConnection { + id: string; + name: string; + type: string; + revoked?: boolean; + integrations?: Partial[]; + verified: boolean; + friend_sync: boolean; + show_activity: boolean; + visibility: ConnectionVisibility; +} + +export enum ConnectionVisibility { + None, + Everyone, +} diff --git a/v8/payloads/voice.ts b/v8/payloads/voice.ts new file mode 100644 index 00000000..48d91e7c --- /dev/null +++ b/v8/payloads/voice.ts @@ -0,0 +1,35 @@ +/** + * Types extracted from https://discord.com/developers/docs/resources/voice + */ + +import type { APIGuildMember } from './guild'; + +/** + * https://discord.com/developers/docs/resources/voice#voice-state-object + */ +export interface GatewayVoiceState { + guild_id?: string; + channel_id: string | null; + user_id: string; + member?: APIGuildMember; + session_id: string; + deaf: boolean; + mute: boolean; + self_deaf: boolean; + self_mute: boolean; + self_stream?: boolean; + self_video: boolean; + suppress: boolean; +} + +/** + * https://discord.com/developers/docs/resources/voice#voice-region-object + */ +export interface APIVoiceRegion { + id: string; + name: string; + vip: boolean; + optimal: boolean; + deprecated: boolean; + custom: boolean; +} diff --git a/v8/payloads/webhook.ts b/v8/payloads/webhook.ts new file mode 100644 index 00000000..5ed081ec --- /dev/null +++ b/v8/payloads/webhook.ts @@ -0,0 +1,29 @@ +/** + * Types extracted from https://discord.com/developers/docs/resources/webhook + */ + +import type { APIPartialChannel } from './channel'; +import type { APIPartialGuild } from './guild'; +import type { APIUser } from './user'; + +/** + * https://discord.com/developers/docs/resources/webhook#webhook-object + */ +export interface APIWebhook { + id: string; + type: WebhookType; + guild_id?: string; + channel_id: string; + user?: APIUser; + name: string | null; + avatar: string | null; + token?: string; + source_guild?: APIPartialGuild; + source_channel?: APIPartialChannel; + application_id: string | null; +} + +export enum WebhookType { + Incoming = 1, + ChannelFollower, +} diff --git a/v8/rest/auditLog.ts b/v8/rest/auditLog.ts new file mode 100644 index 00000000..e743a008 --- /dev/null +++ b/v8/rest/auditLog.ts @@ -0,0 +1,13 @@ +import type { APIAuditLog, AuditLogEvent } from '../payloads/auditLog'; + +/** + * https://discord.com/developers/docs/resources/audit-log#get-guild-audit-log + */ +export interface RESTGetAPIAuditLogQuery { + user_id?: string; + action_type?: AuditLogEvent; + before?: string; + limit?: number; +} + +export type RESTGetAPIAuditLogResult = APIAuditLog; diff --git a/v8/rest/channel.ts b/v8/rest/channel.ts new file mode 100644 index 00000000..7501ff20 --- /dev/null +++ b/v8/rest/channel.ts @@ -0,0 +1,208 @@ +import type { + APIChannel, + APIEmbed, + APIFollowedChannel, + APIInvite, + APIMessage, + APIMessageReference, + APIOverwrite, + APIUser, + ChannelType, + InviteTargetUserType, + MessageFlags, + OverwriteType, +} from '../payloads'; + +// #region TypeDefs + +/** + * https://discord.com/developers/docs/resources/channel#allowed-mentions-object-allowed-mention-types + */ +export enum AllowedMentionsTypes { + Everyone = 'everyone', + Role = 'roles', + User = 'users', +} + +/** + * https://discord.com/developers/docs/resources/channel#allowed-mentions-object-allowed-mentions-structure + */ +export interface APIAllowedMentionsSend { + parse?: AllowedMentionsTypes[]; + roles?: string[]; + users?: string[]; +} + +// #endregion TypeDefs + +/** + * https://discord.com/developers/docs/resources/channel#modify-channel + */ +export interface RESTPatchAPIChannelJSONBody { + name?: string; + type?: ChannelType.GUILD_NEWS | ChannelType.GUILD_TEXT; + position?: number | null; + topic?: string | null; + nsfw?: boolean | null; + rate_limit_per_user?: number | null; + user_limit?: number | null; + permission_overwrites?: APIOverwrite[] | null; + parent_id?: string | null; +} + +export type RESTGetAPIChannelResult = APIChannel; +export type RESTPatchAPIChannelResult = APIChannel; +export type RESTDeleteAPIChannelResult = APIChannel; + +/** + * https://discord.com/developers/docs/resources/channel#get-channel-messages + */ +export interface RESTGetAPIChannelMessagesQuery { + around?: string; + before?: string; + after?: string; + limit?: number; +} + +export type RESTGetAPIChannelMessagesResult = APIMessage[]; + +/** + * https://discord.com/developers/docs/resources/channel#create-message + */ +export interface RESTPostAPIChannelMessageJSONBody { + content?: string; + nonce?: number | string; + tts?: boolean; + embed?: APIEmbed; + allowed_mentions?: APIAllowedMentionsSend; + message_reference?: APIMessageReference; +} + +/** + * https://discord.com/developers/docs/resources/channel#create-message + */ +export type RESTPostAPIChannelMessageFormDataBody = + | { + /** + * JSON stringified message body + */ + payload_json?: string; + /** + * The file contents + */ + file: unknown; + } + | { + content?: string; + nonce?: number | string; + tts?: boolean; + embed?: APIEmbed; + allowed_mentions?: APIAllowedMentionsSend; + message_reference?: APIMessageReference; + /** + * The file contents + */ + file: unknown; + }; + +/** + * https://discord.com/developers/docs/resources/channel#edit-message + */ +export interface RESTPatchAPIChannelMessageJSONBody { + content?: string | null; + embed?: APIEmbed | null; + allowed_mentions?: APIAllowedMentionsSend | null; + flags?: MessageFlags | null; +} + +export type RESTGetAPIChannelMessageResult = APIMessage; +export type RESTPostAPIChannelMessageResult = APIMessage; +export type RESTPatchAPIChannelMessageResult = APIMessage; +export type RESTDeleteAPIChannelMessageResult = never; + +/** + * https://discord.com/developers/docs/resources/channel#get-reactions + */ +export interface RESTGetAPIChannelMessageReactionsQuery { + before?: string; + after?: string; + limit?: number; +} + +export type RESTGetAPIChannelMessageReactionsResult = APIUser[]; + +export type RESTPutAPIChannelMessageReactionResult = never; +export type RESTDeleteAPIChannelMessageReactionResult = never; +export type RESTDeleteAPIChannelAllMessageReactionsResult = never; + +/** + * https://discord.com/developers/docs/resources/channel#bulk-delete-messages + */ +export interface RESTPostAPIChannelMessagesBulkDeleteJSONBody { + messages: string[]; +} + +export type RESTPostAPIChannelMessagesBulkDeleteResult = never; + +/** + * https://discord.com/developers/docs/resources/channel#edit-channel-permissions + */ +export interface RESTPutAPIChannelPermissionsJSONBody { + allow: string; + deny: string; + type: OverwriteType; +} + +export type RESTPutAPIChannelPermissionsResult = never; +export type RESTDeleteAPIChannelPermissionsResult = never; + +/** + * https://discord.com/developers/docs/resources/channel#get-channel-invites + */ +export type RESTGetAPIChannelInvitesResult = APIInvite[]; + +export interface RESTPostAPIChannelInviteJSONBody { + max_age?: number; + max_uses?: number; + temporary?: boolean; + unique?: boolean; + target_user_id?: string; + target_user_type?: InviteTargetUserType; +} + +/** + * https://discord.com/developers/docs/resources/channel#trigger-typing-indicator + */ +export type RESTPostAPIChannelTypingResult = never; + +/** + * https://discord.com/developers/docs/resources/channel#get-pinned-messages + */ +export type RESTGetAPIChannelPinsResult = APIMessage[]; + +/** + * https://discord.com/developers/docs/resources/channel#add-pinned-channel-message + */ +export type RESTPutAPIChannelPinResult = never; +export type RESTDeleteAPIChannelPinResult = never; + +/** + * https://discord.com/developers/docs/resources/channel#group-dm-add-recipient + */ +export interface RESTPutAPIChannelRecipientJSONBody { + access_token: string; + nick?: string; +} + +export type RESTPutAPIChannelRecipientResult = unknown; +export type RESTDeleteAPIChannelRecipientResult = unknown; + +// TODO: Docs updated once https://github.com/discord/discord-api-docs/pull/1692/files is merged + +export type RESTPostAPIChannelMessageCrosspostResult = APIMessage; + +export interface RESTPostAPIChannelFollowersJSONBody { + webhook_channel_id: string; +} + +export type RESTPostAPIChannelFollowersResult = APIFollowedChannel; diff --git a/v8/rest/emoji.ts b/v8/rest/emoji.ts new file mode 100644 index 00000000..eac614ae --- /dev/null +++ b/v8/rest/emoji.ts @@ -0,0 +1,40 @@ +import type { APIEmoji } from '../payloads'; + +/** + * https://discord.com/developers/docs/resources/emoji#list-guild-emojis + */ +export type RESTGetAPIGuildEmojisResult = APIEmoji[]; + +/** + * https://discord.com/developers/docs/resources/emoji#get-guild-emoji + */ +export type RESTGetAPIGuildEmojiResult = APIEmoji; + +/** + * https://discord.com/developers/docs/resources/emoji#create-guild-emoji-json-params + */ +export interface RESTPostAPIGuildEmojiJSONBody { + name: string; + /** + * The image data, read more [here](https://discord.com/developers/docs/reference#image-data) + */ + image: string; + roles?: string[]; +} + +export type RESTPostAPIGuildEmojiResult = APIEmoji; + +/** + * https://discord.com/developers/docs/resources/emoji#modify-guild-emoji + */ +export interface RESTPatchAPIGuildEmojiJSONBody { + name?: string; + roles?: string[] | null; +} + +export type RESTPatchAPIGuildEmojiResult = APIEmoji; + +/** + * https://discord.com/developers/docs/resources/emoji#delete-guild-emoji + */ +export type RESTDeleteAPIGuildEmojiResult = never; diff --git a/v8/rest/gateway.ts b/v8/rest/gateway.ts new file mode 100644 index 00000000..d8f53873 --- /dev/null +++ b/v8/rest/gateway.ts @@ -0,0 +1,11 @@ +import type { APIGatewayBotInfo, APIGatewayInfo } from '../payloads'; + +/** + * https://discord.com/developers/docs/topics/gateway#get-gateway + */ +export type RESTGetAPIGatewayResult = APIGatewayInfo; + +/** + * https://discord.com/developers/docs/topics/gateway#get-gateway-bot + */ +export type RESTGetAPIGatewayBotResult = APIGatewayBotInfo; diff --git a/v8/rest/guild.ts b/v8/rest/guild.ts new file mode 100644 index 00000000..d0210778 --- /dev/null +++ b/v8/rest/guild.ts @@ -0,0 +1,387 @@ +import type { + APIBan, + APIChannel, + APIGuild, + APIGuildIntegration, + APIGuildMember, + APIGuildPreview, + APIGuildWidget, + APIGuildWidgetSettings, + APIInvite, + APIRole, + APIVoiceRegion, + GuildDefaultMessageNotifications, + GuildExplicitContentFilter, + GuildFeature, + GuildVerificationLevel, + GuildWidgetStyle, + IntegrationExpireBehavior, +} from '../payloads'; +import type { RESTPutAPIChannelPermissionsJSONBody } from './channel'; + +export interface APIGuildCreateOverwrite extends RESTPutAPIChannelPermissionsJSONBody { + id: number | string; +} + +export type APIGuildCreatePartialChannel = Partial< + Pick +> & { + name: string; + id?: number | string; + parent_id?: number | string; + permission_overwrites?: APIGuildCreateOverwrite[]; +}; + +export interface APIGuildCreateRole extends RESTPostAPIGuildRoleJSONBody { + id: number | string; +} + +/** + * https://discord.com/developers/docs/resources/guild#create-guild + */ +export interface RESTPostAPIGuildsJSONBody { + name: string; + region?: string; + icon?: string; + verification_level?: GuildVerificationLevel; + default_message_notifications?: GuildDefaultMessageNotifications; + explicit_content_filter?: GuildExplicitContentFilter; + roles?: APIGuildCreateRole[]; + channels?: APIGuildCreatePartialChannel[]; + afk_channel_id?: number | string; + afk_timeout?: number; + system_channel_id?: number | string; +} + +export type RESTPostAPIGuildsResult = APIGuild; + +/** + * https://discord.com/developers/docs/resources/guild#get-guild + */ +export interface RESTGetAPIGuildQuery { + with_counts?: boolean; +} + +export type RESTGetAPIGuildResult = APIGuild; + +/** + * https://discord.com/developers/docs/resources/guild#get-guild-preview + */ +export type RESTGetAPIGuildPreviewResult = APIGuildPreview; + +/** + * https://discord.com/developers/docs/resources/guild#modify-guild + */ +export interface RESTPatchAPIGuildJSONBody { + name?: string; + region?: string; + verification_level?: GuildVerificationLevel; + default_message_notifications?: GuildDefaultMessageNotifications; + explicit_content_filter?: GuildExplicitContentFilter; + afk_channel_id?: string | null; + afk_timeout?: number; + icon?: string | null; + owner_id?: string; + splash?: string | null; + discovery_splash?: string | null; + banner?: string | null; + system_channel_id?: string | null; + rules_channel_id?: string | null; + public_updates_channel_id?: string | null; + preferred_locale?: string; + features?: GuildFeature[]; + description?: string | null; +} + +export type RESTPatchAPIGuildResult = APIGuild; + +/** + * https://discord.com/developers/docs/resources/guild#delete-guild + */ +export type RESTDeleteAPIGuildResult = never; + +/** + * https://discord.com/developers/docs/resources/guild#get-guild-channels + */ +export type RESTGetAPIGuildChannelsResult = APIChannel[]; + +/** + * https://discord.com/developers/docs/resources/guild#create-guild-channel + */ +export type RESTPostAPIGuildChannelJSONBody = APIGuildCreatePartialChannel; + +export type RESTPostAPIGuildChannelResult = APIChannel; + +/** + * https://discord.com/developers/docs/resources/guild#modify-guild-channel-positions + */ +export type RESTPatchAPIGuildChannelPositionsJSONBody = Array<{ + id: string; + position: number; + lock_permissions?: boolean; + parent_id?: string | null; +}>; + +export type RESTPatchAPIGuildChannelPositionsResult = never; + +/** + * https://discord.com/developers/docs/resources/guild#get-guild-member + */ +export type RESTGetAPIGuildMemberResult = APIGuildMember; + +/** + * https://discord.com/developers/docs/resources/guild#list-guild-members + */ +export interface RESTGetAPIGuildMembersQuery { + limit?: number; + after?: string; +} + +export type RESTGetAPIGuildMembersResult = APIGuildMember[]; + +export interface RESTGetAPIGuildMembersSearchQuery { + query: string; + limit?: number; +} + +export type RESTGetAPIGuildMembersSearchResult = APIGuildMember[]; + +/** + * https://discord.com/developers/docs/resources/guild#add-guild-member + */ +export interface RESTPutAPIGuildMemberJSONBody { + access_token: string; + nick?: string; + roles?: string[]; + mute?: boolean; + deaf?: boolean; +} + +export type RESTPutAPIGuildMemberResult = APIGuildMember | undefined; + +/** + * https://discord.com/developers/docs/resources/guild#modify-guild-member + */ +export interface RESTPatchAPIGuildMemberJSONBody { + nick?: string | null; + roles?: string[] | null; + mute?: boolean | null; + deaf?: boolean | null; + channel_id?: string | null; +} + +export type RESTPatchAPIGuildMemberResult = never; + +/** + * https://discord.com/developers/docs/resources/guild#modify-current-user-nick + */ +export interface RESTPatchAPICurrentGuildMemberNicknameJSONBody { + nick?: string | null; +} + +export type RESTPatchAPICurrentGuildMemberNicknameResult = Required; + +/** + * https://discord.com/developers/docs/resources/guild#add-guild-member-role + */ +export type RESTPutAPIGuildMemberRoleResult = never; + +/** + * https://discord.com/developers/docs/resources/guild#remove-guild-member-role + */ +export type RESTDeleteAPIGuildMemberRoleResult = never; + +/** + * https://discord.com/developers/docs/resources/guild#remove-guild-member + */ +export type RESTDeleteAPIGuildMemberResult = never; + +/** + * https://discord.com/developers/docs/resources/guild#get-guild-bans + */ +export type RESTGetAPIGuildBansResult = APIBan[]; + +/** + * https://discord.com/developers/docs/resources/guild#get-guild-ban + */ +export type RESTGetAPIGuildBanResult = APIBan; + +/** + * https://discord.com/developers/docs/resources/guild#create-guild-ban + */ +export interface RESTPutAPIGuildBanJSONBody { + delete_message_days?: number; + reason?: string; +} + +export type RESTPutAPIGuildBanResult = never; + +/** + * https://discord.com/developers/docs/resources/guild#remove-guild-ban + */ +export type RESTDeleteAPIGuildBanResult = never; + +/** + * https://discord.com/developers/docs/resources/guild#get-guild-roles + */ +export type RESTGetAPIGuildRolesResult = APIRole[]; + +/** + * https://discord.com/developers/docs/resources/guild#create-guild-role + */ +export interface RESTPostAPIGuildRoleJSONBody { + name?: string | null; + permissions?: string | null; + color?: number | null; + hoist?: boolean | null; + mentionable?: boolean | null; +} + +export type RESTPostAPIGuildRoleResult = APIRole; + +/** + * https://discord.com/developers/docs/resources/guild#modify-guild-role-positions + */ +export type RESTPatchAPIGuildRolePositionsJSONBody = Array<{ + id: string; + position?: number; +}>; + +export type RESTPatchAPIGuildRolePositionsResult = APIRole[]; + +/** + * https://discord.com/developers/docs/resources/guild#modify-guild-role + */ +export interface RESTPatchAPIGuildRoleJSONBody { + name?: string; + permissions?: string; + color?: number; + hoist?: boolean; + mentionable?: boolean; +} + +export type RESTPatchAPIGuildRoleResult = APIRole; + +/** + * https://discord.com/developers/docs/resources/guild#delete-guild-role + */ +export type RESTDeleteAPIGuildRoleResult = never; + +/** + * https://discord.com/developers/docs/resources/guild#get-guild-prune-count + */ +export interface RESTGetAPIGuildPruneCountQuery { + days?: number; + /** + * While this is typed as a string, it represents an array of + * role IDs delimited by commas. + * + * @see https://discord.com/developers/docs/resources/guild#get-guild-prune-count-query-string-params + */ + include_roles?: string; +} + +export interface RESTGetAPIGuildPruneCountResult { + pruned: number; +} + +/** + * https://discord.com/developers/docs/resources/guild#begin-guild-prune + */ +export interface RESTPostAPIGuildPruneJSONBody { + days?: number; + compute_prune_count?: boolean; + include_roles?: string[]; +} + +export interface RESTPostAPIGuildPruneResult { + pruned: number | null; +} + +/** + * https://discord.com/developers/docs/resources/guild#get-guild-voice-regions + */ +export type RESTGetAPIGuildVoiceRegionsResult = APIVoiceRegion[]; + +/** + * https://discord.com/developers/docs/resources/guild#get-guild-invites + */ +export type RESTGetAPIGuildInvitesResult = APIInvite[]; + +/** + * https://discord.com/developers/docs/resources/guild#get-guild-integrations + */ +export interface RESTGetAPIGuildIntegrationsQuery { + include_applications?: boolean; +} + +export type RESTGetAPIGuildIntegrationsResult = APIGuildIntegration[]; + +/** + * https://discord.com/developers/docs/resources/guild#create-guild-integration + */ +export interface RESTPostAPIGuildIntegrationJSONBody { + type: string; + id: string; +} + +export type RESTPostAPIGuildIntegrationResult = never; + +/** + * https://discord.com/developers/docs/resources/guild#modify-guild-integration + */ +export interface RESTPatchAPIGuildIntegrationJSONBody { + expire_behavior?: IntegrationExpireBehavior | null; + expire_grace_period?: number | null; + enable_emoticons?: boolean | null; +} + +export type RESTPatchAPIGuildIntegrationResult = never; + +/** + * https://discord.com/developers/docs/resources/guild#delete-guild-integration + */ +export type RESTDeleteAPIGuildIntegrationResult = never; + +/** + * https://discord.com/developers/docs/resources/guild#sync-guild-integration + */ +export type RESTPostAPIGuildIntegrationSyncResult = never; + +/** + * https://discord.com/developers/docs/resources/guild#get-guild-widget-settings + */ +export type RESTGetAPIGuildWidgetSettingsResult = APIGuildWidgetSettings; + +/** + * https://discord.com/developers/docs/resources/guild#modify-guild-widget + */ +export type RESTPatchAPIGuildWidgetSettingsJSONBody = Partial; + +export type RESTPatchAPIGuildWidgetSettingsResult = APIGuildWidgetSettings; + +/** + * https://discord.com/developers/docs/resources/guild#get-guild-widget + */ +export type RESTGetAPIGuildWidgetResult = APIGuildWidget; + +/** + * https://discord.com/developers/docs/resources/guild#get-guild-vanity-url + */ +export interface RESTGetAPIGuildVanityUrlResult { + code: string | null; + uses: number; +} + +/** + * https://discord.com/developers/docs/resources/guild#get-guild-widget-image + */ +export interface RESTGetAPIGuildWidgetImageQuery { + style?: GuildWidgetStyle; +} + +/** + * Note: while the return type is `ArrayBuffer`, the expected result is + * a buffer of sorts (depends if in browser or on node.js/deno). + */ +export type RESTGetAPIGuildWidgetImageResult = ArrayBuffer; diff --git a/v8/rest/index.ts b/v8/rest/index.ts new file mode 100644 index 00000000..1fe3b12a --- /dev/null +++ b/v8/rest/index.ts @@ -0,0 +1,513 @@ +export * from './auditLog'; +export * from './channel'; +export * from './emoji'; +export * from './gateway'; +export * from './guild'; +export * from './invite'; +export * from './oauth2'; +export * from './user'; +export * from './voice'; +export * from './webhook'; + +export const APIVersion = '8'; +export const Routes = { + /** + * Route for: + * - GET `/guilds/{guild.id}/audit-logs` + */ + guildAuditLog(guildID: string) { + return `/guilds/${guildID}/audit-logs`; + }, + + /** + * Route for: + * - GET `/channels/{channel.id}` + * - PATCH `/channels/{channel.id}` + * - DELETE `/channels/{channel.id}` + */ + channel(channelID: string) { + return `/channels/${channelID}`; + }, + + /** + * Route for: + * - GET `/channels/{channel.id}/messages` + * - POST `/channels/{channel.id}/messages` + */ + channelMessages(channelID: string) { + return `/channels/${channelID}/messages`; + }, + + /** + * Route for: + * - GET `/channels/{channel.id}/messages/{message.id}` + * - PATCH `/channels/{channel.id}/messages/{message.id}` + * - DELETE `/channels/{channel.id}/messages/{message.id}` + */ + channelMessage(channelID: string, messageID: string) { + return `/channels/${channelID}/messages/${messageID}`; + }, + + /** + * Route for: + * - POST `/channels/{channel.id}/messages/{message.id}/crosspost` + */ + channelCrosspost(channelID: string, messageID: string) { + return `/channels/${channelID}/message/${messageID}/crosspost`; + }, + + /** + * Route for: + * - PUT `/channels/{channel.id}/messages/{message.id}/reactions/{emoji}/@me` + * - DELETE `/channels/{channel.id}/messages/{message.id}/reactions/{emoji}/@me` + * + * **Note**: You need to URL encode the emoji yourself. + */ + channelMessageOwnReaction(channelID: string, messageID: string, emoji: string) { + return `/channels/${channelID}/messages/${messageID}/reactions/${emoji}/@me`; + }, + + /** + * Route for: + * - DELETE `/channels/{channel.id}/messages/{message.id}/reactions/{emoji}/{user.id}` + * + * **Note**: You need to URL encode the emoji yourself. + */ + channelMessageUserReaction(channelID: string, messageID: string, emoji: string, userID: string) { + return `/channels/${channelID}/messages/${messageID}/reactions/${emoji}/${userID}`; + }, + + /** + * Route for: + * - GET `/channels/{channel.id}/messages/{message.id}/reactions/{emoji}` + * - DELETE `/channels/{channel.id}/messages/{message.id}/reactions/{emoji}` + * + * **Note**: You need to URL encode the emoji yourself. + */ + channelMessageSpecificReaction(channelID: string, messageID: string, emoji: string) { + return `/channels/${channelID}/messages/${messageID}/reactions/${emoji}`; + }, + + /** + * Route for: + * - DELETE `/channels/{channel.id}/messages/{message.id}/reactions` + */ + channelMessageAllReactions(channelID: string, messageID: string) { + return `/channels/${channelID}/messages/${messageID}`; + }, + + /** + * Route for: + * - POST `/channels/{channel.id}/messages/bulk-delete` + */ + channelBulkDelete(channelID: string) { + return `/channels/${channelID}/bulk-delete`; + }, + + /** + * Route for: + * - PUT `/channels/{channel.id}/permissions/{overwrite.id}` + * - DELETE `/channels/{channel.id}/permissions/{overwrite.id}` + */ + channelPermissions(channelID: string, overwriteID: string) { + return `/channels/${channelID}/permissions/${overwriteID}`; + }, + + /** + * Route for: + * - GET `/channels/{channel.id}/invites` + * - POST `/channels/{channel.id}/invites` + */ + channelInvite(channelID: string) { + return `/channels/${channelID}`; + }, + + /** + * Route for: + * - POST `/channels/{channel.id}/followers` + */ + channelFollowers(channelID: string) { + return `/channels/${channelID}/followers`; + }, + + /** + * Route for: + * - POST `/channels/{channel.id}/typing` + */ + channelTyping(channelID: string) { + return `/channels/${channelID}/typing`; + }, + + /** + * Route for: + * - GET `/channels/{channel.id}/pins` + */ + channelPins(channelID: string) { + return `/channels/${channelID}/pins`; + }, + + /** + * Route for: + * - PUT `/channels/{channel.id}/pins/{message.id}` + * - DELETE `/channels/{channel.id}/pins/{message.id}` + */ + channelPin(channelID: string, messageID: string) { + return `/channels/${channelID}/pins/${messageID}`; + }, + + /** + * Route for: + * - PUT `/channels/{channel.id}/recipients/{user.id}` + * - DELETE `/channels/{channel.id}/recipients/{user.id}` + */ + channelRecipient(channelID: string, userID: string) { + return `/channels/${channelID}/recipients/${userID}`; + }, + + /** + * Route for: + * - GET `/guilds/{guild.id}/emojis` + * - POST `/guilds/{guild.id}/emojis` + */ + guildEmojis(guildID: string) { + return `/guilds/${guildID}/emojis`; + }, + + /** + * Route for: + * - GET `/guilds/{guild.id}/emojis/{emoji.id}` + * - PATCH `/guilds/{guild.id}/emojis/{emoji.id}` + * - DELETE `/guilds/{guild.id}/emojis/{emoji.id}` + */ + guildEmoji(guildID: string, emojiID: string) { + return `/guilds/${guildID}/emojis/${emojiID}`; + }, + + /** + * Route for: + * - POST `/guilds` + */ + guilds() { + return '/guilds'; + }, + + /** + * Route for: + * - GET `/guilds/{guild.id}` + * - PATCH `/guilds/{guild.id}` + * - DELETE `/guilds/{guild.id}` + */ + guild(guildID: string) { + return `/guilds/${guildID}`; + }, + + /** + * Route for: + * - GET `/guilds/{guild.id}/preview` + */ + guildPreview(guildID: string) { + return `/guilds/${guildID}/preview`; + }, + + /** + * Route for: + * - GET `/guilds/{guild.id}/channels` + * - POST `/guilds/{guild.id}/channels` + * - PATCH `/guilds/{guild.id}/channels` + */ + guildChannels(guildID: string) { + return `/guilds/${guildID}/channels`; + }, + + /** + * Route for: + * - GET `/guilds/{guild.id}/members/{user.id}` + * - PUT `/guilds/{guild.id}/members/{user.id}` + * - PATCH `/guilds/{guild.id}/members/{user.id}` + * - DELETE `/guilds/{guild.id}/members/{user.id}` + */ + guildMember(guildID: string, userID: string) { + return `/guilds/${guildID}/members/${userID}`; + }, + + /** + * Route for: + * - GET `/guilds/{guild.id}/members` + */ + guildMembers(guildID: string) { + return `/guilds/${guildID}/members`; + }, + + /** + * Route for: + * - GET `/guilds/{guild.id}/members/search` + */ + guildMembersSearch(guildID: string) { + return `/guilds/${guildID}/members/search`; + }, + + /** + * Route for: + * - PATCH `/guilds/{guild.id}/members/@me/nick` + */ + guildCurrentMemberNickname(guildID: string) { + return `/guilds/${guildID}/members/@me/nick`; + }, + + /** + * Route for: + * - PUT `/guilds/{guild.id}/members/{user.id}/roles/{role.id}` + * - DELETE `/guilds/{guild.id}/members/{user.id}/roles/{role.id}` + */ + guildMemberRole(guildID: string, memberID: string, roleID: string) { + return `/guilds/${guildID}/members/${memberID}/roles/${roleID}`; + }, + + /** + * Route for: + * - GET `/guilds/{guild.id}/bans` + */ + guildBans(guildID: string) { + return `/guilds/${guildID}/bans`; + }, + + /** + * Route for: + * - GET `/guilds/{guild.id}/bans/{user.id}` + * - PUT `/guilds/{guild.id}/bans/{user.id}` + * - DELETE `/guilds/{guild.id}/bans/{user.id}` + */ + guildBan(guildID: string, userID: string) { + return `/guilds/${guildID}/bans/${userID}`; + }, + + /** + * Route for: + * - GET `/guilds/{guild.id}/roles` + * - POST `/guilds/{guild.id}/roles` + * - PATCH `/guilds/{guild.id}/roles` + */ + guildRoles(guildID: string) { + return `/guilds/${guildID}/roles`; + }, + + /** + * Route for: + * - PATCH `/guilds/{guild.id}/roles/{role.id}` + * - DELETE `/guilds/{guild.id}/roles/{role.id}` + */ + guildRole(guildID: string, roleID: string) { + return `/guilds/${guildID}/roles/${roleID}`; + }, + + /** + * Route for: + * - GET `/guilds/{guild.id}/prune` + * - POST `/guilds/{guild.id}/prune` + */ + guildPrune(guildID: string) { + return `/guilds/${guildID}/prune`; + }, + + /** + * Route for: + * - GET `/guilds/{guild.id}/regions` + */ + guildVoiceRegions(guildID: string) { + return `/guilds/${guildID}/regions`; + }, + + /** + * Route for: + * - GET `/guilds/{guild.id}/invites` + */ + guildInvites(guildID: string) { + return `/guilds/${guildID}/invites`; + }, + + /** + * Route for: + * - GET `/guilds/{guild.id}/integrations` + * - POST `/guilds/{guild.id}/integrations` + */ + guildIntegrations(guildID: string) { + return `/guilds/${guildID}/integrations`; + }, + + /** + * Route for: + * - PATCH `/guilds/{guild.id}/integrations/{integration.id}` + * - DELETE `/guilds/{guild.id}/integrations/{integration.id}` + */ + guildIntegration(guildID: string, integrationID: string) { + return `/guilds/${guildID}/integrations/${integrationID}`; + }, + + /** + * Route for: + * - POST `/guilds/{guild.id}/integrations/{integration.id}/sync` + */ + guildIntegrationSync(guildID: string, integrationID: string) { + return `/guilds/${guildID}/integrations/${integrationID}/sync`; + }, + + /** + * Route for: + * - GET `/guilds/{guild.id}/widget` + * - PATCH `/guilds/{guild.id}/widget` + */ + guildWidgetSettings(guildID: string) { + return `/guilds/${guildID}/widget`; + }, + + /** + * Route for: + * - GET `/guilds/{guild.id}/widget.json` + */ + guildWidget(guildID: string) { + return `/guilds/${guildID}/widget.json`; + }, + + /** + * Route for: + * - GET `/guilds/{guild.id}/vanity-url` + */ + guildVanityUrl(guildID: string) { + return `/guilds/${guildID}/vanity-url`; + }, + + /** + * Route for: + * - GET `/guilds/{guild.id}/widget.png` + */ + guildWidgetImage(guildID: string) { + return `/guilds/${guildID}/widget.png`; + }, + + /** + * Route for: + * - GET `/invites/{invite.code}` + * - DELETE `/invites/{invite.code}` + */ + invite(code: string) { + return `/invites/${code}`; + }, + + /** + * Route for: + * - GET `/users/@me` + * - GET `/users/{user.id}` + * - PATCH `/users/@me` + */ + user(userID = '@me') { + return `/users/${userID}`; + }, + + /** + * Route for: + * - GET `/users/@me/guilds` + */ + userGuilds() { + return `/users/@me/guilds`; + }, + + /** + * Route for: + * - DELETE `/users/@me/guilds/{guild.id}` + */ + userGuild(guildID: string) { + return `/users/@me/guilds/${guildID}`; + }, + + /** + * Route for: + * - POST `/users/@me/channels` + */ + userChannels() { + return `/users/@me/channels`; + }, + + /** + * Route for: + * - GET `/users/@me/connections` + */ + userConnections() { + return `/users/@me/connections`; + }, + + /** + * Route for: + * - GET `/voice/regions` + */ + voiceRegions() { + return `/voice/regions`; + }, + + /** + * Route for: + * - POST `/channels/{channel.id}/webhooks` + * - GET `/channels/{channel.id}/webhooks` + */ + channelWebhook(channelID: string) { + return `/channels/${channelID}/webhooks`; + }, + + /** + * Route for: + * - GET `/guilds/{guild.id}/webhooks` + */ + guildWebhooks(guildID: string) { + return `/guilds/${guildID}/webhooks`; + }, + + /** + * Route for: + * - GET `/webhooks/{webhook.id}` + * - GET `/webhooks/{webhook.id}/{webhook.token}` + * - PATCH `/webhooks/{webhook.id}` + * - PATCH `/webhooks/{webhook.id}/{webhook.token}` + * - DELETE `/webhooks/{webhook.id}` + * - DELETE `/webhooks/{webhook.id}/{webhook.token}` + * - POST `/webhooks/{webhook.id}/{webhook.token}` + */ + webhook(webhookID: string, webhookToken?: string) { + const parts = ['', 'webhooks', webhookID]; + + if (webhookToken) parts.push(webhookToken); + + return parts.join('/'); + }, + + /** + * Route for: + * - POST `/webhooks/{webhook.id}/{webhook.token}/slack` + * - POST `/webhooks/{webhook.id}/{webhook.token}/github` + */ + webhookPlatform(webhookID: string, webhookToken: string, platform: 'github' | 'slack') { + return `/${webhookID}/${webhookToken}/${platform}`; + }, + + /** + * Route for: + * - GET `/gateway` + */ + gateway() { + return `/gateway`; + }, + + /** + * Route for: + * - GET `/gateway/bot` + */ + gatewayBot() { + return `/gateway/bot`; + }, + + /** + * Route for: + * - GET `/oauth2/applications/@me` + */ + oauth2CurrentApplication() { + return `/oauth2/applications/@me`; + }, +}; diff --git a/v8/rest/invite.ts b/v8/rest/invite.ts new file mode 100644 index 00000000..e215a680 --- /dev/null +++ b/v8/rest/invite.ts @@ -0,0 +1,15 @@ +import type { APIInvite } from '../payloads'; + +/** + * https://discord.com/developers/docs/resources/invite#get-invite + */ +export interface RESTGetAPIInviteQuery { + with_counts?: boolean; +} + +export type RESTGetAPIInviteResult = APIInvite; + +/** + * https://discord.com/developers/docs/resources/invite#delete-invite + */ +export type RESTDeleteAPIInviteResult = APIInvite; diff --git a/v8/rest/oauth2.ts b/v8/rest/oauth2.ts new file mode 100644 index 00000000..fc0b1316 --- /dev/null +++ b/v8/rest/oauth2.ts @@ -0,0 +1,159 @@ +import type { APIApplication, APIGuild, APIWebhook } from '../payloads'; + +/** + * https://discord.com/developers/docs/topics/oauth2#get-current-application-information + */ +export type RESTGetAPIOauth2CurrentApplicationResult = APIApplication; + +/** + * https://discord.com/developers/docs/topics/oauth2#authorization-code-grant + */ +export interface RESTOAuth2AuthorizationQuery { + response_type: 'code'; + client_id: string; + scope: string; + redirect_uri?: string; + state?: string; + prompt?: 'consent' | 'none'; +} + +/** + * https://discord.com/developers/docs/topics/oauth2#authorization-code-grant-redirect-url-example + */ +export interface RESTOAuth2AuthorizationQueryResult { + code: string; + state?: string; +} + +/** + * https://discord.com/developers/docs/topics/oauth2#authorization-code-grant-redirect-url-example + */ +export interface RESTPostOAuth2AccessTokenURIEncodedData { + client_id: string; + client_secret: string; + grant_type: 'authorization_code'; + code: string; + redirect_uri?: string; + scope: string; +} + +/** + * https://discord.com/developers/docs/topics/oauth2#authorization-code-grant-access-token-response + */ +export interface RESTPostOAuth2AccessTokenResult { + access_token: string; + token_type: string; + expires_in: number; + refresh_token: string; + scope: string; +} + +/** + * https://discord.com/developers/docs/topics/oauth2#authorization-code-grant-refresh-token-exchange-example + */ +export interface RESTPostOAuth2RefreshTokenURIEncodedData { + client_id: string; + client_secret: string; + grant_type: 'refresh_token'; + refresh_token: string; + redirect_uri?: string; + scope: string; +} + +export type RESTPostOAuth2RefreshTokenResult = RESTPostOAuth2AccessTokenResult; + +/** + * https://discord.com/developers/docs/topics/oauth2#implicit-grant + */ +export interface RESTOAuth2ImplicitAuthorizationQuery { + response_type: 'token'; + client_id: string; + scope: string; + redirect_uri?: string; + state?: string; + prompt?: 'consent' | 'none'; +} + +/** + * https://discord.com/developers/docs/topics/oauth2#implicit-grant-redirect-url-example + */ +export type RESTOAuth2ImplicitAuthorizationURIFragmentResult = Omit; + +/** + * https://discord.com/developers/docs/topics/oauth2#client-credentials-grant + */ +export interface RESTPostOAuth2ClientCredentialsURIEncodedData { + client_id: string; + client_secret: string; + grant_type: 'client_credentials'; + scope: string; +} + +export type RESTPostOAuth2ClientCredentialsResult = RESTOAuth2ImplicitAuthorizationURIFragmentResult; + +/** + * https://discord.com/developers/docs/topics/oauth2#bot-authorization-flow-bot-auth-parameters + */ +export interface RESTOAuth2BotAuthorizationQuery { + client_id: string; + scope: string; + /** + * The required permissions bitfield, stringified + */ + permissions?: string; + guild_id?: string; + disable_guild_select?: boolean; +} + +/** + * https://discord.com/developers/docs/topics/oauth2#advanced-bot-authorization + */ +export interface RESTOAuth2AdvancedBotAuthorizationQuery { + client_id: string; + /** + * This assumes you include the `bot` scope alongside others (like `identify` for example) + */ + scope: string; + /** + * The required permissions bitfield, stringified + */ + permissions?: string; + guild_id?: string; + disable_guild_select?: boolean; + response_type: string; + redirect_uri?: string; +} + +export interface RESTOAuth2AdvancedBotAuthorizationQueryResult { + code: string; + state?: string; + guild_id: string; + permissions: string; +} + +/** + * https://discord.com/developers/docs/topics/oauth2#advanced-bot-authorization-extended-bot-authorization-access-token-example + */ +export interface RESTPostOAuth2AccessTokenWithBotAndGuildsScopeResult { + access_token: string; + token_type: string; + expires_in: number; + refresh_token: string; + scope: string; + guild: APIGuild; +} + +/** + * https://discord.com/developers/docs/topics/oauth2#webhooks-webhook-token-response-example + */ +export interface RESTPostOAuth2AccessTokenWithBotAndWebhookIncomingScopeResult { + access_token: string; + token_type: string; + expires_in: number; + refresh_token: string; + scope: string; + webhook: APIWebhook; +} + +export type RESTPostOAuth2AccessTokenWithBotAndGuildsAndWebhookIncomingScopeResult = RESTPostOAuth2AccessTokenWithBotAndGuildsScopeResult & + RESTPostOAuth2AccessTokenWithBotAndWebhookIncomingScopeResult; diff --git a/v8/rest/user.ts b/v8/rest/user.ts new file mode 100644 index 00000000..a0774af8 --- /dev/null +++ b/v8/rest/user.ts @@ -0,0 +1,60 @@ +import type { APIChannel, APIConnection, APIUser, GuildFeature } from '../payloads'; + +/** + * https://discord.com/developers/docs/resources/user#get-current-user + */ +export type RESTGetAPICurrentUserResult = APIUser; + +/** + * https://discord.com/developers/docs/resources/user#get-user + */ +export type RESTGetAPIUserResult = APIUser; + +/** + * https://discord.com/developers/docs/resources/user#modify-current-user + */ +export interface RESTPatchAPICurrentUserJSONBody { + username?: string; + avatar?: string | null; +} + +export type RESTPatchAPICurrentUserResult = APIUser; + +/** + * https://discord.com/developers/docs/resources/user#get-current-user-guilds + */ +export interface RESTGetAPICurrentUserGuildsQuery { + before?: string; + after?: string; + limit?: number; +} + +export interface RESTAPIPartialCurrentUserGuild { + id: string; + name: string; + icon: string | null; + owner: boolean; + features: GuildFeature[]; + permissions: string; +} + +export type RESTGetAPICurrentUserGuildsResult = RESTAPIPartialCurrentUserGuild[]; + +/** + * https://discord.com/developers/docs/resources/user#leave-guild + */ +export type RESTDeleteAPICurrentUserGuildResult = never; + +/** + * https://discord.com/developers/docs/resources/user#create-dm + */ +export interface RESTPostAPICurrentUserCreateDMChannelJSONBody { + recipient_id: string; +} + +export type RESTPostAPICurrentUserCreateDMChannelResult = APIChannel; + +/** + * https://discord.com/developers/docs/resources/user#get-user-connections + */ +export type RESTGetAPICurrentUserConnectionsResult = APIConnection[]; diff --git a/v8/rest/voice.ts b/v8/rest/voice.ts new file mode 100644 index 00000000..c50f4760 --- /dev/null +++ b/v8/rest/voice.ts @@ -0,0 +1,6 @@ +import type { APIVoiceRegion } from '../payloads'; + +/** + * https://discord.com/developers/docs/resources/voice#list-voice-regions + */ +export type GetAPIVoiceRegionsResult = APIVoiceRegion[]; diff --git a/v8/rest/webhook.ts b/v8/rest/webhook.ts new file mode 100644 index 00000000..b89856fb --- /dev/null +++ b/v8/rest/webhook.ts @@ -0,0 +1,116 @@ +import type { APIAllowedMentionsSend } from './channel'; +import type { APIEmbed, APIMessage, APIWebhook } from '../payloads'; + +/** + * https://discord.com/developers/docs/resources/webhook#create-webhook + */ +export interface RESTPostAPIChannelWebhookJSONBody { + name: string; + avatar?: string | null; +} + +export type RESTPostAPIChannelWebhookResult = APIWebhook; + +/** + * https://discord.com/developers/docs/resources/webhook#get-channel-webhooks + */ +export type RESTGetAPIChannelWebhooksResult = APIWebhook[]; + +/** + * https://discord.com/developers/docs/resources/webhook#get-guild-webhooks + */ +export type RESTGetAPIGuildWebhooksResult = APIWebhook[]; + +/** + * https://discord.com/developers/docs/resources/webhook#get-webhook + */ +export type RESTGetAPIWebhookResult = APIWebhook; + +/** + * https://discord.com/developers/docs/resources/webhook#get-webhook-with-token + */ +export type RESTGetAPIWebhookWithTokenResult = Omit; + +/** + * https://discord.com/developers/docs/resources/webhook#modify-webhook + */ +export interface RESTPatchAPIWebhookJSONBody { + name?: string; + avatar?: string | null; + channel_id?: string; +} + +export type RESTPatchAPIWebhookResult = APIWebhook; + +/** + * https://discord.com/developers/docs/resources/webhook#modify-webhook-with-token + */ +export type RESTPatchAPIWebhookWithTokenJSONBody = Omit; + +export type RESTPatchAPIWebhookWithTokenResult = Omit; + +/** + * https://discord.com/developers/docs/resources/webhook#delete-webhook + */ +export type RESTDeleteAPIWebhookResult = never; +export type RESTDeleteAPIWebhookWithTokenResult = never; + +/** + * https://discord.com/developers/docs/resources/webhook#execute-webhook + */ +export interface RESTPostAPIWebhookWithTokenJSONBody { + content?: string; + username?: string; + avatar_url?: string; + tts?: boolean; + embeds?: APIEmbed[]; + allowed_mentions?: APIAllowedMentionsSend; +} + +/** + * https://discord.com/developers/docs/resources/webhook#execute-webhook + */ +export type RESTPostAPIWebhookWithTokenFormDataBody = + | { + /** + * JSON stringified message body + */ + payload_json?: string; + /** + * The file contents + */ + file: unknown; + } + | (RESTPostAPIWebhookWithTokenJSONBody & { + /** + * The file contents + */ + file: unknown; + }); + +/** + * https://discord.com/developers/docs/resources/webhook#execute-webhook-querystring-params + */ +export interface RESTPostAPIWebhookWithTokenQuery { + wait?: boolean; +} + +export type RESTPostAPIWebhookWithTokenResult = never; + +/** + * Received when a call to POST `/webhooks/{webhook.id}/{webhook.token}` receives + * the `wait` query parameter set to `true` + * + * @see https://discord.com/developers/docs/resources/webhook#execute-webhook-querystring-params + */ +export type RESTPostAPIWebhookWithTokenWaitResult = APIMessage; + +/** + * https://discord.com/developers/docs/resources/webhook#execute-slackcompatible-webhook-querystring-params + */ +export type RESTPostAPIWebhookWithTokenSlackQuery = RESTPostAPIWebhookWithTokenQuery; + +/** + * https://discord.com/developers/docs/resources/webhook#execute-githubcompatible-webhook-querystring-params + */ +export type RESTPostAPIWebhookWithTokenGitHubQuery = RESTPostAPIWebhookWithTokenQuery;