Create new nickMemberMap field and lock in

getGuildMemberByNick
This commit is contained in:
Jerry Heiselman
2018-09-04 11:31:49 -05:00
parent e3d40acda0
commit 8274f85feb

View File

@@ -22,6 +22,7 @@ type Bdiscord struct {
Nick string Nick string
UseChannelID bool UseChannelID bool
userMemberMap map[string]*discordgo.Member userMemberMap map[string]*discordgo.Member
nickMemberMap map[string]*discordgo.Member
guildID string guildID string
webhookID string webhookID string
webhookToken string webhookToken string
@@ -319,6 +320,7 @@ func (b *Bdiscord) getNick(user *discordgo.User) string {
return user.Username return user.Username
} }
b.userMemberMap[user.ID] = member b.userMemberMap[user.ID] = member
b.nickMemberMap[member.Nick] = member
// only return if nick is set // only return if nick is set
if b.userMemberMap[user.ID].Nick != "" { if b.userMemberMap[user.ID].Nick != "" {
return b.userMemberMap[user.ID].Nick return b.userMemberMap[user.ID].Nick
@@ -327,33 +329,14 @@ func (b *Bdiscord) getNick(user *discordgo.User) string {
} }
func (b *Bdiscord) getGuildMemberByNick(nick string) (*discordgo.Member, error) { func (b *Bdiscord) getGuildMemberByNick(nick string) (*discordgo.Member, error) {
// Check to see if we have the nick in userMemberMap b.Lock()
b.Log.Debugln("Checking the userMemberMap for cached user information") defer b.Unlock()
for uid := range b.userMemberMap { if _, ok := b.nickMemberMap[nick]; ok {
if b.getNick(b.userMemberMap[uid].User) == nick { if b.nickMemberMap[nick] != nil {
b.Log.Debugf("Found user with nick '" + nick + " in userMemberMap at uid=" + uid + "\n") return b.nickMemberMap[nick], nil
return b.userMemberMap[uid], nil
} }
} }
// The user wasn't in the map, so go ahead an make the API call to get it
members, err := b.c.GuildMembers(b.guildID, "", 1000)
if err != nil {
b.Log.Error("Error obtaining guild members", err)
return nil, err
}
for _, member := range members {
if member.User == nil {
member.User, err = b.c.User(nick)
if err != nil {
return nil, errors.New("Couldn't find guild member with nick " + nick)
}
}
b.Log.Debugf("Checking %s == %s", b.getNick(member.User), nick)
if b.getNick(member.User) == nick {
return member, nil
}
}
return nil, errors.New("Couldn't find guild member with nick " + nick) // This will most likely get ignored by the caller return nil, errors.New("Couldn't find guild member with nick " + nick) // This will most likely get ignored by the caller
} }