소스 검색

Fix lazy-loading of guilds not working

We're moving to lazy-loading guilds, meaning bots now recieve a READY
packet with guilds that only have 'id' and 'unavailable' fields. Post
READY, the client then lazyily recieves GUILD_CREATE's for the rest of
the guilds it's in. Previously we assumed the first instance of the
guild we got (from ready) had all the required information, now we need
to use the GUILD_CREATE if the guild was marked as unavailable.
andrei 8 년 전
부모
커밋
019d0fe9af
2개의 변경된 파일13개의 추가작업 그리고 10개의 파일을 삭제
  1. 12 10
      state.go
  2. 1 0
      structs.go

+ 12 - 10
state.go

@@ -57,24 +57,26 @@ func (s *State) GuildAdd(guild *Guild) error {
 	s.Lock()
 	defer s.Unlock()
 
+	// Otherwise, update the channels to point to the right guild
+	for _, c := range guild.Channels {
+		c.GuildID = guild.ID
+	}
+
 	// If the guild exists, replace it.
 	for i, g := range s.Guilds {
 		if g.ID == guild.ID {
-			// Don't stomp on properties that don't come in updates.
-			guild.Members = g.Members
-			guild.Presences = g.Presences
-			guild.Channels = g.Channels
-			guild.VoiceStates = g.VoiceStates
+			// If this guild already exists with data, don't stomp on props
+			if !g.Unavailable {
+				guild.Members = g.Members
+				guild.Presences = g.Presences
+				guild.Channels = g.Channels
+				guild.VoiceStates = g.VoiceStates
+			}
 			s.Guilds[i] = guild
 			return nil
 		}
 	}
 
-	// Otherwise, update the channels to point to the right guild
-	for _, c := range guild.Channels {
-		c.GuildID = guild.ID
-	}
-
 	s.Guilds = append(s.Guilds, guild)
 	return nil
 }

+ 1 - 0
structs.go

@@ -178,6 +178,7 @@ type Guild struct {
 	Presences         []*Presence       `json:"presences"`
 	Channels          []*Channel        `json:"channels"`
 	VoiceStates       []*VoiceState     `json:"voice_states"`
+	Unavailable       bool              `json:"unavailable"`
 }
 
 // A GuildParams stores all the data needed to update discord guild settings