cchat-discord/internal/discord/channel/message/send/sender.go

64 lines
1.6 KiB
Go
Raw Normal View History

2020-10-07 01:53:15 +00:00
package send
import (
2020-12-20 05:44:26 +00:00
"github.com/diamondburned/arikawa/v2/api"
"github.com/diamondburned/arikawa/v2/discord"
"github.com/diamondburned/arikawa/v2/utils/sendpart"
2020-10-07 01:53:15 +00:00
"github.com/diamondburned/cchat"
"github.com/diamondburned/cchat-discord/internal/discord/channel/message/send/complete"
"github.com/diamondburned/cchat-discord/internal/discord/channel/shared"
"github.com/diamondburned/cchat-discord/internal/discord/state"
2020-10-07 01:53:15 +00:00
)
2020-12-19 05:46:12 +00:00
func WrapMessage(s *state.Instance, msg cchat.SendableMessage) api.SendMessageData {
var send = api.SendMessageData{Content: msg.Content()}
if attacher := msg.AsAttachments(); attacher != nil {
send.Files = addAttachments(attacher.Attachments())
}
if noncer := msg.AsNoncer(); noncer != nil {
send.Nonce = s.Nonces.Generate(noncer.Nonce())
}
return send
}
2020-10-07 01:53:15 +00:00
type Sender struct {
shared.Channel
2020-10-07 01:53:15 +00:00
}
var _ cchat.Sender = (*Sender)(nil)
func New(ch shared.Channel) Sender {
2020-10-07 01:53:15 +00:00
return Sender{ch}
}
func (s Sender) Send(msg cchat.SendableMessage) error {
2020-12-19 05:46:12 +00:00
_, err := s.State.SendMessageComplex(s.ID, WrapMessage(s.State, msg))
2020-10-07 01:53:15 +00:00
return err
}
// CanAttach returns true if the channel can attach files.
func (s Sender) CanAttach() bool {
p, err := s.State.StateOnly().Permissions(s.ID, s.State.UserID)
if err != nil {
return false
}
return p.Has(discord.PermissionAttachFiles)
}
func (s Sender) AsCompleter() cchat.Completer {
return complete.New(s.Channel)
}
2020-12-20 05:44:26 +00:00
func addAttachments(atts []cchat.MessageAttachment) []sendpart.File {
var files = make([]sendpart.File, len(atts))
2020-10-07 01:53:15 +00:00
for i, a := range atts {
2020-12-20 05:44:26 +00:00
files[i] = sendpart.File{
2020-10-07 01:53:15 +00:00
Name: a.Name,
Reader: a,
}
}
return files
}