status/core/matrix.go
2023-10-07 08:24:49 +00:00

61 lines
1.4 KiB
Go

package core
import (
"fmt"
"strings"
m "maunium.net/go/mautrix"
. "maunium.net/go/mautrix/id"
)
type MatrixConfig struct {
UserId string
// The AccessToken can be got by logging in with any Matrix client.
// In element.io, find it under Settings -> About & Help -> Advanced.
AccessToken string
RoomId string
}
type MatrixClient struct {
inner m.Client
config MatrixConfig
// Resolved/opaque Room Id
room_id RoomID
}
func NewMatrixClient(config MatrixConfig) (*MatrixClient, error) {
if config.AccessToken == "" {
return nil, fmt.Errorf("no access token")
}
user_id := UserID(config.UserId)
client, err := m.NewClient(user_id.Homeserver(), user_id, config.AccessToken)
if err != nil {
return nil, err
}
var opaque_room_id RoomID
if strings.HasPrefix(config.RoomId, "!") {
opaque_room_id = RoomID(config.RoomId)
} else {
resp, err := client.ResolveAlias(RoomAlias(config.RoomId))
if err != nil {
return nil, err
}
opaque_room_id = resp.RoomID
}
return &MatrixClient{
*client,
config,
opaque_room_id,
}, nil
}
func (client *MatrixClient) SendNotice(message string) (*m.RespSendEvent, error) {
return client.inner.SendNotice(client.room_id, message)
}
func (client *MatrixClient) RedactEvent(eventId EventID, reason string) (*m.RespSendEvent, error) {
return client.inner.RedactEvent(client.room_id, eventId, m.ReqRedact{Reason: reason})
}