76 lines
1.3 KiB
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
|
|
}
|