Merge pull request #79 from mavolin/76-async-state

This commit is contained in:
diamondburned 2020-05-16 13:41:37 -07:00 committed by GitHub
commit ff8ebcbacf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 49 additions and 19 deletions

View File

@ -121,34 +121,49 @@ func (s *State) MemberDisplayName(guildID, userID discord.Snowflake) (string, er
return member.Nick, nil
}
func (s *State) AuthorColor(message *gateway.MessageCreateEvent) discord.Color {
if !message.GuildID.Valid() {
return discord.DefaultMemberColor
func (s *State) AuthorColor(message *gateway.MessageCreateEvent) (discord.Color, error) {
if !message.GuildID.Valid() { // this is a dm
return discord.DefaultMemberColor, nil
}
if message.Member != nil {
guild, err := s.Guild(message.GuildID)
if err != nil {
return discord.DefaultMemberColor
return 0, err
}
return discord.MemberColor(*guild, *message.Member)
return discord.MemberColor(*guild, *message.Member), nil
}
return s.MemberColor(message.GuildID, message.Author.ID)
}
func (s *State) MemberColor(guildID, userID discord.Snowflake) discord.Color {
member, err := s.Member(guildID, userID)
if err != nil {
return discord.DefaultMemberColor
func (s *State) MemberColor(guildID, userID discord.Snowflake) (discord.Color, error) {
var wg sync.WaitGroup
g, gerr := s.Store.Guild(guildID)
if gerr != nil {
wg.Add(1)
go func() {
g, gerr = s.Session.Guild(guildID)
wg.Done()
}()
}
guild, err := s.Guild(guildID)
if err != nil {
return discord.DefaultMemberColor
m, merr := s.Store.Member(guildID, userID)
if merr != nil {
m, merr = s.Member(guildID, userID)
if merr != nil {
return 0, errors.Wrap(merr, "failed to get member")
}
}
return discord.MemberColor(*guild, *member)
wg.Wait()
if gerr != nil {
return 0, errors.Wrap(merr, "failed to get guild")
}
return discord.MemberColor(*g, *m), nil
}
////
@ -159,14 +174,29 @@ func (s *State) Permissions(channelID, userID discord.Snowflake) (discord.Permis
return 0, errors.Wrap(err, "Failed to get channel")
}
g, err := s.Guild(ch.GuildID)
if err != nil {
return 0, errors.Wrap(err, "Failed to get guild")
var wg sync.WaitGroup
g, gerr := s.Store.Guild(ch.GuildID)
if gerr != nil {
wg.Add(1)
go func() {
g, gerr = s.Session.Guild(ch.GuildID)
wg.Done()
}()
}
m, err := s.Member(ch.GuildID, userID)
if err != nil {
return 0, errors.Wrap(err, "Failed to get member")
m, merr := s.Store.Member(ch.GuildID, userID)
if merr != nil {
m, merr = s.Member(ch.GuildID, userID)
if merr != nil {
return 0, errors.Wrap(merr, "failed to get member")
}
}
wg.Wait()
if gerr != nil {
return 0, errors.Wrap(merr, "failed to get guild")
}
return discord.CalcOverwrites(*g, *ch, *m), nil