mirror of
https://github.com/nikoksr/notify.git
synced 2025-01-10 00:28:36 +02:00
66 lines
1.7 KiB
Go
66 lines
1.7 KiB
Go
|
package matrix
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"errors"
|
||
|
|
||
|
matrix "maunium.net/go/mautrix"
|
||
|
"maunium.net/go/mautrix/event"
|
||
|
"maunium.net/go/mautrix/id"
|
||
|
)
|
||
|
|
||
|
//go:generate mockery --name=matrixClient --output=. --case=underscore --inpackage
|
||
|
type matrixClient interface {
|
||
|
SendMessageEvent(roomID id.RoomID, eventType event.Type, contentJSON interface{}, extra ...matrix.ReqSendEvent) (resp *matrix.RespSendEvent, err error)
|
||
|
}
|
||
|
|
||
|
// Compile time check to ensure that matrix.Client implements the matrixClient interface
|
||
|
var _ matrixClient = new(matrix.Client)
|
||
|
|
||
|
// New returns a new instance of a Matrix notification service.
|
||
|
// For more information about the Matrix api specs:
|
||
|
//
|
||
|
// -> https://spec.matrix.org/v1.2/client-server-api
|
||
|
func New(userID id.UserID, roomID id.RoomID, homeServer, accessToken string) (*Matrix, error) {
|
||
|
client, err := matrix.NewClient(homeServer, userID, accessToken)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
s := &Matrix{
|
||
|
client: client,
|
||
|
options: ServiceOptions{
|
||
|
homeServer: homeServer,
|
||
|
accessToken: accessToken,
|
||
|
userID: userID,
|
||
|
roomID: roomID,
|
||
|
},
|
||
|
}
|
||
|
return s, nil
|
||
|
}
|
||
|
|
||
|
// Send takes a message body and sends them to the previously set channel.
|
||
|
// you will need an account, access token and roomID
|
||
|
// see https://matrix.org
|
||
|
func (s *Matrix) Send(ctx context.Context, _, message string) error {
|
||
|
messageBody := createMessage(message)
|
||
|
|
||
|
select {
|
||
|
case <-ctx.Done():
|
||
|
return ctx.Err()
|
||
|
default:
|
||
|
_, err := s.client.SendMessageEvent(s.options.roomID, event.EventMessage, &messageBody)
|
||
|
if err != nil {
|
||
|
return errors.New("failed to send message to the room using Matrix")
|
||
|
}
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func createMessage(message string) Message {
|
||
|
return Message{
|
||
|
Body: message,
|
||
|
Msgtype: event.MsgText,
|
||
|
}
|
||
|
}
|