From 4a1d6ad4561eceee1f6f4bd670e282ac541666d2 Mon Sep 17 00:00:00 2001 From: "diamondburned (Forefront)" Date: Sun, 23 Feb 2020 09:56:16 -0800 Subject: [PATCH] Gateway: Added SESSIONS_REPLACE --- discord/guild.go | 2 +- discord/user.go | 4 ++++ gateway/events.go | 22 +++++++++++++++++++++- gateway/events_map.go | 1 + 4 files changed, 27 insertions(+), 2 deletions(-) diff --git a/discord/guild.go b/discord/guild.go index 1cb389a..2ca4bb4 100644 --- a/discord/guild.go +++ b/discord/guild.go @@ -125,7 +125,7 @@ type Presence struct { Status Status `json:"status"` ClientStatus struct { - Desktop Status `json:"status,omitempty"` + Desktop Status `json:"desktop,omitempty"` Mobile Status `json:"mobile,omitempty"` Web Status `json:"web,omitempty"` } `json:"client_status"` diff --git a/discord/user.go b/discord/user.go index 45b754f..797b16f 100644 --- a/discord/user.go +++ b/discord/user.go @@ -140,6 +140,10 @@ type Activity struct { Instance bool `json:"instance,omitempty"` Flags ActivityFlags `json:"flags,omitempty"` + + // Undocumented fields + SyncID string `json:"sync_id,omitempty"` + SessionID string `json:"session_id,omitempty"` } type ActivityType uint8 diff --git a/gateway/events.go b/gateway/events.go index 5051e90..ef73f97 100644 --- a/gateway/events.go +++ b/gateway/events.go @@ -175,7 +175,26 @@ type ( // Clients may only update their game status 5 times per 20 seconds. PresenceUpdateEvent discord.Presence PresencesReplaceEvent []discord.Presence - TypingStartEvent struct { + + // SessionsReplaceEvent is an undocumented user event. It's likely used for + // current user's presence updates. + SessionsReplaceEvent []struct { + Status discord.Status `json:"status"` + SessionID string `json:"session_id"` + + Game *discord.Activity `json:"game"` + Activities []discord.Activity `json:"activities"` + + ClientInfo struct { + Version int `json:"version"` + OS string `json:"os"` + Client string `json:"client"` + } `json:"client_info"` + + Active bool `json:"active"` + } + + TypingStartEvent struct { ChannelID discord.Snowflake `json:"channel_id"` UserID discord.Snowflake `json:"user_id"` Timestamp discord.UnixTimestamp `json:"timestamp"` @@ -183,6 +202,7 @@ type ( GuildID discord.Snowflake `json:"guild_id,omitempty"` Member *discord.Member `json:"member,omitempty"` } + UserUpdateEvent discord.User ) diff --git a/gateway/events_map.go b/gateway/events_map.go index 8f952f2..3580096 100644 --- a/gateway/events_map.go +++ b/gateway/events_map.go @@ -57,6 +57,7 @@ var EventCreator = map[string]func() Event{ "PRESENCE_UPDATE": func() Event { return new(PresenceUpdateEvent) }, "PRESENCES_REPLACE": func() Event { return new(PresencesReplaceEvent) }, + "SESSIONS_REPLACE": func() Event { return new(SessionsReplaceEvent) }, "TYPING_START": func() Event { return new(TypingStartEvent) },