Message state now consistently have GuildIDs, fixed stack recursion bug, added MemberColo

This commit is contained in:
diamondburned (Forefront) 2020-01-20 15:22:34 -08:00
parent 62dfa7c311
commit 075980582e
2 changed files with 34 additions and 5 deletions

View File

@ -132,3 +132,20 @@ type GuildEmbed struct {
Enabled bool `json:"enabled"`
ChannelID Snowflake `json:"channel_id,omitempty"`
}
// DefaultMemberColor is the color used for members without colored roles.
var DefaultMemberColor Color = 0x0
func MemberColor(guild Guild, member Member) Color {
var c = DefaultMemberColor
var pos int
for _, r := range guild.Roles {
if r.Color > 0 && r.Position > pos {
c = r.Color
pos = r.Position
}
}
return c
}

View File

@ -51,9 +51,7 @@ func NewFromSession(s *session.Session, store Store) (*State, error) {
StateLog: func(err error) {},
}
s.ErrorLog = func(err error) {
state.ErrorLog(err)
}
s.ErrorLog = state.ErrorLog
return state, state.hookSession()
}
@ -330,8 +328,22 @@ func (s *State) Messages(channelID discord.Snowflake) ([]discord.Message, error)
return nil, err
}
for _, m := range ms {
if err := s.Store.MessageSet(&m); err != nil {
// New messages fetched weirdly does not have GuildID filled. We'll try and
// get it for consistency with incoming message creates.
var guildID discord.Snowflake
// A bit too convoluted, but whatever.
c, err := s.Channel(channelID)
if err == nil {
// If it's 0, it's 0 anyway. We don't need a check here.
guildID = c.GuildID
}
for i := range ms {
// Set the guild ID, fine if it's 0 (it's already 0 anyway).
ms[i].GuildID = guildID
if err := s.Store.MessageSet(&ms[i]); err != nil {
return nil, err
}
}