forked from lug/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:
		| @@ -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 | ||||||
| ################################################################### | ################################################################### | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Alexander
					Alexander