From 678756c9a93bf3ff231ac527623ec540d8ce4a4d Mon Sep 17 00:00:00 2001 From: Chris Rhodes Date: Thu, 8 Sep 2016 19:39:29 -0700 Subject: [PATCH 1/3] Simplify Guild.Unavailable and correctly merge GUILD_UPDATE events. --- state.go | 36 +++++++++++++++++++++++++++--------- structs.go | 2 +- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/state.go b/state.go index e9eb4d6..45202ac 100644 --- a/state.go +++ b/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 } diff --git a/structs.go b/structs.go index b782432..270427a 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 From 42cef0c0d0ea2156e2ff455c2dab8a408380ea5e Mon Sep 17 00:00:00 2001 From: Chris Rhodes Date: Thu, 8 Sep 2016 20:06:24 -0700 Subject: [PATCH 2/3] Remove unavailable goop, b1nzy says it'd never happen. --- state.go | 47 ++++++++++++++++++++--------------------------- 1 file changed, 20 insertions(+), 27 deletions(-) diff --git a/state.go b/state.go index 45202ac..89dfdd4 100644 --- a/state.go +++ b/state.go @@ -99,34 +99,27 @@ func (s *State) GuildAdd(guild *Guild) error { } if g, ok := s.guildMap[guild.ID]; ok { - // 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 + // 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 } From d28edb024e66c547b4b0e51ea474fe0add83f254 Mon Sep 17 00:00:00 2001 From: Chris Rhodes Date: Thu, 8 Sep 2016 20:07:43 -0700 Subject: [PATCH 3/3] Fix airhorn example. --- examples/airhorn/main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/airhorn/main.go b/examples/airhorn/main.go index cc61301..2fbaea0 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 }