summary refs log tree commit diff
path: root/src/gateway/schema
diff options
context:
space:
mode:
Diffstat (limited to 'src/gateway/schema')
-rw-r--r--src/gateway/schema/Activity.ts60
-rw-r--r--src/gateway/schema/Identify.ts106
-rw-r--r--src/gateway/schema/LazyRequest.ts19
-rw-r--r--src/gateway/schema/VoiceStateUpdateSchema.ts17
4 files changed, 202 insertions, 0 deletions
diff --git a/src/gateway/schema/Activity.ts b/src/gateway/schema/Activity.ts
new file mode 100644

index 00000000..f58b0fa9 --- /dev/null +++ b/src/gateway/schema/Activity.ts
@@ -0,0 +1,60 @@ +import { Activity, Status } from "@fosscord/util"; + +export const ActivitySchema = { + afk: Boolean, + status: String, + $activities: [ + { + name: String, + type: Number, + $url: String, + $created_at: Date, + $timestamps: { + $start: Number, + $end: Number, + }, + $application_id: String, + $details: String, + $state: String, + $emoji: { + $name: String, + $id: String, + $animated: Boolean, + }, + $party: { + $id: String, + $size: [Number, Number], + }, + $assets: { + $large_image: String, + $large_text: String, + $small_image: String, + $small_text: String, + }, + $secrets: { + $join: String, + $spectate: String, + $match: String, + }, + $instance: Boolean, + $flags: String, + + $id: String, + $sync_id: String, + $metadata: { // spotify + $context_uri: String, + album_id: String, + artist_ids: [String], + }, + $session_id: String, + }, + ], + $since: Number, // unix time (in milliseconds) of when the client went idle, or null if the client is not idle +}; + +export interface ActivitySchema { + afk: boolean; + status: Status; + activities?: Activity[]; + since?: number; // unix time (in milliseconds) of when the client went idle, or null if the client is not idle +} diff --git a/src/gateway/schema/Identify.ts b/src/gateway/schema/Identify.ts new file mode 100644
index 00000000..6f68b515 --- /dev/null +++ b/src/gateway/schema/Identify.ts
@@ -0,0 +1,106 @@ +import { ActivitySchema } from "./Activity"; + +export const IdentifySchema = { + token: String, + $intents: BigInt, // discord uses a Integer for bitfields we use bigints tho. | instanceOf will automatically convert the Number to a BigInt + $properties: Object, + // { + // // discord uses $ in the property key for bots, so we need to double prefix it, because instanceOf treats $ (prefix) as a optional key + // $os: String, + // $os_arch: String, + // $browser: String, + // $device: String, + // $$os: String, + // $$browser: String, + // $$device: String, + // $browser_user_agent: String, + // $browser_version: String, + // $os_version: String, + // $referrer: String, + // $$referrer: String, + // $referring_domain: String, + // $$referring_domain: String, + // $referrer_current: String, + // $referring_domain_current: String, + // $release_channel: String, + // $client_build_number: Number, + // $client_event_source: String, + // $client_version: String, + // $system_locale: String, + // $window_manager: String, + // $distro: String, + // }, + $presence: ActivitySchema, + $compress: Boolean, + $large_threshold: Number, + $shard: [BigInt, BigInt], + $guild_subscriptions: Boolean, + $capabilities: Number, + $client_state: { + $guild_hashes: Object, + $highest_last_message_id: String || Number, + $read_state_version: Number, + $user_guild_settings_version: Number, + $user_settings_version: undefined, + $useruser_guild_settings_version: undefined, + }, + $clientState: { + $guildHashes: Object, + $highestLastMessageId: String || Number, + $readStateVersion: Number, + $useruserGuildSettingsVersion: undefined, + $userGuildSettingsVersion: undefined, + }, + $v: Number, + $version: Number, +}; + +export interface IdentifySchema { + token: string; + properties: { + // bruh discord really uses $ in the property key, so we need to double prefix it, because instanceOf treats $ (prefix) as a optional key + os?: string; + os_atch?: string; + browser?: string; + device?: string; + $os?: string; + $browser?: string; + $device?: string; + browser_user_agent?: string; + browser_version?: string; + os_version?: string; + referrer?: string; + referring_domain?: string; + referrer_current?: string; + referring_domain_current?: string; + release_channel?: "stable" | "dev" | "ptb" | "canary"; + client_build_number?: number; + client_event_source?: any; + client_version?: string; + system_locale?: string; + }; + intents?: bigint; // discord uses a Integer for bitfields we use bigints tho. | instanceOf will automatically convert the Number to a BigInt + presence?: ActivitySchema; + compress?: boolean; + large_threshold?: number; + largeThreshold?: number; + shard?: [bigint, bigint]; + guild_subscriptions?: boolean; + capabilities?: number; + client_state?: { + guild_hashes?: any; + highest_last_message_id?: string | number; + read_state_version?: number; + user_guild_settings_version?: number; + user_settings_version?: number; + useruser_guild_settings_version?: number; + }; + clientState?: { + guildHashes?: any; + highestLastMessageId?: string | number; + readStateVersion?: number; + userGuildSettingsVersion?: number; + useruserGuildSettingsVersion?: number; + }; + v?: number; +} diff --git a/src/gateway/schema/LazyRequest.ts b/src/gateway/schema/LazyRequest.ts new file mode 100644
index 00000000..1fe658bb --- /dev/null +++ b/src/gateway/schema/LazyRequest.ts
@@ -0,0 +1,19 @@ +export interface LazyRequest { + guild_id: string; + channels?: Record<string, [number, number][]>; + activities?: boolean; + threads?: boolean; + typing?: true; + members?: any[]; + thread_member_lists?: any[]; +} + +export const LazyRequest = { + guild_id: String, + $activities: Boolean, + $channels: Object, + $typing: Boolean, + $threads: Boolean, + $members: [] as any[], + $thread_member_lists: [] as any[], +}; diff --git a/src/gateway/schema/VoiceStateUpdateSchema.ts b/src/gateway/schema/VoiceStateUpdateSchema.ts new file mode 100644
index 00000000..f6480414 --- /dev/null +++ b/src/gateway/schema/VoiceStateUpdateSchema.ts
@@ -0,0 +1,17 @@ +export const VoiceStateUpdateSchema = { + $guild_id: String, + $channel_id: String, + self_mute: Boolean, + self_deaf: Boolean, + $self_video: Boolean, //required in docs but bots don't always send it + $preferred_region: String, +}; + +export interface VoiceStateUpdateSchema { + guild_id?: string; + channel_id?: string; + self_mute: boolean; + self_deaf: boolean; + self_video?: boolean; + preferred_region?: string; +} \ No newline at end of file