Added RequestGuildMembers to request guild members from the gateway

This commit is contained in:
jonas747 2016-09-25 21:29:59 +02:00
parent bbbc21db6b
commit 9c7c9d3fd2
3 changed files with 45 additions and 0 deletions

View file

@ -30,6 +30,7 @@ var eventToInterface = map[string]interface{}{
"GUILD_ROLE_DELETE": GuildRoleDelete{}, "GUILD_ROLE_DELETE": GuildRoleDelete{},
"GUILD_INTEGRATIONS_UPDATE": GuildIntegrationsUpdate{}, "GUILD_INTEGRATIONS_UPDATE": GuildIntegrationsUpdate{},
"GUILD_EMOJIS_UPDATE": GuildEmojisUpdate{}, "GUILD_EMOJIS_UPDATE": GuildEmojisUpdate{},
"GUILD_MEMBERS_CHUNK": GuildMembersChunk{},
"MESSAGE_ACK": MessageAck{}, "MESSAGE_ACK": MessageAck{},
"MESSAGE_CREATE": MessageCreate{}, "MESSAGE_CREATE": MessageCreate{},
"MESSAGE_UPDATE": MessageUpdate{}, "MESSAGE_UPDATE": MessageUpdate{},

View file

@ -412,6 +412,12 @@ type GuildEmojisUpdate struct {
Emojis []*Emoji `json:"emojis"` 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. // A GuildIntegration stores data for a guild integration.
type GuildIntegration struct { type GuildIntegration struct {
ID string `json:"id"` ID string `json:"id"`

View file

@ -269,6 +269,44 @@ func (s *Session) UpdateStatus(idle int, game string) (err error) {
return s.UpdateStreamingStatus(idle, game, "") 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 // onEvent is the "event handler" for all messages received on the
// Discord Gateway API websocket connection. // Discord Gateway API websocket connection.
// //