Thumbnail

rani/matterbridge.git

Clone URL: https://git.buni.party/rani/matterbridge.git

commit dabd77588acc2bca1b54e1c8a0160df81c0087bb Author: Wim <wim@42.be> Date: Wed Nov 22 00:28:40 2017 +0000 Add support for uploaded images/video/files (matrix) diff --git a/bridge/matrix/matrix.go b/bridge/matrix/matrix.go index 5572be5..489f42e 100644 --- a/bridge/matrix/matrix.go +++ b/bridge/matrix/matrix.go @@ -86 +87 @@ import (   "sync"     "github.com/42wim/matterbridge/bridge/config" + "github.com/42wim/matterbridge/bridge/helper"   log "github.com/Sirupsen/logrus"   matrix "github.com/matrix-org/gomatrix"  ) @@ -1447 +14513 @@ func (b *Bmatrix) getRoomID(channel string) string {  func (b *Bmatrix) handlematrix() error {   syncer := b.mc.Syncer.(*matrix.DefaultSyncer)   syncer.OnEventType("m.room.message", func(ev *matrix.Event) { - if (ev.Content["msgtype"].(string) == "m.text" || ev.Content["msgtype"].(string) == "m.notice" || ev.Content["msgtype"].(string) == "m.emote") && ev.Sender != b.UserID { + flog.Debugf("Received: %#v", ev) + if (ev.Content["msgtype"].(string) == "m.text" || + ev.Content["msgtype"].(string) == "m.notice" || + ev.Content["msgtype"].(string) == "m.emote" || + ev.Content["msgtype"].(string) == "m.file" || + ev.Content["msgtype"].(string) == "m.image" || + ev.Content["msgtype"].(string) == "m.video") && ev.Sender != b.UserID {   b.RLock()   channel, ok := b.RoomMap[ev.RoomID]   b.RUnlock() @@ -16110 +16831 @@ func (b *Bmatrix) handlematrix() error {   if ev.Content["msgtype"].(string) == "m.emote" {   rmsg.Event = config.EVENT_USER_ACTION   } + if ev.Content["msgtype"].(string) == "m.image" || + ev.Content["msgtype"].(string) == "m.video" || + ev.Content["msgtype"].(string) == "m.file" { + flog.Debugf("ev: %#v", ev) + rmsg.Extra = make(map[string][]interface{}) + url := ev.Content["url"].(string) + url = strings.Replace(url, "mxc://", b.Config.Server+"/_matrix/media/v1/download/", -1) + info := ev.Content["info"].(map[string]interface{}) + size := info["size"].(float64) + name := ev.Content["body"].(string) + flog.Debugf("trying to download %#v with size %#v", name, size) + if size <= 1000000 { + data, err := helper.DownloadFile(url) + if err != nil { + flog.Errorf("download %s failed %#v", url, err) + } else { + flog.Debugf("download OK %#v %#v %#v", name, len(*data), len(url)) + rmsg.Extra["file"] = append(rmsg.Extra["file"], config.FileInfo{Name: name, Data: data}) + } + } + rmsg.Text = "" + }   flog.Debugf("Sending message from %s on %s to gateway", ev.Sender, b.Account)   b.Remote <- rmsg   } - flog.Debugf("Received: %#v", ev)   })   go func() {   for { diff --git a/gateway/gateway.go b/gateway/gateway.go index be03a99..e5d74ff 100644 --- a/gateway/gateway.go +++ b/gateway/gateway.go @@ -1557 +1558 @@ func (gw *Gateway) handleMessage(msg config.Message, dest *bridge.Bridge) []*BrM   if dest.Protocol != "discord" &&   dest.Protocol != "slack" &&   dest.Protocol != "mattermost" && - dest.Protocol != "telegram" { + dest.Protocol != "telegram" && + dest.Protocol != "matrix" {   if msg.Text == "" {   return brMsgIDs   }