cchat-discord/internal/discord/channel/message/backlog/backlogger.go

53 lines
1.1 KiB
Go

package backlog
import (
"context"
"github.com/diamondburned/arikawa/discord"
"github.com/diamondburned/cchat"
"github.com/diamondburned/cchat-discord/internal/discord/channel/shared"
"github.com/diamondburned/cchat-discord/internal/discord/message"
"github.com/pkg/errors"
)
type Backlogger struct {
*shared.Channel
}
func New(ch *shared.Channel) cchat.Backlogger {
return Backlogger{ch}
}
func (bl Backlogger) MessagesBefore(
ctx context.Context,
b cchat.ID,
c cchat.MessagesContainer) error {
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")
}
// Create the backlog without any member information.
g, err := s.Guild(bl.GuildID)
if err != nil {
return errors.Wrap(err, "Failed to get guild")
}
for _, m := range m {
// Discord sucks.
m.GuildID = bl.GuildID
c.CreateMessage(message.NewBacklogMessage(m, bl.State, *g))
}
return nil
}