cchat-mock/internal/channel/messagesender.go

46 lines
958 B
Go

package channel
import (
"time"
"github.com/diamondburned/cchat"
"github.com/diamondburned/cchat-mock/internal/internet"
"github.com/pkg/errors"
)
type MessageSender struct {
msgr *Messenger
ch chan cchat.SendableMessage
}
var _ cchat.Sender = (*MessageSender)(nil)
func NewMessageSender(msgr *Messenger) MessageSender {
return MessageSender{
msgr: msgr,
ch: make(chan cchat.SendableMessage),
}
}
// CanAttach returns false.
func (msgs MessageSender) CanAttach() bool { return false }
func (msgs MessageSender) Send(msg cchat.SendableMessage) error {
if err := internet.SimulateAustralian(); err != nil {
return errors.Wrap(err, "Failed to send message")
}
go func() {
// Make no guarantee that a message may arrive immediately when the
// function exits.
<-time.After(time.Second)
msgs.ch <- msg
}()
return nil
}
func (msgs MessageSender) AsCompleter() cchat.Completer {
return &MessageCompleter{msgr: msgs.msgr}
}