From b9d06fade536e8c1593b8047c06532a05ba997fe Mon Sep 17 00:00:00 2001 From: diamondburned Date: Wed, 19 Aug 2020 16:20:51 -0700 Subject: [PATCH] Added MessagesBefore --- category.go | 2 +- channel.go | 29 ++++++++++++++++++++++++++++- channel_memberlist.go | 4 ++-- go.mod | 2 +- go.sum | 2 ++ guild.go | 4 ++-- message.go | 4 ++-- service.go | 2 +- 8 files changed, 39 insertions(+), 10 deletions(-) diff --git a/category.go b/category.go index b283b71..d0265f8 100644 --- a/category.go +++ b/category.go @@ -28,7 +28,7 @@ func NewCategory(s *Session, ch discord.Channel) *Category { } } -func (c *Category) ID() string { +func (c *Category) ID() cchat.ID { return c.id.String() } diff --git a/channel.go b/channel.go index 36de863..210c20c 100644 --- a/channel.go +++ b/channel.go @@ -71,6 +71,7 @@ var ( _ cchat.ServerNickname = (*Channel)(nil) _ cchat.ServerMessageEditor = (*Channel)(nil) _ cchat.ServerMessageActioner = (*Channel)(nil) + _ cchat.ServerMessageBacklogger = (*Channel)(nil) _ cchat.ServerMessageTypingIndicator = (*Channel)(nil) _ cchat.ServerMessageUnreadIndicator = (*Channel)(nil) ) @@ -115,7 +116,7 @@ func (ch *Channel) guild() (*discord.Guild, error) { return nil, errors.New("channel not in a guild") } -func (ch *Channel) ID() string { +func (ch *Channel) ID() cchat.ID { return ch.id.String() } @@ -287,6 +288,32 @@ func (ch *Channel) JoinServer(ctx context.Context, ct cchat.MessagesContainer) ( return joinCancels(addcancel()), nil } +func (ch *Channel) MessagesBefore(ctx context.Context, b cchat.ID, c cchat.MessagePrepender) error { + p, err := discord.ParseSnowflake(b) + if err != nil { + return errors.Wrap(err, "Failed to parse snowflake") + } + + s := ch.session.WithContext(ctx) + + m, err := s.MessagesBefore(ch.id, discord.MessageID(p), uint(ch.session.MaxMessages())) + if err != nil { + return errors.Wrap(err, "Failed to get messages") + } + + // Create the backlog without any member information. + g, err := s.Guild(ch.guildID) + if err != nil { + return errors.Wrap(err, "Failed to get guild") + } + + for _, m := range m { + c.PrependMessage(NewBacklogMessage(m, ch.session, *g)) + } + + return nil +} + // MessageEditable returns true if the given message ID belongs to the current // user. func (ch *Channel) MessageEditable(id string) bool { diff --git a/channel_memberlist.go b/channel_memberlist.go index bbf3086..50312a6 100644 --- a/channel_memberlist.go +++ b/channel_memberlist.go @@ -135,7 +135,7 @@ func NewListMember(ch *Channel, it gateway.GuildMemberListOpItem) *ListMember { } } -func (l *ListMember) ID() string { +func (l *ListMember) ID() cchat.ID { return l.userID.String() } @@ -305,7 +305,7 @@ func NewListSection(listID string, ch *Channel, group gateway.GuildMemberListGro } } -func (s *ListSection) ID() string { +func (s *ListSection) ID() cchat.ID { return s.id // return fmt.Sprintf("%s-%s", s.listID, s.name) } diff --git a/go.mod b/go.mod index d300aa2..24490b5 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.14 require ( github.com/diamondburned/arikawa v1.2.0 - github.com/diamondburned/cchat v0.0.48 + github.com/diamondburned/cchat v0.0.49 github.com/diamondburned/ningen v0.1.1-0.20200818185419-0d3e89f25ee1 github.com/dustin/go-humanize v1.0.0 github.com/go-test/deep v1.0.6 diff --git a/go.sum b/go.sum index 0d6a8b3..fcefe00 100644 --- a/go.sum +++ b/go.sum @@ -67,6 +67,8 @@ github.com/diamondburned/cchat v0.0.47 h1:qU2TNeXlqru8za4qAgMPWTw6k8HGGOyic08GPP github.com/diamondburned/cchat v0.0.47/go.mod h1:+zXktogE45A0om4fT6B/z6Ii7FXNafjxsNspI0rlhbU= github.com/diamondburned/cchat v0.0.48 h1:MAzGzKY20JBh/LnirOZVPwbMq07xfqu4Lb4XsV9/sXQ= github.com/diamondburned/cchat v0.0.48/go.mod h1:+zXktogE45A0om4fT6B/z6Ii7FXNafjxsNspI0rlhbU= +github.com/diamondburned/cchat v0.0.49 h1:zP6QvjdRU3UqDZt3rEqjkR/5M68XRVms7htHfE9tLOc= +github.com/diamondburned/cchat v0.0.49/go.mod h1:+zXktogE45A0om4fT6B/z6Ii7FXNafjxsNspI0rlhbU= github.com/diamondburned/ningen v0.1.1-0.20200621014632-6babb812b249 h1:yP7kJ+xCGpDz6XbcfACJcju4SH1XDPwlrvbofz3lP8I= github.com/diamondburned/ningen v0.1.1-0.20200621014632-6babb812b249/go.mod h1:xW9hpBZsGi8KpAh10TyP+YQlYBo+Xc+2w4TR6N0951A= github.com/diamondburned/ningen v0.1.1-0.20200708085949-b64e350f3b8c h1:3h/kyk6HplYZF3zLi106itjYJWjbuMK/twijeGLEy2M= diff --git a/guild.go b/guild.go index 044a80a..7c7f8b5 100644 --- a/guild.go +++ b/guild.go @@ -44,7 +44,7 @@ func NewGuildFolder(s *Session, gf gateway.GuildFolder) *GuildFolder { } } -func (gf *GuildFolder) ID() string { +func (gf *GuildFolder) ID() cchat.ID { return strconv.FormatInt(int64(gf.GuildFolder.ID), 10) } @@ -115,7 +115,7 @@ func (g *Guild) selfState() (*discord.Guild, error) { return g.session.Store.Guild(g.id) } -func (g *Guild) ID() string { +func (g *Guild) ID() cchat.ID { return g.id.String() } diff --git a/message.go b/message.go index ecf7f74..1c3e27d 100644 --- a/message.go +++ b/message.go @@ -44,7 +44,7 @@ func NewHeaderDelete(d *gateway.MessageDeleteEvent) messageHeader { } } -func (m messageHeader) ID() string { +func (m messageHeader) ID() cchat.ID { return m.id.String() } @@ -125,7 +125,7 @@ func RenderMemberName(m discord.Member, g discord.Guild, s *Session) text.Rich { return name } -func (a Author) ID() string { +func (a Author) ID() cchat.ID { return a.id.String() } diff --git a/service.go b/service.go index 7f8a477..1b9e19d 100644 --- a/service.go +++ b/service.go @@ -117,7 +117,7 @@ func NewSession(s *state.State) (*Session, error) { }, nil } -func (s *Session) ID() string { +func (s *Session) ID() cchat.ID { return s.userID.String() }