summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWim <wim@42.be>2019-02-17 21:50:05 +0100
committerGitHub <noreply@github.com>2019-02-17 21:50:05 +0100
commita8fe54a78d869ce4185ff8f25e90fd87035002ec (patch)
tree2b81715b61c61ff3e7a3b6ff19d378741a28d0f0
parent0bcb0b882f8f49d9ae889165dc4478d1168e1f25 (diff)
downloadmatterbridge-msglm-a8fe54a78d869ce4185ff8f25e90fd87035002ec.tar.gz
matterbridge-msglm-a8fe54a78d869ce4185ff8f25e90fd87035002ec.tar.bz2
matterbridge-msglm-a8fe54a78d869ce4185ff8f25e90fd87035002ec.zip
Allow zulip bridge to specify topic per channel. Closes #701 (#723)
-rw-r--r--bridge/config/config.go1
-rw-r--r--bridge/zulip/zulip.go17
-rw-r--r--matterbridge.toml.sample9
3 files changed, 26 insertions, 1 deletions
diff --git a/bridge/config/config.go b/bridge/config/config.go
index 3d1206c7..98f3f2ac 100644
--- a/bridge/config/config.go
+++ b/bridge/config/config.go
@@ -146,6 +146,7 @@ type Protocol struct {
type ChannelOptions struct {
Key string // irc, xmpp
WebhookURL string // discord
+ Topic string // zulip
}
type Bridge struct {
diff --git a/bridge/zulip/zulip.go b/bridge/zulip/zulip.go
index 3c6c7ec6..89c3b059 100644
--- a/bridge/zulip/zulip.go
+++ b/bridge/zulip/zulip.go
@@ -4,6 +4,7 @@ import (
"encoding/json"
"io/ioutil"
"strconv"
+ "sync"
"time"
"github.com/42wim/matterbridge/bridge"
@@ -17,10 +18,12 @@ type Bzulip struct {
bot *gzb.Bot
streams map[int]string
*bridge.Config
+ channelToTopic map[string]string
+ sync.RWMutex
}
func New(cfg *bridge.Config) bridge.Bridger {
- return &Bzulip{Config: cfg, streams: make(map[int]string)}
+ return &Bzulip{Config: cfg, streams: make(map[int]string), channelToTopic: make(map[string]string)}
}
func (b *Bzulip) Connect() error {
@@ -45,6 +48,9 @@ func (b *Bzulip) Disconnect() error {
}
func (b *Bzulip) JoinChannel(channel config.ChannelInfo) error {
+ b.Lock()
+ defer b.Unlock()
+ b.channelToTopic[channel.Name] = channel.Options.Topic
return nil
}
@@ -145,6 +151,9 @@ func (b *Bzulip) sendMessage(msg config.Message) (string, error) {
if b.GetString("topic") != "" {
topic = b.GetString("topic")
}
+ if res := b.getTopic(msg.Channel); res != "" {
+ topic = res
+ }
m := gzb.Message{
Stream: msg.Channel,
Topic: topic,
@@ -191,3 +200,9 @@ func (b *Bzulip) handleUploadFile(msg *config.Message) (string, error) {
}
return "", nil
}
+
+func (b *Bzulip) getTopic(channel string) string {
+ b.RLock()
+ defer b.RUnlock()
+ return b.channelToTopic[channel]
+}
diff --git a/matterbridge.toml.sample b/matterbridge.toml.sample
index b3851a0e..d6c091da 100644
--- a/matterbridge.toml.sample
+++ b/matterbridge.toml.sample
@@ -1196,6 +1196,8 @@ Server="https://yourserver.zulipchat.com"
#Topic of the messages matterbridge will use
#OPTIONAL (default "matterbridge")
+#You can specify a specific topic for each channel using [gateway.inout.options]
+#See more information below at the gateway configuration
Topic="matterbridge"
## RELOADABLE SETTINGS
@@ -1438,6 +1440,13 @@ enable=true
[gateway.inout.options]
webhookurl="https://discordapp.com/api/webhooks/123456789123456789/C9WPqExYWONPDZabcdef-def1434FGFjstasJX9pYht73y"
+ [[gateway.inout]]
+ account="zulip.streamchat"
+ channel="general"
+ #OPTIONAL - topic only works for zulip
+ [gateway.inout.options]
+ topic="topic1"
+
#API example
#[[gateway.inout]]
#account="api.local"