forked from lug/matterbridge
		
	Compare commits
	
		
			11 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					f065e9e4d5 | ||
| 
						 | 
					3812693111 | ||
| 
						 | 
					dd3c572256 | ||
| 
						 | 
					c5dfe40326 | ||
| 
						 | 
					ef278301e3 | ||
| 
						 | 
					2888fd64b0 | ||
| 
						 | 
					27c0f37e49 | ||
| 
						 | 
					0774f6a5e7 | ||
| 
						 | 
					4036d4459b | ||
| 
						 | 
					ee643de5b6 | ||
| 
						 | 
					8c7549a09e | 
@@ -42,7 +42,7 @@ Accounts to one of the supported bridges
 | 
			
		||||
# Installing
 | 
			
		||||
## Binaries
 | 
			
		||||
Binaries can be found [here] (https://github.com/42wim/matterbridge/releases/)
 | 
			
		||||
* Latest stable release [v0.12.0](https://github.com/42wim/matterbridge/releases/latest)
 | 
			
		||||
* Latest stable release [v0.12.1](https://github.com/42wim/matterbridge/releases/latest)
 | 
			
		||||
 | 
			
		||||
## Building
 | 
			
		||||
Go 1.6+ is required. Make sure you have [Go](https://golang.org/doc/install) properly installed, including setting up your [GOPATH] (https://golang.org/doc/code.html#GOPATH)
 | 
			
		||||
 
 | 
			
		||||
@@ -100,7 +100,7 @@ func (b *Bridge) joinChannels(channels map[string]config.ChannelInfo, exists map
 | 
			
		||||
				log.Debugf("using key %s for channel %s", channel.Options.Key, channel.Name)
 | 
			
		||||
				mychannel = mychannel + " " + channel.Options.Key
 | 
			
		||||
			}
 | 
			
		||||
			err := b.JoinChannel(channel.Name)
 | 
			
		||||
			err := b.JoinChannel(mychannel)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return err
 | 
			
		||||
			}
 | 
			
		||||
 
 | 
			
		||||
@@ -52,6 +52,7 @@ type Protocol struct {
 | 
			
		||||
	NickServNick           string // IRC
 | 
			
		||||
	NickServPassword       string // IRC
 | 
			
		||||
	NicksPerRow            int    // mattermost, slack
 | 
			
		||||
	NoHomeServerSuffix     bool   // matrix
 | 
			
		||||
	NoTLS                  bool   // mattermost
 | 
			
		||||
	Password               string // IRC,mattermost,XMPP,matrix
 | 
			
		||||
	PrefixMessagesWithNick bool   // mattemost, slack
 | 
			
		||||
@@ -69,6 +70,7 @@ type Protocol struct {
 | 
			
		||||
	UseAPI                 bool   // mattermost, slack
 | 
			
		||||
	UseSASL                bool   // IRC
 | 
			
		||||
	UseTLS                 bool   // IRC
 | 
			
		||||
	UseFirstName           bool   // telegram
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type ChannelOptions struct {
 | 
			
		||||
 
 | 
			
		||||
@@ -140,6 +140,7 @@ func (b *bdiscord) messageCreate(s *discordgo.Session, m *discordgo.MessageCreat
 | 
			
		||||
		m.Message.Content = b.replaceRoleMentions(m.Message.Content)
 | 
			
		||||
	}
 | 
			
		||||
	m.Message.Content = b.stripCustomoji(m.Message.Content)
 | 
			
		||||
	m.Message.Content = b.replaceChannelMentions(m.Message.Content)
 | 
			
		||||
	b.Remote <- config.Message{Username: username, Text: m.ContentWithMentionsReplaced(), Channel: channelName,
 | 
			
		||||
		Account: b.Account, Avatar: "https://cdn.discordapp.com/avatars/" + m.Author.ID + "/" + m.Author.Avatar + ".jpg"}
 | 
			
		||||
}
 | 
			
		||||
@@ -158,12 +159,14 @@ func (b *bdiscord) getNick(user *discordgo.User) string {
 | 
			
		||||
	b.Lock()
 | 
			
		||||
	defer b.Unlock()
 | 
			
		||||
	if _, ok := b.userMemberMap[user.ID]; ok {
 | 
			
		||||
		if b.userMemberMap[user.ID].Nick != "" {
 | 
			
		||||
			// only return if nick is set
 | 
			
		||||
			return b.userMemberMap[user.ID].Nick
 | 
			
		||||
		if b.userMemberMap[user.ID] != nil {
 | 
			
		||||
			if b.userMemberMap[user.ID].Nick != "" {
 | 
			
		||||
				// only return if nick is set
 | 
			
		||||
				return b.userMemberMap[user.ID].Nick
 | 
			
		||||
			}
 | 
			
		||||
			// otherwise return username
 | 
			
		||||
			return user.Username
 | 
			
		||||
		}
 | 
			
		||||
		// otherwise return username
 | 
			
		||||
		return user.Username
 | 
			
		||||
	}
 | 
			
		||||
	// if we didn't find nick, search for it
 | 
			
		||||
	b.userMemberMap[user.ID], err = b.c.GuildMember(b.guildID, user.ID)
 | 
			
		||||
@@ -211,6 +214,25 @@ func (b *bdiscord) replaceRoleMentions(text string) string {
 | 
			
		||||
	return text
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (b *bdiscord) replaceChannelMentions(text string) string {
 | 
			
		||||
	var err error
 | 
			
		||||
	re := regexp.MustCompile("<#[0-9]+>")
 | 
			
		||||
	text = re.ReplaceAllStringFunc(text, func(m string) string {
 | 
			
		||||
		channel := b.getChannelName(m[2 : len(m)-1])
 | 
			
		||||
		// if at first don't succeed, try again
 | 
			
		||||
		if channel == "" {
 | 
			
		||||
			b.Channels, err = b.c.GuildChannels(b.guildID)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return "#unknownchannel"
 | 
			
		||||
			}
 | 
			
		||||
			channel = b.getChannelName(m[2 : len(m)-1])
 | 
			
		||||
			return channel
 | 
			
		||||
		}
 | 
			
		||||
		return channel
 | 
			
		||||
	})
 | 
			
		||||
	return text
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (b *bdiscord) stripCustomoji(text string) string {
 | 
			
		||||
	// <:doge:302803592035958784>
 | 
			
		||||
	re := regexp.MustCompile("<(:.*?:)[0-9]+>")
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,12 @@
 | 
			
		||||
package bmatrix
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"regexp"
 | 
			
		||||
	"sync"
 | 
			
		||||
 | 
			
		||||
	"github.com/42wim/matterbridge/bridge/config"
 | 
			
		||||
	log "github.com/Sirupsen/logrus"
 | 
			
		||||
	matrix "github.com/matrix-org/gomatrix"
 | 
			
		||||
	"sync"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type Bmatrix struct {
 | 
			
		||||
@@ -101,8 +103,13 @@ func (b *Bmatrix) handlematrix() error {
 | 
			
		||||
				flog.Debugf("Unknown room %s", ev.RoomID)
 | 
			
		||||
				return
 | 
			
		||||
			}
 | 
			
		||||
			username := ev.Sender[1:]
 | 
			
		||||
			if b.Config.NoHomeServerSuffix {
 | 
			
		||||
				re := regexp.MustCompile("(.*?):.*")
 | 
			
		||||
				username = re.ReplaceAllString(username, `$1`)
 | 
			
		||||
			}
 | 
			
		||||
			flog.Debugf("Sending message from %s on %s to gateway", ev.Sender, b.Account)
 | 
			
		||||
			b.Remote <- config.Message{Username: ev.Sender, Text: ev.Content["body"].(string), Channel: channel, Account: b.Account}
 | 
			
		||||
			b.Remote <- config.Message{Username: username, Text: ev.Content["body"].(string), Channel: channel, Account: b.Account}
 | 
			
		||||
		}
 | 
			
		||||
		flog.Debugf("Received: %#v", ev)
 | 
			
		||||
	})
 | 
			
		||||
 
 | 
			
		||||
@@ -98,9 +98,14 @@ func (b *Btelegram) handleRecv(updates <-chan tgbotapi.Update) {
 | 
			
		||||
			message.Text = message.Text + b.Config.EditSuffix
 | 
			
		||||
		}
 | 
			
		||||
		if message.From != nil {
 | 
			
		||||
			username = message.From.FirstName
 | 
			
		||||
			if b.Config.UseFirstName {
 | 
			
		||||
				username = message.From.FirstName
 | 
			
		||||
			}
 | 
			
		||||
			if username == "" {
 | 
			
		||||
				username = message.From.UserName
 | 
			
		||||
				if username == "" {
 | 
			
		||||
					username = message.From.FirstName
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			text = message.Text
 | 
			
		||||
			channel = strconv.FormatInt(message.Chat.ID, 10)
 | 
			
		||||
 
 | 
			
		||||
@@ -119,7 +119,7 @@ func (b *Bxmpp) handleXmpp() error {
 | 
			
		||||
			var channel, nick string
 | 
			
		||||
			if v.Type == "groupchat" {
 | 
			
		||||
				s := strings.Split(v.Remote, "@")
 | 
			
		||||
				if len(s) == 2 {
 | 
			
		||||
				if len(s) >= 2 {
 | 
			
		||||
					channel = s[0]
 | 
			
		||||
				}
 | 
			
		||||
				s = strings.Split(s[1], "/")
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										21
									
								
								changelog.md
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								changelog.md
									
									
									
									
									
								
							@@ -1,3 +1,14 @@
 | 
			
		||||
# v0.12.1
 | 
			
		||||
## New features
 | 
			
		||||
* telegram: Add UseFirstName option (telegram). Closes #144
 | 
			
		||||
* matrix: Add NoHomeServerSuffix. Option to disable homeserver on username (matrix). Closes #160.
 | 
			
		||||
 | 
			
		||||
## Bugfix
 | 
			
		||||
* xmpp: Add Compatibility for Cisco Jabber (xmpp) (#166)
 | 
			
		||||
* irc: Fix JoinChannel argument to use IRC channel key (#172)
 | 
			
		||||
* discord: Fix possible crash on nil (discord)
 | 
			
		||||
* discord: Replace long ids in channel metions (discord). Fixes #174
 | 
			
		||||
 | 
			
		||||
# v0.12.0
 | 
			
		||||
## Changes
 | 
			
		||||
* general: edited messages are now being sent by default on discord/mattermost/telegram/slack. See "New Features"
 | 
			
		||||
@@ -6,10 +17,15 @@
 | 
			
		||||
* general: add support for edited messages. 
 | 
			
		||||
  Add new keyword EditDisable (false/true), default false. Which means by default edited messages will be sent to other bridges.
 | 
			
		||||
  Add new keyword EditSuffix , default "". You can change this eg to "(edited)", this will be appended to every edit message.
 | 
			
		||||
 | 
			
		||||
## Enhancements
 | 
			
		||||
* mattermost: support mattermost v3.9.x
 | 
			
		||||
* general: Add support for HTTP{S}_PROXY env variables (#162)
 | 
			
		||||
* discord: Strip custom emoji metadata (discord). Closes #148
 | 
			
		||||
 | 
			
		||||
## Bugfix
 | 
			
		||||
* slack: Ignore error on private channel join (slack) Fixes #150 
 | 
			
		||||
* mattermost: fix crash on reconnects when server is down. Closes #163
 | 
			
		||||
* irc: Relay messages starting with ! (irc). Closes #164
 | 
			
		||||
 | 
			
		||||
# v0.11.0
 | 
			
		||||
## New features
 | 
			
		||||
* general: reusing the same account on multiple gateways now also reuses the connection.
 | 
			
		||||
@@ -18,6 +34,7 @@
 | 
			
		||||
* telegram:  Support edited messages (telegram). See #141
 | 
			
		||||
* mattermost: Add support for showing/hiding join/leave messages from mattermost. Closes #147
 | 
			
		||||
* mattermost: Reconnect on session removal/timeout (mattermost)
 | 
			
		||||
* mattermost: Support mattermost v3.8.x
 | 
			
		||||
* irc:  Rejoin channel when kicked (irc).
 | 
			
		||||
 | 
			
		||||
## Bugfix
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@ import (
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	version = "0.12.0"
 | 
			
		||||
	version = "0.12.1"
 | 
			
		||||
	githash string
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -451,6 +451,12 @@ Token="Yourtokenhere"
 | 
			
		||||
#See https://core.telegram.org/bots/api#html-style
 | 
			
		||||
MessageFormat=""
 | 
			
		||||
 | 
			
		||||
#If enabled use the "First Name" as username. If this is empty use the Username
 | 
			
		||||
#If disabled use the "Username" as username. If this is empty use the First Name 
 | 
			
		||||
#If all names are empty, username will be "unknown"
 | 
			
		||||
#OPTIONAL (default false)
 | 
			
		||||
UseFirstName=false
 | 
			
		||||
 | 
			
		||||
#Disable sending of edits to other bridges
 | 
			
		||||
#OPTIONAL (default false)
 | 
			
		||||
EditDisable=false
 | 
			
		||||
@@ -554,6 +560,11 @@ Server="https://matrix.org"
 | 
			
		||||
Login="yourlogin"
 | 
			
		||||
Password="yourpass"
 | 
			
		||||
 | 
			
		||||
#Whether to send the homeserver suffix. eg ":matrix.org" in @username:matrix.org
 | 
			
		||||
#to other bridges, or only send "username".(true only sends username)
 | 
			
		||||
#OPTIONAL (default false)
 | 
			
		||||
NoHomeServerSuffix=false
 | 
			
		||||
 | 
			
		||||
#Whether to prefix messages from other bridges to matrix with the sender's nick. 
 | 
			
		||||
#Useful if username overrides for incoming webhooks isn't enabled on the 
 | 
			
		||||
#matrix server. If you set PrefixMessagesWithNick to true, each message 
 | 
			
		||||
@@ -657,7 +668,8 @@ enable=true
 | 
			
		||||
    #             see (https://www.linkedin.com/pulse/telegram-bots-beginners-marco-frau)
 | 
			
		||||
    #hipchat    - id_channel (see https://www.hipchat.com/account/xmpp for the correct channel)
 | 
			
		||||
    #rocketchat - #channel (# is required)
 | 
			
		||||
    #matrix     - #channel:server (eg #yourchannel:matrix.org)
 | 
			
		||||
    #matrix     - #channel:server (eg #yourchannel:matrix.org) 
 | 
			
		||||
    #           - encrypted rooms are not supported in matrix
 | 
			
		||||
    #REQUIRED
 | 
			
		||||
    channel="#testing"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user