Support code snippets from msteams

This commit is contained in:
Wim 2020-01-17 00:46:11 +01:00
parent 68f43985ad
commit 3f06a40bd5
2 changed files with 43 additions and 0 deletions

View File

@ -1,10 +1,14 @@
package bmsteams package bmsteams
import ( import (
"encoding/json"
"fmt" "fmt"
"io/ioutil"
"strings"
"github.com/42wim/matterbridge/bridge/config" "github.com/42wim/matterbridge/bridge/config"
"github.com/42wim/matterbridge/bridge/helper" "github.com/42wim/matterbridge/bridge/helper"
msgraph "github.com/yaegashi/msgraph.go/beta" msgraph "github.com/yaegashi/msgraph.go/beta"
) )
@ -50,6 +54,13 @@ func (b *Bmsteams) handleAttachments(rmsg *config.Message, msg msgraph.ChatMessa
for _, a := range msg.Attachments { for _, a := range msg.Attachments {
//remove the attachment tags from the text //remove the attachment tags from the text
rmsg.Text = attachRE.ReplaceAllString(rmsg.Text, "") rmsg.Text = attachRE.ReplaceAllString(rmsg.Text, "")
//handle a code snippet (code block)
if *a.ContentType == "application/vnd.microsoft.card.codesnippet" {
b.handleCodeSnippet(rmsg, a)
continue
}
//handle the download //handle the download
err := b.handleDownloadFile(rmsg, *a.Name, *a.ContentURL) err := b.handleDownloadFile(rmsg, *a.Name, *a.ContentURL)
if err != nil { if err != nil {
@ -57,3 +68,34 @@ func (b *Bmsteams) handleAttachments(rmsg *config.Message, msg msgraph.ChatMessa
} }
} }
} }
type AttachContent struct {
Language string `json:"language"`
CodeSnippetURL string `json:"codeSnippetUrl"`
}
func (b *Bmsteams) handleCodeSnippet(rmsg *config.Message, attach msgraph.ChatMessageAttachment) {
var content AttachContent
err := json.Unmarshal([]byte(*attach.Content), &content)
if err != nil {
b.Log.Errorf("unmarshal codesnippet failed: %s", err)
return
}
s := strings.Split(content.CodeSnippetURL, "/")
if len(s) != 13 {
b.Log.Errorf("codesnippetUrl has unexpected size: %s", content.CodeSnippetURL)
return
}
resp, err := b.gc.Teams().Request().Client().Get(content.CodeSnippetURL)
if err != nil {
b.Log.Errorf("retrieving snippet content failed:%s", err)
return
}
defer resp.Body.Close()
res, err := ioutil.ReadAll(resp.Body)
if err != nil {
b.Log.Errorf("reading snippet data failed: %s", err)
return
}
rmsg.Text = rmsg.Text + "\n```" + content.Language + "\n" + string(res) + "\n```\n"
}

View File

@ -120,6 +120,7 @@ func (b *Bmsteams) getMessages(channel string) ([]msgraph.ChatMessage, error) {
return rct, nil return rct, nil
} }
//nolint:gocognit
func (b *Bmsteams) poll(channelName string) { func (b *Bmsteams) poll(channelName string) {
msgmap := make(map[string]time.Time) msgmap := make(map[string]time.Time)
b.Log.Debug("getting initial messages") b.Log.Debug("getting initial messages")