diff --git a/examples/airhorn/main.go b/examples/airhorn/main.go index 160ca85..28211e9 100644 --- a/examples/airhorn/main.go +++ b/examples/airhorn/main.go @@ -102,7 +102,7 @@ func messageCreate(s *discordgo.Session, m *discordgo.MessageCreate) { // This function will be called (due to AddHandler above) every time a new // guild is joined. func guildCreate(s *discordgo.Session, event *discordgo.GuildCreate) { - if event.Guild.Unavailable != nil { + if event.Guild.Unavailable { return } diff --git a/state.go b/state.go index fa77b20..ce04920 100644 --- a/state.go +++ b/state.go @@ -98,16 +98,27 @@ 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 { + // 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 return nil } diff --git a/structs.go b/structs.go index 7fcf44b..be554b7 100644 --- a/structs.go +++ b/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