diff --git a/go.sum b/go.sum index 7a88e15..e8a547c 100644 --- a/go.sum +++ b/go.sum @@ -83,8 +83,6 @@ github.com/lithammer/fuzzysearch v1.1.0/go.mod h1:Bqx4wo8lTOFcJr3ckpY6HA9lEIOO0H github.com/lucasb-eyer/go-colorful v1.0.3/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/matrix-org/dugong v0.0.0-20180820122854-51a565b5666b h1:xpcmnpfUImRC4O2SAS/dmTcJENDXvGmLUzey76V1R3Q= github.com/matrix-org/dugong v0.0.0-20180820122854-51a565b5666b/go.mod h1:NgPCr+UavRGH6n5jmdX8DuqFZ4JiCWIJoZiuhTRLSUg= -github.com/matrix-org/gomatrix v0.0.0-20200128155335-9e7906b6766d h1:Vf/EQgAfg8/CBUQv9te7UJreZ9iKKouB2gb8UIRM4jQ= -github.com/matrix-org/gomatrix v0.0.0-20200128155335-9e7906b6766d/go.mod h1:3fxX6gUjWyI/2Bt7J1OLhpCzOfO/bB3AiX0cJtEKud0= github.com/matrix-org/util v0.0.0-20190711121626-527ce5ddefc7 h1:ntrLa/8xVzeSs8vHFHK25k0C+NV74sYMJnNSg5NoSRo= github.com/matrix-org/util v0.0.0-20190711121626-527ce5ddefc7/go.mod h1:vVQlW/emklohkZnOPwD3LrZUBqdfsbiyO3p1lNV8F6U= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= @@ -230,6 +228,7 @@ golang.org/x/sys v0.0.0-20200501145240-bc7a7d42d5c3 h1:5B6i6EAiSYyejWfvc5Rc9BbI3 golang.org/x/sys v0.0.0-20200501145240-bc7a7d42d5c3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= diff --git a/goneb.go b/goneb.go index c5eae2d..6732ec9 100644 --- a/goneb.go +++ b/goneb.go @@ -17,6 +17,7 @@ import ( "github.com/matrix-org/go-neb/database" _ "github.com/matrix-org/go-neb/metrics" "github.com/matrix-org/go-neb/polling" + //_ "github.com/matrix-org/go-neb/realms/github" _ "github.com/matrix-org/go-neb/realms/jira" //_ "github.com/matrix-org/go-neb/services/alertmanager" @@ -27,7 +28,7 @@ import ( //_ "github.com/matrix-org/go-neb/services/guggy" //_ "github.com/matrix-org/go-neb/services/imgur" //_ "github.com/matrix-org/go-neb/services/jira" - //_ "github.com/matrix-org/go-neb/services/rssbot" + _ "github.com/matrix-org/go-neb/services/rssbot" //_ "github.com/matrix-org/go-neb/services/slackapi" //_ "github.com/matrix-org/go-neb/services/travisci" //_ "github.com/matrix-org/go-neb/services/wikipedia" diff --git a/services/rssbot/rssbot.go b/services/rssbot/rssbot.go index ff759cd..251c282 100644 --- a/services/rssbot/rssbot.go +++ b/services/rssbot/rssbot.go @@ -16,10 +16,12 @@ import ( "github.com/matrix-org/go-neb/database" "github.com/matrix-org/go-neb/polling" "github.com/matrix-org/go-neb/types" - "github.com/matrix-org/gomatrix" "github.com/mmcdole/gofeed" "github.com/prometheus/client_golang/prometheus" log "github.com/sirupsen/logrus" + "maunium.net/go/mautrix" + mevt "maunium.net/go/mautrix/event" + "maunium.net/go/mautrix/id" ) // ServiceType of the RSS Bot service @@ -81,7 +83,7 @@ type Service struct { // Optional. The time to wait between polls. If this is less than minPollingIntervalSeconds, it is ignored. PollIntervalMins int `json:"poll_interval_mins"` // The list of rooms to send feed updates into. This cannot be empty. - Rooms []string `json:"rooms"` + Rooms []id.RoomID `json:"rooms"` // True if rss bot is unable to poll this feed. This is populated by Go-NEB. Use /getService to // retrieve this value. IsFailing bool `json:"is_failing"` @@ -100,7 +102,7 @@ type Service struct { } // Register will check the liveness of each RSS feed given. If all feeds check out okay, no error is returned. -func (s *Service) Register(oldService types.Service, client *gomatrix.Client) error { +func (s *Service) Register(oldService types.Service, client *mautrix.Client) error { if len(s.Feeds) == 0 { // this is an error UNLESS the old service had some feeds in which case they are deleting us :( var numOldFeeds int @@ -129,8 +131,8 @@ func (s *Service) Register(oldService types.Service, client *gomatrix.Client) er return nil } -func (s *Service) joinRooms(client *gomatrix.Client) { - roomSet := make(map[string]bool) +func (s *Service) joinRooms(client *mautrix.Client) { + roomSet := make(map[id.RoomID]bool) for _, feedInfo := range s.Feeds { for _, roomID := range feedInfo.Rooms { roomSet[roomID] = true @@ -138,7 +140,7 @@ func (s *Service) joinRooms(client *gomatrix.Client) { } for roomID := range roomSet { - if _, err := client.JoinRoom(roomID, "", nil); err != nil { + if _, err := client.JoinRoom(roomID.String(), "", nil); err != nil { log.WithFields(log.Fields{ log.ErrorKey: err, "room_id": roomID, @@ -173,7 +175,7 @@ func (s *Service) PostRegister(oldService types.Service) { // - Else if there is a Title field, use it as the GUID. // // Returns a timestamp representing when this Service should have OnPoll called again. -func (s *Service) OnPoll(cli *gomatrix.Client) time.Time { +func (s *Service) OnPoll(cli *mautrix.Client) time.Time { logger := log.WithFields(log.Fields{ "service_id": s.ServiceID(), "service_type": s.ServiceType(), @@ -406,7 +408,7 @@ func (s *Service) newItems(feedURL string, allItems []*gofeed.Item) (items []gof return } -func (s *Service) sendToRooms(cli *gomatrix.Client, feedURL string, feed *gofeed.Feed, item gofeed.Item) error { +func (s *Service) sendToRooms(cli *mautrix.Client, feedURL string, feed *gofeed.Feed, item gofeed.Item) error { logger := log.WithFields(log.Fields{ "feed_url": feedURL, "title": item.Title, @@ -414,14 +416,14 @@ func (s *Service) sendToRooms(cli *gomatrix.Client, feedURL string, feed *gofeed }) logger.Info("Sending new feed item") for _, roomID := range s.Feeds[feedURL].Rooms { - if _, err := cli.SendMessageEvent(roomID, "m.room.message", itemToHTML(feed, item)); err != nil { + if _, err := cli.SendMessageEvent(roomID, mevt.EventMessage, itemToHTML(feed, item)); err != nil { logger.WithError(err).WithField("room_id", roomID).Error("Failed to send to room") } } return nil } -func itemToHTML(feed *gofeed.Feed, item gofeed.Item) gomatrix.HTMLMessage { +func itemToHTML(feed *gofeed.Feed, item gofeed.Item) mevt.MessageEventContent { // If an item does not have a title, try using the feed's title instead // Create a new variable instead of mutating that which is passed in itemTitle := item.Title @@ -442,11 +444,11 @@ func itemToHTML(feed *gofeed.Feed, item gofeed.Item) gomatrix.HTMLMessage { html.EscapeString(item.Author.Email)) } } - return gomatrix.HTMLMessage{ + return mevt.MessageEventContent{ Body: fmt.Sprintf("%s: %s ( %s )", html.EscapeString(feed.Title), html.EscapeString(itemTitle), html.EscapeString(item.Link)), MsgType: "m.notice", - Format: "org.matrix.custom.html", + Format: mevt.FormatHTML, FormattedBody: fmtBody, // FeedTitle: //
@@ -532,7 +534,7 @@ func init() { cachingClient = &http.Client{ Transport: userAgentRoundTripper{httpcache.NewTransport(lruCache)}, } - types.RegisterService(func(serviceID, serviceUserID, webhookEndpointURL string) types.Service { + types.RegisterService(func(serviceID string, serviceUserID id.UserID, webhookEndpointURL string) types.Service { r := &Service{ DefaultService: types.NewDefaultService(serviceID, serviceUserID, ServiceType), } diff --git a/services/rssbot/rssbot_test.go b/services/rssbot/rssbot_test.go index b3253dd..3ba9917 100644 --- a/services/rssbot/rssbot_test.go +++ b/services/rssbot/rssbot_test.go @@ -14,7 +14,9 @@ import ( "github.com/matrix-org/go-neb/database" "github.com/matrix-org/go-neb/testutils" "github.com/matrix-org/go-neb/types" - "github.com/matrix-org/gomatrix" + "maunium.net/go/mautrix" + mevt "maunium.net/go/mautrix/event" + "maunium.net/go/mautrix/id" ) const rssFeedXML = ` @@ -65,7 +67,7 @@ func createRSSClient(t *testing.T, feedURL string) *Service { // Configure the service to force OnPoll to query the RSS feed and attempt to send results // to the right room. f := rssbot.Feeds[feedURL] - f.Rooms = []string{"!linksroom:hyrule"} + f.Rooms = []id.RoomID{"!linksroom:hyrule"} f.NextPollTimestampSecs = time.Now().Unix() rssbot.Feeds[feedURL] = f @@ -84,7 +86,7 @@ func TestHTMLEntities(t *testing.T) { matrixTrans.RT = func(req *http.Request) (*http.Response, error) { if strings.HasPrefix(req.URL.Path, "/_matrix/client/r0/rooms/!linksroom:hyrule/send/m.room.message") { // Check content body to make sure it is decoded - var msg gomatrix.HTMLMessage + var msg mevt.MessageEventContent if err := json.NewDecoder(req.Body).Decode(&msg); err != nil { t.Fatal("Failed to decode request JSON: ", err) return nil, errors.New("Error handling matrix client test request") @@ -104,7 +106,7 @@ func TestHTMLEntities(t *testing.T) { } return nil, errors.New("Unhandled matrix client test request") } - matrixClient, _ := gomatrix.NewClient("https://hyrule", "@happy_mask_salesman:hyrule", "its_a_secret") + matrixClient, _ := mautrix.NewClient("https://hyrule", "@happy_mask_salesman:hyrule", "its_a_secret") matrixClient.Client = &http.Client{Transport: matrixTrans} // Invoke OnPoll to trigger the RSS feed update