Forráskód Böngészése

Simplify Guild.Unavailable and correctly merge GUILD_UPDATE events.

Chris Rhodes 8 éve
szülő
commit
678756c9a9
2 módosított fájl, 28 hozzáadás és 10 törlés
  1. 27 9
      state.go
  2. 1 1
      structs.go

+ 27 - 9
state.go

@@ -98,17 +98,35 @@ func (s *State) GuildAdd(guild *Guild) error {
 		s.channelMap[c.ID] = c
 	}
 
-	// If the guild exists, replace it.
 	if g, ok := s.guildMap[guild.ID]; ok {
-		// If this guild already exists with data, don't stomp on props.
-		if g.Unavailable != nil && !*g.Unavailable {
-			guild.Members = g.Members
-			guild.Presences = g.Presences
-			guild.Channels = g.Channels
-			guild.VoiceStates = g.VoiceStates
+		// The guild already exists in state.
+		if guild.Unavailable {
+			// If the new guild is unavailable, just update the `unavailable` property on the
+			// current guild.
+			g.Unavailable = guild.Unavailable
+		} else {
+			// We are about to replace `g` in the state with `guild`, but first we need to
+			// make sure we preserve any fields that the `guild` doesn't contain from `g`.
+			if guild.Roles == nil {
+				guild.Roles = g.Roles
+			}
+			if guild.Emojis == nil {
+				guild.Emojis = g.Emojis
+			}
+			if guild.Members == nil {
+				guild.Members = g.Members
+			}
+			if guild.Presences == nil {
+				guild.Presences = g.Presences
+			}
+			if guild.Channels == nil {
+				guild.Channels = g.Channels
+			}
+			if guild.VoiceStates == nil {
+				guild.VoiceStates = g.VoiceStates
+			}
+			*g = *guild
 		}
-
-		*g = *guild
 		return nil
 	}
 

+ 1 - 1
structs.go

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