From be52d7c440978b20ffdeae003342cddaef1f882e Mon Sep 17 00:00:00 2001 From: ValdikSS Date: Wed, 16 Mar 2022 03:55:35 +0300 Subject: [PATCH] Telegram: use proper offset and runes for links --- bridge/telegram/handlers.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/bridge/telegram/handlers.go b/bridge/telegram/handlers.go index 2485ed18..bca58fe5 100644 --- a/bridge/telegram/handlers.go +++ b/bridge/telegram/handlers.go @@ -493,18 +493,19 @@ func (b *Btelegram) handleEntities(rmsg *config.Message, message *tgbotapi.Messa asRunes := []rune(rmsg.Text) if e.Type == "text_link" { + offset := e.Offset + indexMovedBy url, err := e.ParseURL() if err != nil { b.Log.Errorf("entity text_link url parse failed: %s", err) continue } utfEncodedString := utf16.Encode([]rune(rmsg.Text)) - if e.Offset+e.Length > len(utfEncodedString) { - b.Log.Errorf("entity length is too long %d > %d", e.Offset+e.Length, len(utfEncodedString)) + if offset+e.Length > len(utfEncodedString) { + b.Log.Errorf("entity length is too long %d > %d", offset+e.Length, len(utfEncodedString)) continue } - link := utf16.Decode(utfEncodedString[e.Offset : e.Offset+e.Length]) - rmsg.Text = strings.Replace(rmsg.Text, string(link), url.String(), 1) + rmsg.Text = string(asRunes[:offset+e.Length]) + " (" + url.String() + ")" + string(asRunes[offset+e.Length:]) + indexMovedBy += len(url.String()) + 3 } if e.Type == "code" {