Need to specify /topic:mytopic for channel configuration (zulip). (#751)

Breaking change for zulip channel configuration.

For zulip the channel configuration will now need to specify also
the topic with /topic:yourtopic.

Example:
[[gateway.inout]]
account="zulip.streamchat"
channel="general/topic:mytopic"

This fixes the incorrect PR #701 which didn't work with multiple
gateways.
This commit is contained in:
Wim 2019-03-02 20:31:38 +01:00 committed by GitHub
parent df3fdc26a0
commit c557d51b6f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 21 additions and 29 deletions

View File

@ -4,6 +4,7 @@ import (
"encoding/json" "encoding/json"
"io/ioutil" "io/ioutil"
"strconv" "strconv"
"strings"
"sync" "sync"
"time" "time"
@ -18,12 +19,11 @@ type Bzulip struct {
bot *gzb.Bot bot *gzb.Bot
streams map[int]string streams map[int]string
*bridge.Config *bridge.Config
channelToTopic map[string]string
sync.RWMutex sync.RWMutex
} }
func New(cfg *bridge.Config) bridge.Bridger { func New(cfg *bridge.Config) bridge.Bridger {
return &Bzulip{Config: cfg, streams: make(map[int]string), channelToTopic: make(map[string]string)} return &Bzulip{Config: cfg, streams: make(map[int]string)}
} }
func (b *Bzulip) Connect() error { func (b *Bzulip) Connect() error {
@ -48,9 +48,6 @@ func (b *Bzulip) Disconnect() error {
} }
func (b *Bzulip) JoinChannel(channel config.ChannelInfo) error { func (b *Bzulip) JoinChannel(channel config.ChannelInfo) error {
b.Lock()
defer b.Unlock()
b.channelToTopic[channel.Name] = channel.Options.Topic
return nil return nil
} }
@ -138,7 +135,14 @@ func (b *Bzulip) handleQueue() error {
if m.SenderEmail == b.GetString("login") { if m.SenderEmail == b.GetString("login") {
continue continue
} }
rmsg := config.Message{Username: m.SenderFullName, Text: m.Content, Channel: b.getChannel(m.StreamID), Account: b.Account, UserID: strconv.Itoa(m.SenderID), Avatar: m.AvatarURL} rmsg := config.Message{
Username: m.SenderFullName,
Text: m.Content,
Channel: b.getChannel(m.StreamID) + "/topic:" + m.Subject,
Account: b.Account,
UserID: strconv.Itoa(m.SenderID),
Avatar: m.AvatarURL,
}
b.Log.Debugf("<= Sending message from %s on %s to gateway", rmsg.Username, b.Account) b.Log.Debugf("<= Sending message from %s on %s to gateway", rmsg.Username, b.Account)
b.Log.Debugf("<= Message is %#v", rmsg) b.Log.Debugf("<= Message is %#v", rmsg)
b.Remote <- rmsg b.Remote <- rmsg
@ -149,12 +153,11 @@ func (b *Bzulip) handleQueue() error {
} }
func (b *Bzulip) sendMessage(msg config.Message) (string, error) { func (b *Bzulip) sendMessage(msg config.Message) (string, error) {
topic := "matterbridge" topic := ""
if b.GetString("topic") != "" { if strings.Contains(msg.Channel, "/topic:") {
topic = b.GetString("topic") res := strings.Split(msg.Channel, "/topic:")
} topic = res[1]
if res := b.getTopic(msg.Channel); res != "" { msg.Channel = res[0]
topic = res
} }
m := gzb.Message{ m := gzb.Message{
Stream: msg.Channel, Stream: msg.Channel,
@ -202,9 +205,3 @@ func (b *Bzulip) handleUploadFile(msg *config.Message) (string, error) {
} }
return "", nil return "", nil
} }
func (b *Bzulip) getTopic(channel string) string {
b.RLock()
defer b.RUnlock()
return b.channelToTopic[channel]
}

View File

@ -159,6 +159,10 @@ func (gw *Gateway) mapChannelConfig(cfg []config.Bridge, direction string) {
gw.logger.Errorf("Mattermost channels do not start with a #: remove the # in %s", br.Channel) gw.logger.Errorf("Mattermost channels do not start with a #: remove the # in %s", br.Channel)
os.Exit(1) os.Exit(1)
} }
if strings.HasPrefix(br.Account, "zulip.") && !strings.Contains(br.Channel, "/topic:") {
gw.logger.Errorf("Breaking change, since matterbridge 1.14.0 zulip channels need to specify the topic with channel/topic:mytopic in %s of %s", br.Channel, br.Account)
os.Exit(1)
}
ID := br.Channel + br.Account ID := br.Channel + br.Account
if _, ok := gw.Channels[ID]; !ok { if _, ok := gw.Channels[ID]; !ok {
channel := &config.ChannelInfo{ channel := &config.ChannelInfo{

View File

@ -1363,12 +1363,6 @@ Login="yourbot-bot@yourserver.zulipchat.com"
#REQUIRED #REQUIRED
Server="https://yourserver.zulipchat.com" 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 ## RELOADABLE SETTINGS
## Settings below can be reloaded by editing the file ## Settings below can be reloaded by editing the file
@ -1608,7 +1602,7 @@ enable=true
# if you specify an empty string bridge will list all the possibilities # if you specify an empty string bridge will list all the possibilities
# - "Group Name" if you specify a group name the bridge will hint its JID to specify # - "Group Name" if you specify a group name the bridge will hint its JID to specify
# as group names might change in time and contain weird emoticons # as group names might change in time and contain weird emoticons
# zulip - stream (without the #) # zulip - stream/topic:topicname (without the #)
# #
# REQUIRED # REQUIRED
channel="#testing" channel="#testing"
@ -1650,10 +1644,7 @@ enable=true
[[gateway.inout]] [[gateway.inout]]
account="zulip.streamchat" account="zulip.streamchat"
channel="general" channel="general/topic:mytopic"
#OPTIONAL - topic only works for zulip
[gateway.inout.options]
topic="topic1"
#API example #API example
#[[gateway.inout]] #[[gateway.inout]]