Add better support for multiperson DM (mattermost)

This commit is contained in:
Wim 2018-10-27 22:02:25 +02:00
parent 74e33b0a51
commit e2b50d6194
2 changed files with 28 additions and 10 deletions

View File

@ -109,7 +109,7 @@ func (b *Bmattermost) Disconnect() error {
func (b *Bmattermost) JoinChannel(channel config.ChannelInfo) error { func (b *Bmattermost) JoinChannel(channel config.ChannelInfo) error {
// we can only join channels using the API // we can only join channels using the API
if b.GetString("WebhookURL") == "" && b.GetString("WebhookBindAddress") == "" { if b.GetString("WebhookURL") == "" && b.GetString("WebhookBindAddress") == "" {
id := b.mc.GetChannelId(channel.Name, "") id := b.mc.GetChannelId(channel.Name, b.TeamID)
if id == "" { if id == "" {
return fmt.Errorf("Could not find channel ID for channel %s", channel.Name) return fmt.Errorf("Could not find channel ID for channel %s", channel.Name)
} }
@ -147,7 +147,7 @@ func (b *Bmattermost) Send(msg config.Message) (string, error) {
// Upload a file if it exists // Upload a file if it exists
if msg.Extra != nil { if msg.Extra != nil {
for _, rmsg := range helper.HandleExtra(&msg, b.General) { for _, rmsg := range helper.HandleExtra(&msg, b.General) {
b.mc.PostMessage(b.mc.GetChannelId(rmsg.Channel, ""), rmsg.Username+rmsg.Text) b.mc.PostMessage(b.mc.GetChannelId(rmsg.Channel, b.TeamID), rmsg.Username+rmsg.Text)
} }
if len(msg.Extra["file"]) > 0 { if len(msg.Extra["file"]) > 0 {
return b.handleUploadFile(&msg) return b.handleUploadFile(&msg)
@ -165,7 +165,7 @@ func (b *Bmattermost) Send(msg config.Message) (string, error) {
} }
// Post normal message // Post normal message
return b.mc.PostMessage(b.mc.GetChannelId(msg.Channel, ""), msg.Text) return b.mc.PostMessage(b.mc.GetChannelId(msg.Channel, b.TeamID), msg.Text)
} }
func (b *Bmattermost) handleMatter() { func (b *Bmattermost) handleMatter() {
@ -357,7 +357,7 @@ func (b *Bmattermost) handleDownloadFile(rmsg *config.Message, id string) error
func (b *Bmattermost) handleUploadFile(msg *config.Message) (string, error) { func (b *Bmattermost) handleUploadFile(msg *config.Message) (string, error) {
var err error var err error
var res, id string var res, id string
channelID := b.mc.GetChannelId(msg.Channel, "") channelID := b.mc.GetChannelId(msg.Channel, b.TeamID)
for _, f := range msg.Extra["file"] { for _, f := range msg.Extra["file"] {
fi := f.(config.FileInfo) fi := f.(config.FileInfo)
id, err = b.mc.UploadFile(*fi.Data, channelID, fi.Name) id, err = b.mc.UploadFile(*fi.Data, channelID, fi.Name)

View File

@ -434,8 +434,9 @@ func (m *MMClient) GetChannelName(channelId string) string {
for _, channel := range t.Channels { for _, channel := range t.Channels {
if channel.Id == channelId { if channel.Id == channelId {
if channel.Type == model.CHANNEL_GROUP { if channel.Type == model.CHANNEL_GROUP {
res := strings.Replace(channel.DisplayName, ",", "_", -1) res := strings.Replace(channel.DisplayName, ", ", "-", -1)
return strings.Replace(res, " ", "", -1) res = strings.Replace(res, " ", "_", -1)
return res
} }
return channel.Name return channel.Name
} }
@ -445,8 +446,9 @@ func (m *MMClient) GetChannelName(channelId string) string {
for _, channel := range t.MoreChannels { for _, channel := range t.MoreChannels {
if channel.Id == channelId { if channel.Id == channelId {
if channel.Type == model.CHANNEL_GROUP { if channel.Type == model.CHANNEL_GROUP {
res := strings.Replace(channel.DisplayName, ",", "_", -1) res := strings.Replace(channel.DisplayName, ", ", "-", -1)
return strings.Replace(res, " ", "", -1) res = strings.Replace(res, " ", "_", -1)
return res
} }
return channel.Name return channel.Name
} }
@ -460,8 +462,20 @@ func (m *MMClient) GetChannelId(name string, teamId string) string {
m.RLock() m.RLock()
defer m.RUnlock() defer m.RUnlock()
if teamId == "" { if teamId == "" {
teamId = m.Team.Id for _, t := range m.OtherTeams {
for _, channel := range append(t.Channels, t.MoreChannels...) {
if channel.Type == model.CHANNEL_GROUP {
res := strings.Replace(channel.DisplayName, ", ", "-", -1)
res = strings.Replace(res, " ", "_", -1)
if res == name {
return channel.Id
} }
}
}
}
}
for _, t := range m.OtherTeams { for _, t := range m.OtherTeams {
if t.Id == teamId { if t.Id == teamId {
for _, channel := range append(t.Channels, t.MoreChannels...) { for _, channel := range append(t.Channels, t.MoreChannels...) {
@ -689,7 +703,7 @@ func (m *MMClient) SendDirectMessage(toUserId string, msg string) {
// build & send the message // build & send the message
msg = strings.Replace(msg, "\r", "", -1) msg = strings.Replace(msg, "\r", "", -1)
post := &model.Post{ChannelId: m.GetChannelId(channelName, ""), Message: msg} post := &model.Post{ChannelId: m.GetChannelId(channelName, m.Team.Id), Message: msg}
m.Client.CreatePost(post) m.Client.CreatePost(post)
} }
@ -743,9 +757,13 @@ func (m *MMClient) GetTeamFromChannel(channelId string) string {
} }
for _, c := range channels { for _, c := range channels {
if c.Id == channelId { if c.Id == channelId {
if c.Type == model.CHANNEL_GROUP {
return "G"
}
return t.Id return t.Id
} }
} }
channels = nil
} }
return "" return ""
} }