From 5b88b577fb8c88f1a501b061333d64a6e503aa27 Mon Sep 17 00:00:00 2001 From: diamondburned Date: Thu, 9 Jul 2020 16:15:58 -0700 Subject: [PATCH] Fixed several bugs related to channel orders and message edits --- channel.go | 2 +- guild.go | 8 +++++++- message.go | 13 +++++++++++-- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/channel.go b/channel.go index faae47a..96b6611 100644 --- a/channel.go +++ b/channel.go @@ -254,7 +254,7 @@ func (ch *Channel) JoinServer(ctx context.Context, ct cchat.MessagesContainer) ( ch.session.AddHandler(func(m *gateway.MessageUpdateEvent) { // If the updated content is empty. TODO: add embed support. if m.ChannelID == ch.id && m.Content != "" { - ct.UpdateMessage(NewMessageUpdateContent(m.Message)) + ct.UpdateMessage(NewMessageUpdateContent(m.Message, ch.session)) } }), ch.session.AddHandler(func(m *gateway.MessageDeleteEvent) { diff --git a/guild.go b/guild.go index e11b041..ad1bac3 100644 --- a/guild.go +++ b/guild.go @@ -158,10 +158,16 @@ func (g *Guild) Servers(container cchat.ServersContainer) error { // Only get top-level channels (those with category ID being null). var toplevels = filterAccessible(g.session, filterCategory(c, discord.NullSnowflake)) - sort.Slice(toplevels, func(i, j int) bool { + // Sort so that positions are correct. + sort.SliceStable(toplevels, func(i, j int) bool { return toplevels[i].Position < toplevels[j].Position }) + // Sort so that channels are before categories. + sort.SliceStable(toplevels, func(i, _ int) bool { + return toplevels[i].Type != discord.GuildCategory + }) + var chs = make([]cchat.Server, 0, len(toplevels)) for _, ch := range toplevels { diff --git a/message.go b/message.go index 67c4e25..04dc326 100644 --- a/message.go +++ b/message.go @@ -121,10 +121,19 @@ type Message struct { mentioned bool } -func NewMessageUpdateContent(msg discord.Message) Message { +func NewMessageUpdateContent(msg discord.Message, s *Session) Message { + // Check if content is empty. + if msg.Content == "" { + // Then grab the content from the state. + m, err := s.Store.Message(msg.ChannelID, msg.ID) + if err == nil { + msg.Content = m.Content + } + } + return Message{ messageHeader: newHeader(msg), - content: text.Rich{Content: msg.Content}, + content: segments.ParseMessage(&msg, s.Store), } }