Thumbnail

rani/matterbridge.git

Clone URL: https://git.buni.party/rani/matterbridge.git

commit b4ed998f29c7d68e2bffdac0172cb19a24e7f6d2 Author: Alexander <emu.sas@gmail.com> Date: Fri Mar 25 23:58:52 2022 +0000 Preserve threading from telegram replies (telegram) (#1776) * Preserve threading from telegram replies * Add fallback for unthreaded telegram message * Fix linter issue diff --git a/bridge/telegram/handlers.go b/bridge/telegram/handlers.go index d9b104a..6267c12 100644 --- a/bridge/telegram/handlers.go +++ b/bridge/telegram/handlers.go @@ -1996 +19911 @@ func (b *Btelegram) handleRecv(updates <-chan tgbotapi.Update) {   rmsg.ID = strconv.Itoa(message.MessageID)   rmsg.Channel = strconv.FormatInt(message.Chat.ID, 10)   + // preserve threading from telegram reply + if message.ReplyToMessage != nil { + rmsg.ParentID = strconv.Itoa(message.ReplyToMessage.MessageID) + } +   // handle entities (adding URLs)   b.handleEntities(&rmsg, message)   diff --git a/bridge/telegram/telegram.go b/bridge/telegram/telegram.go index d696e9b..1b64830 100644 --- a/bridge/telegram/telegram.go +++ b/bridge/telegram/telegram.go @@ -16 +17 @@  package btelegram    import ( + "fmt"   "html"   "log"   "strconv" @@ -10810 +10916 @@ func (b *Btelegram) Send(msg config.Message) (string, error) {   return b.handleDelete(&msg, chatid)   }   + // Handle prefix hint for unthreaded messages. + if msg.ParentNotFound() { + msg.ParentID = "" + msg.Text = fmt.Sprintf("[reply]: %s", msg.Text) + } +   // Upload a file if it exists   if msg.Extra != nil {   for _, rmsg := range helper.HandleExtra(&msg, b.General) { - if _, msgErr := b.sendMessage(chatid, rmsg.Username, rmsg.Text); msgErr != nil { + if _, msgErr := b.sendMessage(chatid, rmsg.Username, rmsg.Text, msg.ParentID); msgErr != nil {   b.Log.Errorf("sendMessage failed: %s", msgErr)   }   } @@ -1317 +1387 @@ func (b *Btelegram) Send(msg config.Message) (string, error) {   // Ignore empty text field needs for prevent double messages from whatsapp to telegram   // when sending media with text caption   if msg.Text != "" { - return b.sendMessage(chatid, msg.Username, msg.Text) + return b.sendMessage(chatid, msg.Username, msg.Text, msg.ParentID)   }     return "", nil @@ -14510 +15216 @@ func (b *Btelegram) getFileDirectURL(id string) string {   return res  }   -func (b *Btelegram) sendMessage(chatid int64, username, text string) (string, error) { +func (b *Btelegram) sendMessage(chatid int64, username, text, parentID string) (string, error) {   m := tgbotapi.NewMessage(chatid, "")   m.Text, m.ParseMode = TGGetParseMode(b, username, text) - + if parentID != "" { + rmid, err := strconv.Atoi(parentID) + if err != nil { + return "", err + } + m.ReplyToMessageID = rmid + }   m.DisableWebPagePreview = b.GetBool("DisableWebPagePreview")     res, err := b.c.Send(m) diff --git a/matterbridge.toml.sample b/matterbridge.toml.sample index 656949f..54768a1 100644 --- a/matterbridge.toml.sample +++ b/matterbridge.toml.sample @@ -11476 +114712 @@ StripNick=false  #OPTIONAL (default false)  ShowTopicChange=false   +#Opportunistically preserve threaded replies between Telegram groups. +#This only works if the parent message is still in the cache. +#Cache is flushed between restarts. +#OPTIONAL (default false) +PreserveThreading=false +  ###################################################################  #rocketchat section  ###################################################################