4
0
mirror of https://github.com/cwinfo/matterbridge.git synced 2025-06-26 18:59:24 +00:00

Compare commits

...

14 Commits

12 changed files with 80 additions and 17 deletions

View File

@ -43,6 +43,8 @@ script:
deploy:
provider: bintray
edge:
branch: v1.8.47
file: ci/deploy.json
user: 42wim
key:

View File

@ -65,7 +65,7 @@ See https://github.com/42wim/matterbridge/wiki
# Installing
## Binaries
* Latest stable release [v1.9.0](https://github.com/42wim/matterbridge/releases/latest)
* Latest stable release [v1.9.1](https://github.com/42wim/matterbridge/releases/latest)
* Development releases (follows master) can be downloaded [here](https://dl.bintray.com/42wim/nightly/)
## Building

View File

@ -92,6 +92,7 @@ type Protocol struct {
Password string // IRC,mattermost,XMPP,matrix
PrefixMessagesWithNick bool // mattemost, slack
Protocol string // all protocols
QuoteDisable bool // telegram
RejoinDelay int // IRC
ReplaceMessages [][]string // all protocols
ReplaceNicks [][]string // all protocols

View File

@ -80,6 +80,9 @@ func (b *Bdiscord) Connect() error {
}
}
}
for _, channel := range b.Channels {
b.Log.Debugf("found channel %#v", channel)
}
return nil
}
@ -127,6 +130,12 @@ func (b *Bdiscord) Send(msg config.Message) (string, error) {
return "", nil
}
b.Log.Debugf("Broadcasting using Webhook")
for _, f := range msg.Extra["file"] {
fi := f.(config.FileInfo)
if fi.URL != "" {
msg.Text += fi.URL + " "
}
}
err := b.c.WebhookExecute(
wID,
wToken,

View File

@ -7,6 +7,7 @@ import (
log "github.com/sirupsen/logrus"
"io"
"net/http"
"strings"
"time"
)
@ -88,3 +89,14 @@ func HandleDownloadData(flog *log.Entry, msg *config.Message, name, comment, url
}
msg.Extra["file"] = append(msg.Extra["file"], config.FileInfo{Name: name, Data: data, URL: url, Comment: comment, Avatar: avatar})
}
func RemoveEmptyNewLines(msg string) string {
lines := ""
for _, line := range strings.Split(msg, "\n") {
if line != "" {
lines += line + "\n"
}
}
lines = strings.TrimRight(lines, "\n")
return lines
}

View File

@ -366,7 +366,7 @@ func (b *Bmattermost) sendWebhook(msg config.Message) (string, error) {
// this sends a message only if we received a config.EVENT_FILE_FAILURE_SIZE
for _, rmsg := range helper.HandleExtra(&msg, b.General) {
matterMessage := matterhook.OMessage{IconURL: b.GetString("IconURL"), Channel: rmsg.Channel, UserName: rmsg.Username, Text: rmsg.Text, Props: make(map[string]interface{})}
matterMessage.Props["matterbridge"] = true
matterMessage.Props["matterbridge_"+b.mc.User.Id] = true
b.mh.Send(matterMessage)
}
@ -385,7 +385,7 @@ func (b *Bmattermost) sendWebhook(msg config.Message) (string, error) {
if msg.Avatar != "" {
matterMessage.IconURL = msg.Avatar
}
matterMessage.Props["matterbridge"] = true
matterMessage.Props["matterbridge_"+b.mc.User.Id] = true
err := b.mh.Send(matterMessage)
if err != nil {
b.Log.Info(err)
@ -415,7 +415,7 @@ func (b *Bmattermost) skipMessage(message *matterclient.Message) bool {
// Ignore messages sent from matterbridge
if message.Post.Props != nil {
if _, ok := message.Post.Props["matterbridge"].(bool); ok {
if _, ok := message.Post.Props["matterbridge_"+b.mc.User.Id].(bool); ok {
b.Log.Debugf("sent by matterbridge, ignoring")
return true
}

View File

@ -4,16 +4,17 @@ import (
"bytes"
"errors"
"fmt"
"github.com/42wim/matterbridge/bridge"
"github.com/42wim/matterbridge/bridge/config"
"github.com/42wim/matterbridge/bridge/helper"
"github.com/42wim/matterbridge/matterhook"
"github.com/nlopes/slack"
"html"
"regexp"
"strings"
"sync"
"time"
"github.com/42wim/matterbridge/bridge"
"github.com/42wim/matterbridge/bridge/config"
"github.com/42wim/matterbridge/bridge/helper"
"github.com/42wim/matterbridge/matterhook"
"github.com/nlopes/slack"
)
type Bslack struct {
@ -176,7 +177,7 @@ func (b *Bslack) Send(msg config.Message) (string, error) {
np.IconURL = msg.Avatar
}
// add a callback ID so we can see we created it
np.Attachments = append(np.Attachments, slack.Attachment{CallbackID: "matterbridge"})
np.Attachments = append(np.Attachments, slack.Attachment{CallbackID: "matterbridge_" + b.si.User.ID})
// add file attachments
np.Attachments = append(np.Attachments, b.createAttach(msg.Extra)...)
// add slack attachments (from another slack bridge)
@ -387,7 +388,11 @@ func (b *Bslack) replaceVariable(text string) string {
func (b *Bslack) replaceURL(text string) string {
results := regexp.MustCompile(`<(.*?)(\|.*?)?>`).FindAllStringSubmatch(text, -1)
for _, r := range results {
text = strings.Replace(text, r[0], r[1], -1)
if len(strings.TrimSpace(r[2])) == 1 { // A display text separator was found, but the text was blank
text = strings.Replace(text, r[0], "", -1)
} else {
text = strings.Replace(text, r[0], r[1], -1)
}
}
return text
}
@ -639,7 +644,7 @@ func (b *Bslack) skipMessageEvent(ev *slack.MessageEvent) bool {
// skip messages we made ourselves
if len(ev.Attachments) > 0 {
if ev.Attachments[0].CallbackID == "matterbridge" {
if ev.Attachments[0].CallbackID == "matterbridge_"+b.si.User.ID {
return true
}
}

View File

@ -1,7 +1,6 @@
package btelegram
import (
"html"
"regexp"
"strconv"
"strings"
@ -222,10 +221,13 @@ func (b *Btelegram) handleRecv(updates <-chan tgbotapi.Update) {
if usernameReply == "" {
usernameReply = "unknown"
}
rmsg.Text = rmsg.Text + " (re @" + usernameReply + ":" + message.ReplyToMessage.Text + ")"
if !b.GetBool("QuoteDisable") {
rmsg.Text = rmsg.Text + " (re @" + usernameReply + ":" + message.ReplyToMessage.Text + ")"
}
}
if rmsg.Text != "" || len(rmsg.Extra) > 0 {
rmsg.Text = helper.RemoveEmptyNewLines(rmsg.Text)
rmsg.Avatar = helper.GetAvatar(b.avatarMap, strconv.Itoa(message.From.ID), b.General)
b.Log.Debugf("<= Sending message from %s on %s to gateway", rmsg.Username, b.Account)
@ -385,7 +387,6 @@ func (b *Btelegram) sendMessage(chatid int64, username, text string) (string, er
m.Text = username + text
if b.GetString("MessageFormat") == "HTML" {
b.Log.Debug("Using mode HTML")
username = html.EscapeString(username)
m.Text = username + text
m.ParseMode = tgbotapi.ModeHTML
}

View File

@ -1,3 +1,15 @@
# v1.9.1
## New features
* telegram: Add QuoteDisable option (telegram). Closes #399. See QuoteDisable in matterbridge.toml.sample
## Enhancements
* discord: Send mediaserver link to Discord in Webhook mode (discord) (#405)
* mattermost: Print list of valid team names when team not found (#390)
* slack: Strip markdown URLs with blank text (slack) (#392)
## Bugfix
* slack/mattermost: Make our callbackid more unique. Fixes issue with running multiple matterbridge on the same channel (slack,mattermost)
* telegram: fix newlines in multiline messages #399
* telegram: Revert #378
# v1.9.0 (the refactor release)
## New features
* general: better debug messages

View File

@ -13,7 +13,7 @@ import (
)
var (
version = "1.9.0"
version = "1.9.1"
githash string
)

View File

@ -787,6 +787,10 @@ UseFirstName=false
#OPTIONAL (default false)
UseInsecureURL=false
#Disable quoted/reply messages
#OPTIONAL (default false)
QuoteDisable=false
#Disable sending of edits to other bridges
#OPTIONAL (default false)
EditDisable=false
@ -832,6 +836,11 @@ Label=""
#The string "{BRIDGE}" (case sensitive) will be replaced by the sending bridge
#The string "{LABEL}" (case sensitive) will be replaced by label= field of the sending bridge
#The string "{PROTOCOL}" (case sensitive) will be replaced by the protocol used by the bridge
#
#WARNING: if you have set MessageFormat="HTML" be sure that this format matches the guidelines
#on https://core.telegram.org/bots/api#html-style otherwise the message will not go through to
#telegram! eg <{NICK}> should be &lt;{NICK}&gt;
#
#OPTIONAL (default empty)
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "

View File

@ -190,7 +190,11 @@ func (m *MMClient) Login() error {
}
if m.Team == nil {
return errors.New("team not found")
validTeamNames := make([]string, len(m.OtherTeams))
for i, t := range m.OtherTeams {
validTeamNames[i] = t.Team.Name
}
return fmt.Errorf("Team '%s' not found in %v", m.Credentials.Team, validTeamNames)
}
m.wsConnect()
@ -768,6 +772,14 @@ func (m *MMClient) GetStatus(userId string) string {
return "offline"
}
func (m *MMClient) UpdateStatus(userId string, status string) error {
_, resp := m.Client.UpdateUserStatus(userId, &model.Status{Status: status})
if resp.Error != nil {
return resp.Error
}
return nil
}
func (m *MMClient) GetStatuses() map[string]string {
var ids []string
statuses := make(map[string]string)