forked from jshiffer/matterbridge
Add threading support with token (discord) (#1342)
Webhooks don't support the threading yet, so this is token only. In discord you can reply on each message of a thread, but this is not possible in mattermost (so some changes added there to make sure we always answer on the rootID of the thread). Also needs some more testing with slack. update : It now also uses the token when replying to a thread (even if webhooks are enabled), until webhooks have support for threads.
This commit is contained in:
parent
b89102c5fc
commit
19d47784bd
@ -244,7 +244,7 @@ func (b *Bdiscord) Send(msg config.Message) (string, error) {
|
|||||||
|
|
||||||
// Use webhook to send the message
|
// Use webhook to send the message
|
||||||
useWebhooks := b.shouldMessageUseWebhooks(&msg)
|
useWebhooks := b.shouldMessageUseWebhooks(&msg)
|
||||||
if useWebhooks && msg.Event != config.EventMsgDelete {
|
if useWebhooks && msg.Event != config.EventMsgDelete && msg.ParentID == "" {
|
||||||
return b.handleEventWebhook(&msg, channelID)
|
return b.handleEventWebhook(&msg, channelID)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -287,11 +287,24 @@ func (b *Bdiscord) handleEventBotUser(msg *config.Message, channelID string) (st
|
|||||||
return msg.ID, err
|
return msg.ID, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m := discordgo.MessageSend{
|
||||||
|
Content: msg.Username + msg.Text,
|
||||||
|
}
|
||||||
|
|
||||||
|
if msg.ParentID != "" && msg.ParentID != "msg-parent-not-found" {
|
||||||
|
m.Reference = &discordgo.MessageReference{
|
||||||
|
MessageID: msg.ParentID,
|
||||||
|
ChannelID: channelID,
|
||||||
|
GuildID: b.guildID,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Post normal message
|
// Post normal message
|
||||||
res, err := b.c.ChannelMessageSend(channelID, msg.Username+msg.Text)
|
res, err := b.c.ChannelMessageSendComplex(channelID, &m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
return res.ID, nil
|
return res.ID, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,6 +127,11 @@ func (b *Bdiscord) messageCreate(s *discordgo.Session, m *discordgo.MessageCreat
|
|||||||
// Replace emotes
|
// Replace emotes
|
||||||
rmsg.Text = replaceEmotes(rmsg.Text)
|
rmsg.Text = replaceEmotes(rmsg.Text)
|
||||||
|
|
||||||
|
// Add our parent id if it exists
|
||||||
|
if m.MessageReference != nil {
|
||||||
|
rmsg.ParentID = m.MessageReference.MessageID
|
||||||
|
}
|
||||||
|
|
||||||
b.Log.Debugf("<= Sending message from %s on %s to gateway", m.Author.Username, b.Account)
|
b.Log.Debugf("<= Sending message from %s on %s to gateway", m.Author.Username, b.Account)
|
||||||
b.Log.Debugf("<= Message is %#v", rmsg)
|
b.Log.Debugf("<= Message is %#v", rmsg)
|
||||||
b.Remote <- rmsg
|
b.Remote <- rmsg
|
||||||
|
@ -108,7 +108,7 @@ func (b *Bmattermost) handleMatterClient(messages chan *config.Message) {
|
|||||||
Channel: message.Channel,
|
Channel: message.Channel,
|
||||||
Text: message.Text,
|
Text: message.Text,
|
||||||
ID: message.Post.Id,
|
ID: message.Post.Id,
|
||||||
ParentID: message.Post.ParentId,
|
ParentID: message.Post.RootId, // ParentID is obsolete with mattermost
|
||||||
Extra: make(map[string][]interface{}),
|
Extra: make(map[string][]interface{}),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,6 +127,15 @@ func (b *Bmattermost) Send(msg config.Message) (string, error) {
|
|||||||
msg.Text = fmt.Sprintf("[thread]: %s", msg.Text)
|
msg.Text = fmt.Sprintf("[thread]: %s", msg.Text)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// we only can reply to the root of the thread, not to a specific ID (like discord for example does)
|
||||||
|
if msg.ParentID != "" {
|
||||||
|
post, res := b.mc.Client.GetPost(msg.ParentID, "")
|
||||||
|
if res.Error != nil {
|
||||||
|
b.Log.Errorf("getting post %s failed: %s", msg.ParentID, res.Error.DetailedError)
|
||||||
|
}
|
||||||
|
msg.ParentID = post.RootId
|
||||||
|
}
|
||||||
|
|
||||||
// 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) {
|
||||||
|
@ -160,7 +160,7 @@ func (r *Router) handleReceive() {
|
|||||||
// For some bridges we always add/update the message ID.
|
// For some bridges we always add/update the message ID.
|
||||||
// This is necessary as msgIDs will change if a bridge returns
|
// This is necessary as msgIDs will change if a bridge returns
|
||||||
// a different ID in response to edits.
|
// a different ID in response to edits.
|
||||||
if !exists || msg.Protocol == "discord" {
|
if !exists {
|
||||||
gw.Messages.Add(msg.Protocol+" "+msg.ID, msgIDs)
|
gw.Messages.Add(msg.Protocol+" "+msg.ID, msgIDs)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user