forked from jshiffer/matterbridge
Preserve threading from telegram replies (telegram) (#1776)
* Preserve threading from telegram replies * Add fallback for unthreaded telegram message * Fix linter issue
This commit is contained in:
parent
cc36ebf1c9
commit
5d9604cd15
@ -199,6 +199,11 @@ func (b *Btelegram) handleRecv(updates <-chan tgbotapi.Update) {
|
|||||||
rmsg.ID = strconv.Itoa(message.MessageID)
|
rmsg.ID = strconv.Itoa(message.MessageID)
|
||||||
rmsg.Channel = strconv.FormatInt(message.Chat.ID, 10)
|
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)
|
// handle entities (adding URLs)
|
||||||
b.handleEntities(&rmsg, message)
|
b.handleEntities(&rmsg, message)
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package btelegram
|
package btelegram
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"html"
|
"html"
|
||||||
"log"
|
"log"
|
||||||
"strconv"
|
"strconv"
|
||||||
@ -108,10 +109,16 @@ func (b *Btelegram) Send(msg config.Message) (string, error) {
|
|||||||
return b.handleDelete(&msg, chatid)
|
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
|
// 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) {
|
||||||
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)
|
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
|
// Ignore empty text field needs for prevent double messages from whatsapp to telegram
|
||||||
// when sending media with text caption
|
// when sending media with text caption
|
||||||
if msg.Text != "" {
|
if msg.Text != "" {
|
||||||
return b.sendMessage(chatid, msg.Username, msg.Text)
|
return b.sendMessage(chatid, msg.Username, msg.Text, msg.ParentID)
|
||||||
}
|
}
|
||||||
|
|
||||||
return "", nil
|
return "", nil
|
||||||
@ -145,10 +152,16 @@ func (b *Btelegram) getFileDirectURL(id string) string {
|
|||||||
return res
|
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 := tgbotapi.NewMessage(chatid, "")
|
||||||
m.Text, m.ParseMode = TGGetParseMode(b, username, text)
|
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")
|
m.DisableWebPagePreview = b.GetBool("DisableWebPagePreview")
|
||||||
|
|
||||||
res, err := b.c.Send(m)
|
res, err := b.c.Send(m)
|
||||||
|
@ -1147,6 +1147,12 @@ StripNick=false
|
|||||||
#OPTIONAL (default false)
|
#OPTIONAL (default false)
|
||||||
ShowTopicChange=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
|
#rocketchat section
|
||||||
###################################################################
|
###################################################################
|
||||||
|
Loading…
Reference in New Issue
Block a user