1
0
mirror of https://github.com/nikoksr/notify.git synced 2025-01-07 23:01:59 +02:00
notify/service/matrix/matrix.go
Arno Cornette d2dfd10850
feat(service): add matrix service (#410)
* feat(service): implemented matrix service

* docs(readme): add matrix service

* chore(format) Reformatted with gofumpt

* docs(readme): updated readme and added doc

* chore(rename): Rename functions to be compliant with project style

* chore(formatting): Reformatted docs

* docs(changes): Modified the service and path to it in the documentation.

* chore(format): Reformated with Gofump
2022-10-04 18:01:09 +03:00

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,
}
}