Browse Source

Set GuildID on all members in discordgo land not in state.

Chris Rhodes 8 years ago
parent
commit
315ae45231
2 changed files with 23 additions and 19 deletions
  1. 23 0
      discord.go
  2. 0 19
      state.go

+ 23 - 0
discord.go

@@ -239,11 +239,34 @@ func (s *Session) initialize() {
 	s.handlers = map[interface{}][]reflect.Value{}
 }
 
+// setGuildIds will set the GuildID on all the members of a guild.
+// This is done as event data does not have it set.
+func setGuildIds(g *Guild) {
+	for _, c := range g.Channels {
+		c.GuildID = g.ID
+	}
+
+	for _, m := range g.Members {
+		m.GuildID = g.ID
+	}
+
+	for _, vs := range g.VoiceStates {
+		vs.GuildID = g.ID
+	}
+}
+
 // onInterface handles all internal events and routes them to the appropriate internal handler.
 func (s *Session) onInterface(i interface{}) {
 	switch t := i.(type) {
 	case *Ready:
+		for _, g := range t.Guilds {
+			setGuildIds(g)
+		}
 		s.onReady(t)
+	case *GuildCreate:
+		setGuildIds(t.Guild)
+	case *GuildUpdate:
+		setGuildIds(t.Guild)
 	case *Resumed:
 		s.onResumed(t)
 	case *VoiceServerUpdate:

+ 0 - 19
state.go

@@ -67,7 +67,6 @@ func (s *State) GuildAdd(guild *Guild) error {
 
 	// Update the channels to point to the right guild, adding them to the channelMap as we go
 	for _, c := range guild.Channels {
-		c.GuildID = guild.ID
 		s.channelMap[c.ID] = c
 	}
 
@@ -81,24 +80,15 @@ func (s *State) GuildAdd(guild *Guild) error {
 			guild.Emojis = g.Emojis
 		}
 		if guild.Members == nil {
-			for _, m := range g.Members {
-				m.GuildID = guild.ID
-			}
 			guild.Members = g.Members
 		}
 		if guild.Presences == nil {
 			guild.Presences = g.Presences
 		}
 		if guild.Channels == nil {
-			for _, c := range g.Channels {
-				c.GuildID = guild.ID
-			}
 			guild.Channels = g.Channels
 		}
 		if guild.VoiceStates == nil {
-			for _, g := range g.VoiceStates {
-				g.GuildID = guild.ID
-			}
 			guild.VoiceStates = g.VoiceStates
 		}
 		*g = *guild
@@ -631,17 +621,8 @@ func (s *State) onReady(se *Session, r *Ready) (err error) {
 		s.guildMap[g.ID] = g
 
 		for _, c := range g.Channels {
-			c.GuildID = g.ID
 			s.channelMap[c.ID] = c
 		}
-
-		for _, m := range g.Members {
-			m.GuildID = g.ID
-		}
-
-		for _, vs := range g.VoiceStates {
-			vs.GuildID = g.ID
-		}
 	}
 
 	for _, c := range s.PrivateChannels {