58 lines
1.4 KiB
Go
58 lines
1.4 KiB
Go
package send
|
|
|
|
import (
|
|
"github.com/diamondburned/arikawa/api"
|
|
"github.com/diamondburned/arikawa/discord"
|
|
"github.com/diamondburned/cchat"
|
|
"github.com/diamondburned/cchat-discord/internal/discord/channel/message/send/complete"
|
|
"github.com/diamondburned/cchat-discord/internal/discord/channel/shared"
|
|
)
|
|
|
|
type Sender struct {
|
|
*shared.Channel
|
|
}
|
|
|
|
var _ cchat.Sender = (*Sender)(nil)
|
|
|
|
func New(ch *shared.Channel) Sender {
|
|
return Sender{ch}
|
|
}
|
|
|
|
func (s Sender) Send(msg cchat.SendableMessage) error {
|
|
var send = api.SendMessageData{Content: msg.Content()}
|
|
if noncer := msg.AsNoncer(); noncer != nil {
|
|
send.Nonce = noncer.Nonce()
|
|
}
|
|
if attacher := msg.AsAttachments(); attacher != nil {
|
|
send.Files = addAttachments(attacher.Attachments())
|
|
}
|
|
|
|
_, err := s.State.SendMessageComplex(s.ID, send)
|
|
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)
|
|
}
|
|
|
|
func addAttachments(atts []cchat.MessageAttachment) []api.SendMessageFile {
|
|
var files = make([]api.SendMessageFile, len(atts))
|
|
for i, a := range atts {
|
|
files[i] = api.SendMessageFile{
|
|
Name: a.Name,
|
|
Reader: a,
|
|
}
|
|
}
|
|
return files
|
|
}
|