diff options
Diffstat (limited to 'bridge/telegram')
-rw-r--r-- | bridge/telegram/handlers.go | 5 | ||||
-rw-r--r-- | bridge/telegram/telegram.go | 21 |
2 files changed, 22 insertions, 4 deletions
diff --git a/bridge/telegram/handlers.go b/bridge/telegram/handlers.go index d9b104a3..6267c12b 100644 --- a/bridge/telegram/handlers.go +++ b/bridge/telegram/handlers.go @@ -199,6 +199,11 @@ 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 d696e9bc..1b648309 100644 --- a/bridge/telegram/telegram.go +++ b/bridge/telegram/telegram.go @@ -1,6 +1,7 @@ package btelegram import ( + "fmt" "html" "log" "strconv" @@ -108,10 +109,16 @@ 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) } } @@ -131,7 +138,7 @@ 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 @@ -145,10 +152,16 @@ 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) |