truckstop/message/matrix.go

76 lines
1.3 KiB
Go

package message
import (
"local/truckstop/config"
"log"
"github.com/matrix-org/gomatrix"
)
type Matrix struct {
mock bool
homeserver string
username string
token string
room string
client string
}
func NewMatrix() Matrix {
conf := config.Get().Message.Matrix
return Matrix{
homeserver: conf.Homeserver,
username: conf.Username,
token: conf.Token,
room: conf.Room,
mock: conf.Mock,
client: conf.Client,
}
}
func (m Matrix) getclient() (*gomatrix.Client, error) {
return gomatrix.NewClient(m.homeserver, m.username, m.token)
}
func (m Matrix) Receive() ([]string, error) {
if m.mock {
log.Printf("matrix.Receive()")
return []string{"FL, GA, NC"}, nil
}
c, err := m.getclient()
if err != nil {
return nil, err
}
messages := make([]string, 0)
result, err := c.Messages(m.room, "", "", 'b', 50)
for _, event := range result.Chunk {
if event.Sender != m.client {
continue
}
switch event.Type {
case "m.room.message":
b, ok := event.Body()
if ok {
messages = append(messages, b)
}
}
}
if err != nil {
return nil, err
}
return messages, nil
}
func (m Matrix) Send(text string) error {
if m.mock {
log.Printf("matrix.Send(%s)", text)
return nil
}
c, err := m.getclient()
if err != nil {
return err
}
_, err = c.SendText(m.room, text)
return err
}