61 lines
1.4 KiB
Go
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})
|
|
}
|