From d79df1af463bb447de7b0cc0b16246f329cf8632 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Sat, 22 Dec 2018 21:23:19 +0200 Subject: [PATCH] Switch to mautrix-go and add go.mod --- appservice.go | 38 ++++++++++++------------- eventprocessor.go | 12 ++++---- go.mod | 11 ++++++++ go.sum | 17 ++++++++++++ http.go | 3 +- intent.go | 71 ++++++++++++++++++++++++----------------------- protocol.go | 7 +++-- registration.go | 1 - statestore.go | 55 ++++++++++++++++++------------------ 9 files changed, 123 insertions(+), 92 deletions(-) create mode 100644 go.mod create mode 100644 go.sum diff --git a/appservice.go b/appservice.go index e089b32..ee5443d 100644 --- a/appservice.go +++ b/appservice.go @@ -1,20 +1,20 @@ package appservice import ( + "errors" "fmt" "html/template" "io/ioutil" + "net/http" "os" "path/filepath" + "regexp" + "strings" "gopkg.in/yaml.v2" - "errors" - "maunium.net/go/gomatrix" - "maunium.net/go/maulogger" - "net/http" - "regexp" - "strings" + "maunium.net/go/maulogger/v2" + "maunium.net/go/mautrix" ) // EventChannelSize is the size for the Events channel in Appservice instances. @@ -24,7 +24,7 @@ var EventChannelSize = 64 func Create() *AppService { return &AppService{ LogConfig: CreateLogConfig(), - clients: make(map[string]*gomatrix.Client), + clients: make(map[string]*mautrix.Client), intents: make(map[string]*IntentAPI), StateStore: NewBasicStateStore(), } @@ -71,14 +71,14 @@ type AppService struct { Log maulogger.Logger `yaml:"-"` lastProcessedTransaction string - Events chan *gomatrix.Event `yaml:"-"` - QueryHandler QueryHandler `yaml:"-"` - StateStore StateStore `yaml:"-"` + Events chan *mautrix.Event `yaml:"-"` + QueryHandler QueryHandler `yaml:"-"` + StateStore StateStore `yaml:"-"` server *http.Server - botClient *gomatrix.Client + botClient *mautrix.Client botIntent *IntentAPI - clients map[string]*gomatrix.Client + clients map[string]*mautrix.Client intents map[string]*IntentAPI } @@ -147,11 +147,11 @@ func (as *AppService) BotIntent() *IntentAPI { return as.botIntent } -func (as *AppService) Client(userID string) *gomatrix.Client { +func (as *AppService) Client(userID string) *mautrix.Client { client, ok := as.clients[userID] if !ok { var err error - client, err = gomatrix.NewClient(as.HomeserverURL, userID, as.Registration.AppToken) + client, err = mautrix.NewClient(as.HomeserverURL, userID, as.Registration.AppToken) if err != nil { as.Log.Fatalln("Failed to create gomatrix instance:", err) return nil @@ -165,10 +165,10 @@ func (as *AppService) Client(userID string) *gomatrix.Client { return client } -func (as *AppService) BotClient() *gomatrix.Client { +func (as *AppService) BotClient() *mautrix.Client { if as.botClient == nil { var err error - as.botClient, err = gomatrix.NewClient(as.HomeserverURL, as.BotMXID(), as.Registration.AppToken) + as.botClient, err = mautrix.NewClient(as.HomeserverURL, as.BotMXID(), as.Registration.AppToken) if err != nil { as.Log.Fatalln("Failed to create gomatrix instance:", err) return nil @@ -182,7 +182,7 @@ func (as *AppService) BotClient() *gomatrix.Client { // Init initializes the logger and loads the registration of this appservice. func (as *AppService) Init() (bool, error) { - as.Events = make(chan *gomatrix.Event, EventChannelSize) + as.Events = make(chan *mautrix.Event, EventChannelSize) as.QueryHandler = &QueryHandlerStub{} as.Log = maulogger.Create() @@ -266,7 +266,7 @@ func CreateLogConfig() LogConfig { } type FileFormatData struct { - Date string + Date string Index int } @@ -279,7 +279,7 @@ func (lc LogConfig) GetFileFormat() maulogger.LoggerFileFormat { return func(now string, i int) string { var buf strings.Builder tpl.Execute(&buf, FileFormatData{ - Date: now, + Date: now, Index: i, }) return buf.String() diff --git a/eventprocessor.go b/eventprocessor.go index 16500f7..78d49d2 100644 --- a/eventprocessor.go +++ b/eventprocessor.go @@ -1,8 +1,8 @@ package appservice import ( - "maunium.net/go/gomatrix" - log "maunium.net/go/maulogger" + log "maunium.net/go/maulogger/v2" + "maunium.net/go/mautrix" ) type ExecMode uint8 @@ -19,7 +19,7 @@ type EventProcessor struct { as *AppService log log.Logger stop chan struct{} - handlers map[gomatrix.EventType][]gomatrix.OnEventListener + handlers map[mautrix.EventType][]mautrix.OnEventListener } func NewEventProcessor(as *AppService) *EventProcessor { @@ -28,14 +28,14 @@ func NewEventProcessor(as *AppService) *EventProcessor { as: as, log: as.Log.Sub("Events"), stop: make(chan struct{}, 1), - handlers: make(map[gomatrix.EventType][]gomatrix.OnEventListener), + handlers: make(map[mautrix.EventType][]mautrix.OnEventListener), } } -func (ep *EventProcessor) On(evtType gomatrix.EventType, handler gomatrix.OnEventListener) { +func (ep *EventProcessor) On(evtType mautrix.EventType, handler mautrix.OnEventListener) { handlers, ok := ep.handlers[evtType] if !ok { - handlers = []gomatrix.OnEventListener{handler} + handlers = []mautrix.OnEventListener{handler} } else { handlers = append(handlers, handler) } diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..55cae88 --- /dev/null +++ b/go.mod @@ -0,0 +1,11 @@ +module maunium.net/go/mautrix-appservice + +require ( + github.com/fatih/color v1.7.0 + github.com/gorilla/mux v1.6.2 + github.com/mattn/go-colorable v0.0.9 // indirect + github.com/mattn/go-isatty v0.0.4 // indirect + gopkg.in/yaml.v2 v2.2.2 + maunium.net/go/maulogger/v2 v2.0.0 + maunium.net/go/mautrix v0.1.0-alpha.1 +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..4eb000d --- /dev/null +++ b/go.sum @@ -0,0 +1,17 @@ +github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/gorilla/mux v1.6.2 h1:Pgr17XVTNXAk3q/r4CpKzC5xBM/qW1uVLV+IhRZpIIk= +github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/mattn/go-colorable v0.0.9 h1:UVL0vNpWh04HeJXV0KLcaT7r06gOH2l4OW6ddYRUIY4= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-isatty v0.0.4 h1:bnP0vzxcAdeI1zdubAl5PjU6zsERjGZb7raWodagDYs= +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3 h1:eH6Eip3UpmR+yM/qI9Ijluzb1bNv/cAU/n+6l8tRSis= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +maunium.net/go/maulogger/v2 v2.0.0 h1:8PB95zf6e7Ddw8iOWqjrJjAjPcAI50LagA1X0Ur64os= +maunium.net/go/maulogger/v2 v2.0.0/go.mod h1:Hbbkq3NV6jvJodByZu1mgEF3fpT7Kz9z0MjEZ3/BusI= +maunium.net/go/mautrix v0.1.0-alpha.1 h1:s0AOe3bAuElTQeR2A12ISDFj99iaWzUqMVHSNdkoG7I= +maunium.net/go/mautrix v0.1.0-alpha.1/go.mod h1:Rdy+cP8SrJAtJmwyFrX8Lq02Ceb3JHfPgmboanjngls= diff --git a/http.go b/http.go index 3a0757d..e63d12c 100644 --- a/http.go +++ b/http.go @@ -3,10 +3,11 @@ package appservice import ( "context" "encoding/json" - "github.com/gorilla/mux" "io/ioutil" "net/http" "time" + + "github.com/gorilla/mux" ) // Listen starts the HTTP server that listens for calls from the Matrix homeserver. diff --git a/intent.go b/intent.go index e940b3e..983bc78 100644 --- a/intent.go +++ b/intent.go @@ -2,12 +2,13 @@ package appservice import ( "fmt" - "maunium.net/go/gomatrix" + + "maunium.net/go/mautrix" ) type IntentAPI struct { - *gomatrix.Client - bot *gomatrix.Client + *mautrix.Client + bot *mautrix.Client as *AppService Localpart string UserID string @@ -29,7 +30,7 @@ func (as *AppService) NewIntentAPI(localpart string) *IntentAPI { } func (intent *IntentAPI) Register() error { - _, _, err := intent.Client.Register(&gomatrix.ReqRegister{ + _, _, err := intent.Client.Register(&mautrix.ReqRegister{ Username: intent.Localpart, }) if err != nil { @@ -44,7 +45,7 @@ func (intent *IntentAPI) EnsureRegistered() error { } err := intent.Register() - httpErr, ok := err.(gomatrix.HTTPError) + httpErr, ok := err.(mautrix.HTTPError) if !ok || httpErr.RespError.ErrCode != "M_USER_IN_USE" { return err } @@ -63,11 +64,11 @@ func (intent *IntentAPI) EnsureJoined(roomID string) error { resp, err := intent.JoinRoom(roomID, "", nil) if err != nil { - httpErr, ok := err.(gomatrix.HTTPError) + httpErr, ok := err.(mautrix.HTTPError) if !ok || httpErr.RespError.ErrCode != "M_FORBIDDEN" || intent.bot == nil { return httpErr } - _, inviteErr := intent.bot.InviteUser(roomID, &gomatrix.ReqInviteUser{ + _, inviteErr := intent.bot.InviteUser(roomID, &mautrix.ReqInviteUser{ UserID: intent.UserID, }) if inviteErr != nil { @@ -82,46 +83,46 @@ func (intent *IntentAPI) EnsureJoined(roomID string) error { return nil } -func (intent *IntentAPI) SendMessageEvent(roomID string, eventType gomatrix.EventType, contentJSON interface{}) (*gomatrix.RespSendEvent, error) { +func (intent *IntentAPI) SendMessageEvent(roomID string, eventType mautrix.EventType, contentJSON interface{}) (*mautrix.RespSendEvent, error) { if err := intent.EnsureJoined(roomID); err != nil { return nil, err } return intent.Client.SendMessageEvent(roomID, eventType, contentJSON) } -func (intent *IntentAPI) SendMassagedMessageEvent(roomID string, eventType gomatrix.EventType, contentJSON interface{}, ts int64) (*gomatrix.RespSendEvent, error) { +func (intent *IntentAPI) SendMassagedMessageEvent(roomID string, eventType mautrix.EventType, contentJSON interface{}, ts int64) (*mautrix.RespSendEvent, error) { if err := intent.EnsureJoined(roomID); err != nil { return nil, err } - return intent.Client.SendMassagedMessageEvent(roomID, eventType, contentJSON, ts) + return intent.Client.SendMessageEvent(roomID, eventType, contentJSON, mautrix.ReqSendEvent{Timestamp: ts}) } -func (intent *IntentAPI) SendStateEvent(roomID string, eventType gomatrix.EventType, stateKey string, contentJSON interface{}) (*gomatrix.RespSendEvent, error) { +func (intent *IntentAPI) SendStateEvent(roomID string, eventType mautrix.EventType, stateKey string, contentJSON interface{}) (*mautrix.RespSendEvent, error) { if err := intent.EnsureJoined(roomID); err != nil { return nil, err } return intent.Client.SendStateEvent(roomID, eventType, stateKey, contentJSON) } -func (intent *IntentAPI) SendMassagedStateEvent(roomID string, eventType gomatrix.EventType, stateKey string, contentJSON interface{}, ts int64) (*gomatrix.RespSendEvent, error) { +func (intent *IntentAPI) SendMassagedStateEvent(roomID string, eventType mautrix.EventType, stateKey string, contentJSON interface{}, ts int64) (*mautrix.RespSendEvent, error) { if err := intent.EnsureJoined(roomID); err != nil { return nil, err } return intent.Client.SendMassagedStateEvent(roomID, eventType, stateKey, contentJSON, ts) } -func (intent *IntentAPI) StateEvent(roomID string, eventType gomatrix.EventType, stateKey string, outContent interface{}) (err error) { +func (intent *IntentAPI) StateEvent(roomID string, eventType mautrix.EventType, stateKey string, outContent interface{}) (err error) { if err := intent.EnsureJoined(roomID); err != nil { return err } return intent.Client.StateEvent(roomID, eventType, stateKey, outContent) } -func (intent *IntentAPI) PowerLevels(roomID string) (pl *gomatrix.PowerLevels, err error) { +func (intent *IntentAPI) PowerLevels(roomID string) (pl *mautrix.PowerLevels, err error) { pl = intent.as.StateStore.GetPowerLevels(roomID) if pl == nil { - pl = &gomatrix.PowerLevels{} - err = intent.StateEvent(roomID, gomatrix.StatePowerLevels, "", pl) + pl = &mautrix.PowerLevels{} + err = intent.StateEvent(roomID, mautrix.StatePowerLevels, "", pl) if err == nil { intent.as.StateStore.SetPowerLevels(roomID, pl) } @@ -129,15 +130,15 @@ func (intent *IntentAPI) PowerLevels(roomID string) (pl *gomatrix.PowerLevels, e return } -func (intent *IntentAPI) SetPowerLevels(roomID string, levels *gomatrix.PowerLevels) (resp *gomatrix.RespSendEvent, err error) { - resp, err = intent.SendStateEvent(roomID, gomatrix.StatePowerLevels, "", &levels) +func (intent *IntentAPI) SetPowerLevels(roomID string, levels *mautrix.PowerLevels) (resp *mautrix.RespSendEvent, err error) { + resp, err = intent.SendStateEvent(roomID, mautrix.StatePowerLevels, "", &levels) if err == nil { intent.as.StateStore.SetPowerLevels(roomID, levels) } return } -func (intent *IntentAPI) SetPowerLevel(roomID, userID string, level int) (*gomatrix.RespSendEvent, error) { +func (intent *IntentAPI) SetPowerLevel(roomID, userID string, level int) (*mautrix.RespSendEvent, error) { pl, err := intent.PowerLevels(roomID) if err != nil { return nil, err @@ -145,12 +146,12 @@ func (intent *IntentAPI) SetPowerLevel(roomID, userID string, level int) (*gomat if pl.GetUserLevel(userID) != level { pl.SetUserLevel(userID, level) - return intent.SendStateEvent(roomID, gomatrix.StatePowerLevels, "", &pl) + return intent.SendStateEvent(roomID, mautrix.StatePowerLevels, "", &pl) } return nil, nil } -func (intent *IntentAPI) UserTyping(roomID string, typing bool, timeout int64) (resp *gomatrix.RespTyping, err error) { +func (intent *IntentAPI) UserTyping(roomID string, typing bool, timeout int64) (resp *mautrix.RespTyping, err error) { if intent.as.StateStore.IsTyping(roomID, intent.UserID) == typing { return } @@ -165,55 +166,55 @@ func (intent *IntentAPI) UserTyping(roomID string, typing bool, timeout int64) ( return } -func (intent *IntentAPI) SendText(roomID, text string) (*gomatrix.RespSendEvent, error) { +func (intent *IntentAPI) SendText(roomID, text string) (*mautrix.RespSendEvent, error) { if err := intent.EnsureJoined(roomID); err != nil { return nil, err } return intent.Client.SendText(roomID, text) } -func (intent *IntentAPI) SendImage(roomID, body, url string) (*gomatrix.RespSendEvent, error) { +func (intent *IntentAPI) SendImage(roomID, body, url string) (*mautrix.RespSendEvent, error) { if err := intent.EnsureJoined(roomID); err != nil { return nil, err } return intent.Client.SendImage(roomID, body, url) } -func (intent *IntentAPI) SendVideo(roomID, body, url string) (*gomatrix.RespSendEvent, error) { +func (intent *IntentAPI) SendVideo(roomID, body, url string) (*mautrix.RespSendEvent, error) { if err := intent.EnsureJoined(roomID); err != nil { return nil, err } return intent.Client.SendVideo(roomID, body, url) } -func (intent *IntentAPI) SendNotice(roomID, text string) (*gomatrix.RespSendEvent, error) { +func (intent *IntentAPI) SendNotice(roomID, text string) (*mautrix.RespSendEvent, error) { if err := intent.EnsureJoined(roomID); err != nil { return nil, err } return intent.Client.SendNotice(roomID, text) } -func (intent *IntentAPI) RedactEvent(roomID, eventID string, req *gomatrix.ReqRedact) (*gomatrix.RespSendEvent, error) { +func (intent *IntentAPI) RedactEvent(roomID, eventID string, req ...mautrix.ReqRedact) (*mautrix.RespSendEvent, error) { if err := intent.EnsureJoined(roomID); err != nil { return nil, err } - return intent.Client.RedactEvent(roomID, eventID, req) + return intent.Client.RedactEvent(roomID, eventID, req...) } -func (intent *IntentAPI) SetRoomName(roomID, roomName string) (*gomatrix.RespSendEvent, error) { - return intent.SendStateEvent(roomID, gomatrix.StateRoomName, "", map[string]interface{}{ +func (intent *IntentAPI) SetRoomName(roomID, roomName string) (*mautrix.RespSendEvent, error) { + return intent.SendStateEvent(roomID, mautrix.StateRoomName, "", map[string]interface{}{ "name": roomName, }) } -func (intent *IntentAPI) SetRoomAvatar(roomID, avatarURL string) (*gomatrix.RespSendEvent, error) { - return intent.SendStateEvent(roomID, gomatrix.StateRoomAvatar, "", map[string]interface{}{ +func (intent *IntentAPI) SetRoomAvatar(roomID, avatarURL string) (*mautrix.RespSendEvent, error) { + return intent.SendStateEvent(roomID, mautrix.StateRoomAvatar, "", map[string]interface{}{ "url": avatarURL, }) } -func (intent *IntentAPI) SetRoomTopic(roomID, topic string) (*gomatrix.RespSendEvent, error) { - return intent.SendStateEvent(roomID, gomatrix.StateTopic, "", map[string]interface{}{ +func (intent *IntentAPI) SetRoomTopic(roomID, topic string) (*mautrix.RespSendEvent, error) { + return intent.SendStateEvent(roomID, mautrix.StateTopic, "", map[string]interface{}{ "topic": topic, }) } @@ -234,10 +235,10 @@ func (intent *IntentAPI) SetAvatarURL(avatarURL string) error { func (intent *IntentAPI) EnsureInvited(roomID, userID string) error { if !intent.as.StateStore.IsInvited(roomID, userID) { - _, err := intent.Client.InviteUser(roomID, &gomatrix.ReqInviteUser{ + _, err := intent.Client.InviteUser(roomID, &mautrix.ReqInviteUser{ UserID: userID, }) return err } return nil -} \ No newline at end of file +} diff --git a/protocol.go b/protocol.go index 0523ba5..e29ac63 100644 --- a/protocol.go +++ b/protocol.go @@ -2,17 +2,18 @@ package appservice import ( "encoding/json" - "maunium.net/go/gomatrix" "net/http" + + "maunium.net/go/mautrix" ) // EventList contains a list of events. type EventList struct { - Events []*gomatrix.Event `json:"events"` + Events []*mautrix.Event `json:"events"` } // EventListener is a function that receives events. -type EventListener func(event *gomatrix.Event) +type EventListener func(event *mautrix.Event) // WriteBlankOK writes a blank OK message as a reply to a HTTP request. func WriteBlankOK(w http.ResponseWriter) { diff --git a/registration.go b/registration.go index b632db0..2f951f2 100644 --- a/registration.go +++ b/registration.go @@ -2,7 +2,6 @@ package appservice import ( "io/ioutil" - "regexp" "gopkg.in/yaml.v2" diff --git a/statestore.go b/statestore.go index 77b942d..c4f201f 100644 --- a/statestore.go +++ b/statestore.go @@ -1,9 +1,10 @@ package appservice import ( - "maunium.net/go/gomatrix" "sync" "time" + + "maunium.net/go/mautrix" ) type StateStore interface { @@ -15,14 +16,14 @@ type StateStore interface { IsInRoom(roomID, userID string) bool IsInvited(roomID, userID string) bool - IsMembership(roomID, userID string, allowedMemberships ...gomatrix.Membership) bool - SetMembership(roomID, userID string, membership gomatrix.Membership) + IsMembership(roomID, userID string, allowedMemberships ...mautrix.Membership) bool + SetMembership(roomID, userID string, membership mautrix.Membership) - SetPowerLevels(roomID string, levels *gomatrix.PowerLevels) - GetPowerLevels(roomID string) *gomatrix.PowerLevels + SetPowerLevels(roomID string, levels *mautrix.PowerLevels) + GetPowerLevels(roomID string) *mautrix.PowerLevels GetPowerLevel(roomID, userID string) int - GetPowerLevelRequirement(roomID string, eventType gomatrix.EventType) int - HasPowerLevel(roomID, userID string, eventType gomatrix.EventType) bool + GetPowerLevelRequirement(roomID string, eventType mautrix.EventType) int + HasPowerLevel(roomID, userID string, eventType mautrix.EventType) bool Lock() Unlock() @@ -30,12 +31,12 @@ type StateStore interface { RUnlock() } -func (as *AppService) UpdateState(evt *gomatrix.Event) { +func (as *AppService) UpdateState(evt *mautrix.Event) { switch evt.Type { - case gomatrix.StateMember: + case mautrix.StateMember: as.StateStore.SetMembership(evt.RoomID, evt.GetStateKey(), evt.Content.Membership) - case gomatrix.StatePowerLevels: - as.StateStore.SetPowerLevels(evt.RoomID, &evt.Content.PowerLevels) + case mautrix.StatePowerLevels: + as.StateStore.SetPowerLevels(evt.RoomID, evt.Content.GetPowerLevels()) } } @@ -45,9 +46,9 @@ type BasicStateStore struct { registrationsLock sync.RWMutex `json:"-"` Registrations map[string]bool `json:"registrations"` membershipsLock sync.RWMutex `json:"-"` - Memberships map[string]map[string]gomatrix.Membership `json:"memberships"` + Memberships map[string]map[string]mautrix.Membership `json:"memberships"` powerLevelsLock sync.RWMutex `json:"-"` - PowerLevels map[string]*gomatrix.PowerLevels `json:"power_levels"` + PowerLevels map[string]*mautrix.PowerLevels `json:"power_levels"` Typing map[string]map[string]int64 `json:"-"` typingLock sync.RWMutex `json:"-"` @@ -56,8 +57,8 @@ type BasicStateStore struct { func NewBasicStateStore() StateStore { return &BasicStateStore{ Registrations: make(map[string]bool), - Memberships: make(map[string]map[string]gomatrix.Membership), - PowerLevels: make(map[string]*gomatrix.PowerLevels), + Memberships: make(map[string]map[string]mautrix.Membership), + PowerLevels: make(map[string]*mautrix.PowerLevels), Typing: make(map[string]map[string]int64), } } @@ -136,12 +137,12 @@ func (store *BasicStateStore) SetTyping(roomID, userID string, timeout int64) { store.Typing[roomID] = roomTyping } -func (store *BasicStateStore) GetRoomMemberships(roomID string) map[string]gomatrix.Membership { +func (store *BasicStateStore) GetRoomMemberships(roomID string) map[string]mautrix.Membership { store.membershipsLock.RLock() memberships, ok := store.Memberships[roomID] store.membershipsLock.RUnlock() if !ok { - memberships = make(map[string]gomatrix.Membership) + memberships = make(map[string]mautrix.Membership) store.membershipsLock.Lock() store.Memberships[roomID] = memberships store.membershipsLock.Unlock() @@ -149,16 +150,16 @@ func (store *BasicStateStore) GetRoomMemberships(roomID string) map[string]gomat return memberships } -func (store *BasicStateStore) GetMembership(roomID, userID string) gomatrix.Membership { +func (store *BasicStateStore) GetMembership(roomID, userID string) mautrix.Membership { store.membershipsLock.RLock() defer store.membershipsLock.RUnlock() memberships, ok := store.Memberships[roomID] if !ok { - return gomatrix.MembershipLeave + return mautrix.MembershipLeave } membership, ok := memberships[userID] if !ok { - return gomatrix.MembershipLeave + return mautrix.MembershipLeave } return membership } @@ -171,7 +172,7 @@ func (store *BasicStateStore) IsInvited(roomID, userID string) bool { return store.IsMembership(roomID, userID, "join", "invite") } -func (store *BasicStateStore) IsMembership(roomID, userID string, allowedMemberships ...gomatrix.Membership) bool { +func (store *BasicStateStore) IsMembership(roomID, userID string, allowedMemberships ...mautrix.Membership) bool { membership := store.GetMembership(roomID, userID) for _, allowedMembership := range allowedMemberships { if allowedMembership == membership { @@ -181,11 +182,11 @@ func (store *BasicStateStore) IsMembership(roomID, userID string, allowedMembers return false } -func (store *BasicStateStore) SetMembership(roomID, userID string, membership gomatrix.Membership) { +func (store *BasicStateStore) SetMembership(roomID, userID string, membership mautrix.Membership) { store.membershipsLock.Lock() memberships, ok := store.Memberships[roomID] if !ok { - memberships = map[string]gomatrix.Membership{ + memberships = map[string]mautrix.Membership{ userID: membership, } } else { @@ -195,13 +196,13 @@ func (store *BasicStateStore) SetMembership(roomID, userID string, membership go store.membershipsLock.Unlock() } -func (store *BasicStateStore) SetPowerLevels(roomID string, levels *gomatrix.PowerLevels) { +func (store *BasicStateStore) SetPowerLevels(roomID string, levels *mautrix.PowerLevels) { store.powerLevelsLock.Lock() store.PowerLevels[roomID] = levels store.powerLevelsLock.Unlock() } -func (store *BasicStateStore) GetPowerLevels(roomID string) (levels *gomatrix.PowerLevels) { +func (store *BasicStateStore) GetPowerLevels(roomID string) (levels *mautrix.PowerLevels) { store.powerLevelsLock.RLock() levels, _ = store.PowerLevels[roomID] store.powerLevelsLock.RUnlock() @@ -212,10 +213,10 @@ func (store *BasicStateStore) GetPowerLevel(roomID, userID string) int { return store.GetPowerLevels(roomID).GetUserLevel(userID) } -func (store *BasicStateStore) GetPowerLevelRequirement(roomID string, eventType gomatrix.EventType) int { +func (store *BasicStateStore) GetPowerLevelRequirement(roomID string, eventType mautrix.EventType) int { return store.GetPowerLevels(roomID).GetEventLevel(eventType) } -func (store *BasicStateStore) HasPowerLevel(roomID, userID string, eventType gomatrix.EventType) bool { +func (store *BasicStateStore) HasPowerLevel(roomID, userID string, eventType mautrix.EventType) bool { return store.GetPowerLevel(roomID, userID) >= store.GetPowerLevelRequirement(roomID, eventType) }