From 9c7c9d3fd2650aa0ff95fb11dc1816e2b551c69a Mon Sep 17 00:00:00 2001 From: jonas747 Date: Sun, 25 Sep 2016 21:29:59 +0200 Subject: [PATCH 1/3] Added RequestGuildMembers to request guild members from the gateway --- events.go | 1 + structs.go | 6 ++++++ wsapi.go | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+) diff --git a/events.go b/events.go index b1a9b09..49f12ad 100644 --- a/events.go +++ b/events.go @@ -30,6 +30,7 @@ var eventToInterface = map[string]interface{}{ "GUILD_ROLE_DELETE": GuildRoleDelete{}, "GUILD_INTEGRATIONS_UPDATE": GuildIntegrationsUpdate{}, "GUILD_EMOJIS_UPDATE": GuildEmojisUpdate{}, + "GUILD_MEMBERS_CHUNK": GuildMembersChunk{}, "MESSAGE_ACK": MessageAck{}, "MESSAGE_CREATE": MessageCreate{}, "MESSAGE_UPDATE": MessageUpdate{}, diff --git a/structs.go b/structs.go index 7fcf44b..dcf6fa0 100644 --- a/structs.go +++ b/structs.go @@ -412,6 +412,12 @@ type GuildEmojisUpdate struct { Emojis []*Emoji `json:"emojis"` } +// A GuildMembersChunk stores data for the Guild Members Chunk websocket event. +type GuildMembersChunk struct { + GuildID string `json:"guild_id"` + Members []*Member `json:"members"` +} + // A GuildIntegration stores data for a guild integration. type GuildIntegration struct { ID string `json:"id"` diff --git a/wsapi.go b/wsapi.go index a19c384..3bf2c93 100644 --- a/wsapi.go +++ b/wsapi.go @@ -269,6 +269,44 @@ func (s *Session) UpdateStatus(idle int, game string) (err error) { return s.UpdateStreamingStatus(idle, game, "") } +type requestGuildMembersData struct { + GuildID string `json:"guild_id"` + Query string `json:"query"` + Limit int `json:"limit"` +} + +type requestGuildMembersOp struct { + Op int `json:"op"` + Data requestGuildMembersData `json:"d"` +} + +// RequestGuildMembers requests guild members from the gateway +// The gateway responds with GuildMembersChunk events +// guildID : the ID of the guild to request members of +// query : string hat username sarts with, leave empty to return all members +// limit : max number of items to return, or 0 o reques all members matched +func (s *Session) RequestGuildMembers(guildID, query string, limit int) (err error) { + s.log(LogInformational, "called") + + s.RLock() + defer s.RUnlock() + if s.wsConn == nil { + return errors.New("no websocket connection exists") + } + + data := requestGuildMembersData{ + GuildID: guildID, + Query: query, + Limit: limit, + } + + s.wsMutex.Lock() + err = s.wsConn.WriteJSON(requestGuildMembersOp{8, data}) + s.wsMutex.Unlock() + + return +} + // onEvent is the "event handler" for all messages received on the // Discord Gateway API websocket connection. // From 1ecb7458e94c47d177888df0a2769fc2bce1e8f1 Mon Sep 17 00:00:00 2001 From: jonas747 Date: Wed, 28 Sep 2016 06:31:39 +0200 Subject: [PATCH 2/3] Fix typos --- wsapi.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/wsapi.go b/wsapi.go index 3bf2c93..835c293 100644 --- a/wsapi.go +++ b/wsapi.go @@ -282,9 +282,9 @@ type requestGuildMembersOp struct { // RequestGuildMembers requests guild members from the gateway // The gateway responds with GuildMembersChunk events -// guildID : the ID of the guild to request members of -// query : string hat username sarts with, leave empty to return all members -// limit : max number of items to return, or 0 o reques all members matched +// guildID : The ID of the guild to request members of +// query : String that username sarts with, leave empty to return all members +// limit : Max number of items to return, or 0 to request all members matched func (s *Session) RequestGuildMembers(guildID, query string, limit int) (err error) { s.log(LogInformational, "called") From 1dcdf130fdbedeef947605cfe8be5c8f640e9558 Mon Sep 17 00:00:00 2001 From: jonas747 Date: Wed, 28 Sep 2016 07:00:11 +0200 Subject: [PATCH 3/3] Fix Another typo --- wsapi.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wsapi.go b/wsapi.go index 835c293..6e69d95 100644 --- a/wsapi.go +++ b/wsapi.go @@ -283,7 +283,7 @@ type requestGuildMembersOp struct { // RequestGuildMembers requests guild members from the gateway // The gateway responds with GuildMembersChunk events // guildID : The ID of the guild to request members of -// query : String that username sarts with, leave empty to return all members +// query : String that username starts with, leave empty to return all members // limit : Max number of items to return, or 0 to request all members matched func (s *Session) RequestGuildMembers(guildID, query string, limit int) (err error) { s.log(LogInformational, "called")