State: implement #76

This commit is contained in:
mavolin 2020-05-16 22:13:40 +02:00 committed by Maximilian von Lindern
parent 130e60c162
commit 6202f53ebb
No known key found for this signature in database
GPG Key ID: D8681218EDF216DF
1 changed files with 48 additions and 18 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 {
func (s *State) AuthorColor(message *gateway.MessageCreateEvent) (discord.Color, error) {
if !message.GuildID.Valid() {
return discord.DefaultMemberColor
return 0, nil
}
if message.Member != nil {
guild, err := s.Guild(message.GuildID)
if err != nil {
return discord.DefaultMemberColor
return 0, nil
}
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