cchat-mock/internal/message/message.go

101 lines
2.0 KiB
Go

package message
import (
"strings"
"time"
"github.com/diamondburned/aqs/incr"
"github.com/diamondburned/cchat"
"github.com/diamondburned/cchat/text"
_ "github.com/diamondburned/aqs/data"
)
type Message struct {
Header
author Author
content string
nonce string
}
var (
_ cchat.MessageCreate = (*Message)(nil)
_ cchat.MessageUpdate = (*Message)(nil)
_ cchat.MessageDelete = (*Message)(nil)
_ cchat.Noncer = (*Message)(nil)
)
func NewEmpty(id uint32, author Author) Message {
return Message{
Header: Header{id: id},
author: author,
}
}
func NewRandomFromMessage(old Message) Message {
return NewRandom(old.id, old.author)
}
func NewRandom(id uint32, author Author) Message {
return Message{
Header: Header{id: id, time: time.Now()},
author: author,
content: incr.RandomQuote(author.char),
}
}
func Echo(sendable cchat.SendableMessage, id uint32, author Author) Message {
var echo = Message{
Header: Header{id: id, time: time.Now()},
author: author,
content: sendable.Content(),
}
if noncer := sendable.AsNoncer(); noncer != nil {
echo.nonce = noncer.Nonce()
}
return echo
}
func Random(id uint32) Message {
return RandomWithAuthor(id, RandomAuthor())
}
func RandomWithAuthor(id uint32, author Author) Message {
return Message{
Header: Header{id: id, time: time.Now()},
author: author,
content: incr.RandomQuote(author.char),
}
}
func (m Message) Author() cchat.Author {
return m.author
}
func (m Message) RealAuthor() Author {
return m.author
}
// AuthorName returns the message author's username in string.
func (m Message) AuthorName() string {
return m.author.name.Content
}
func (m Message) Content() text.Rich {
return text.Rich{Content: m.content}
}
func (m Message) Nonce() string {
return m.nonce
}
// Mentioned is true when the message content contains the author's name.
func (m Message) Mentioned() bool {
// hack
return strings.Contains(m.content, m.author.name.Content)
}
func (m *Message) SetContent(content string) {
m.content = content
}