Create new nickMemberMap field and lock in
getGuildMemberByNick
This commit is contained in:
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user