mirror of
https://github.com/nikoksr/notify.git
synced 2025-01-07 23:01:59 +02:00
d2dfd10850
* 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
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,
|
|
}
|
|
}
|