mirror of
https://github.com/diamondburned/cchat-mock.git
synced 2024-10-18 21:44:27 +00:00
46 lines
958 B
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}
|
||
|
}
|