Merge pull request #145 from iopred/develop

Clean up voice state updates, make them goroutine safe.
This commit is contained in:
Bruce 2016-03-10 21:30:06 -06:00
commit 1003bec0aa

View file

@ -460,41 +460,33 @@ func (s *State) MessageRemove(message *Message) error {
return errors.New("Message not found.") return errors.New("Message not found.")
} }
func (s *State) VoiceStateUpdate(update *VoiceStateUpdate) error { func (s *State) voiceStateUpdate(update *VoiceStateUpdate) error {
var exists bool guild, err := s.Guild(update.GuildID)
var guild *Guild if err != nil {
return err
for _, guild = range s.Guilds {
if guild.ID == update.GuildID {
exists = true
break
}
} }
if !exists { s.Lock()
return nil defer s.Unlock()
}
// Handle Leaving Channel // Handle Leaving Channel
if update.ChannelID == "" { if update.ChannelID == "" {
for i, state := range guild.VoiceStates { for i, state := range guild.VoiceStates {
if state.UserID == update.UserID { if state.UserID == update.UserID {
guild.VoiceStates = append(guild.VoiceStates[:i], guild.VoiceStates[i+1:]...) guild.VoiceStates = append(guild.VoiceStates[:i], guild.VoiceStates[i+1:]...)
return nil
} }
} }
} else { } else {
exists := false for i, state := range guild.VoiceStates {
for _, state := range guild.VoiceStates {
if state.UserID == update.UserID { if state.UserID == update.UserID {
state.ChannelID = update.ChannelID guild.VoiceStates[i] = update.VoiceState
exists = true return nil
} }
} }
if !exists {
guild.VoiceStates = append(guild.VoiceStates, update.VoiceState) guild.VoiceStates = append(guild.VoiceStates, update.VoiceState)
} }
}
return nil return nil
} }
@ -561,7 +553,7 @@ func (s *State) onInterface(se *Session, i interface{}) (err error) {
case *MessageDelete: case *MessageDelete:
err = s.MessageRemove(t.Message) err = s.MessageRemove(t.Message)
case *VoiceStateUpdate: case *VoiceStateUpdate:
err = s.VoiceStateUpdate(t) err = s.voiceStateUpdate(t)
} }
return return