cchat-discord/internal/discord/session/channel/messenger/backlogger/backlogger.go

43 lines
964 B
Go
Raw Normal View History

2021-03-15 04:30:05 +00:00
package backlogger
2020-10-07 01:53:15 +00:00
import (
"context"
2020-12-20 05:44:26 +00:00
"github.com/diamondburned/arikawa/v2/discord"
2020-10-07 01:53:15 +00:00
"github.com/diamondburned/cchat"
"github.com/diamondburned/cchat-discord/internal/discord/message"
2021-03-15 04:30:05 +00:00
"github.com/diamondburned/cchat-discord/internal/discord/session/channel/shared"
2020-10-07 01:53:15 +00:00
"github.com/pkg/errors"
)
type Backlogger struct {
shared.Channel
2020-10-07 01:53:15 +00:00
}
func New(ch shared.Channel) cchat.Backlogger {
2020-10-07 01:53:15 +00:00
return Backlogger{ch}
}
2020-10-09 17:33:16 +00:00
func (bl Backlogger) Backlog(ctx context.Context, b cchat.ID, c cchat.MessagesContainer) error {
2020-10-07 01:53:15 +00:00
p, err := discord.ParseSnowflake(b)
if err != nil {
return errors.Wrap(err, "Failed to parse snowflake")
}
s := bl.State.WithContext(ctx)
m, err := s.MessagesBefore(bl.ID, discord.MessageID(p), uint(bl.State.MaxMessages()))
if err != nil {
return errors.Wrap(err, "Failed to get messages")
}
for _, m := range m {
// Discord sucks.
m.GuildID = bl.GuildID
2021-01-06 04:53:49 +00:00
c.CreateMessage(message.NewBacklogMessage(m, bl.State))
2020-10-07 01:53:15 +00:00
}
return nil
}