Browse Source

Merge pull request #165 from b1naryth1ef/bugfix/channel-mappings

Fix channelMap not being filled for bot users/>100 guilds
Bruce 8 years ago
parent
commit
4c4e8386bc
1 changed files with 13 additions and 19 deletions
  1. 13 19
      state.go

+ 13 - 19
state.go

@@ -45,7 +45,6 @@ func (s *State) OnReady(r *Ready) error {
 
 		for _, c := range g.Channels {
 			c.GuildID = g.ID
-
 			s.channelMap[c.ID] = c
 		}
 	}
@@ -64,16 +63,17 @@ func (s *State) GuildAdd(guild *Guild) error {
 		return ErrNilState
 	}
 
-	// Update the channels to point to the right guild
+	s.Lock()
+	defer s.Unlock()
+
+	// 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
 	}
 
 	// If the guild exists, replace it.
-	if g, err := s.Guild(guild.ID); err == nil {
-		s.Lock()
-		defer s.Unlock()
-
+	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
@@ -86,9 +86,6 @@ func (s *State) GuildAdd(guild *Guild) error {
 		return nil
 	}
 
-	s.Lock()
-	defer s.Unlock()
-
 	s.Guilds = append(s.Guilds, guild)
 	s.guildMap[guild.ID] = guild
 
@@ -224,11 +221,11 @@ func (s *State) ChannelAdd(channel *Channel) error {
 		return ErrNilState
 	}
 
-	// If the channel exists, replace it.
-	if c, err := s.Channel(channel.ID); err == nil {
-		s.Lock()
-		defer s.Unlock()
+	s.Lock()
+	defer s.Unlock()
 
+	// If the channel exists, replace it
+	if c, ok := s.channelMap[channel.ID]; ok {
 		channel.Messages = c.Messages
 		channel.PermissionOverwrites = c.PermissionOverwrites
 
@@ -236,15 +233,12 @@ func (s *State) ChannelAdd(channel *Channel) error {
 		return nil
 	}
 
-	s.Lock()
-	defer s.Unlock()
-
 	if channel.IsPrivate {
 		s.PrivateChannels = append(s.PrivateChannels, channel)
 	} else {
-		guild, err := s.Guild(channel.GuildID)
-		if err != nil {
-			return err
+		guild, ok := s.guildMap[channel.GuildID]
+		if !ok {
+			return errors.New("Guild for channel not found.")
 		}
 
 		guild.Channels = append(guild.Channels, channel)