diff options
author | ValdikSS <iam@valdikss.org.ru> | 2022-04-22 02:00:57 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-22 01:00:57 +0200 |
commit | ce18c948e620b658c19200d6875202877b2691a4 (patch) | |
tree | 229c76837307e597c3f6a0526b6197c5564957c2 /bridge | |
parent | 7bc93c55061c9272927b2bccffbff94a6959cfdc (diff) | |
download | matterbridge-msglm-ce18c948e620b658c19200d6875202877b2691a4.tar.gz matterbridge-msglm-ce18c948e620b658c19200d6875202877b2691a4.tar.bz2 matterbridge-msglm-ce18c948e620b658c19200d6875202877b2691a4.zip |
Do not apply any markup to URL entities (telegram) (#1808)
handleEntities code uses simple modification offset which does not
allow to detect whether the offset is placed before or after
the element in already modified string.
This works fine is most cases as Telegram server always sort the
elements by offset, in ascending order.
However, this is not the case when the modification, for example bold
text, is applied to the URL. In this case, the offset of URL and
bold entity is equal, which raises the issue.
This commit introduces additional hack for this case, stripping
any entities which intersect with URL.
Diffstat (limited to 'bridge')
-rw-r--r-- | bridge/telegram/handlers.go | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/bridge/telegram/handlers.go b/bridge/telegram/handlers.go index adf291dc..985db7f9 100644 --- a/bridge/telegram/handlers.go +++ b/bridge/telegram/handlers.go @@ -517,8 +517,8 @@ func (b *Btelegram) handleEntities(rmsg *config.Message, message *tgbotapi.Messa } indexMovedBy := 0 + prevLinkOffset := -1 - // for now only do URL replacements for _, e := range message.Entities { asRunes := utf16.Encode([]rune(rmsg.Text)) @@ -537,6 +537,11 @@ func (b *Btelegram) handleEntities(rmsg *config.Message, message *tgbotapi.Messa } rmsg.Text = string(utf16.Decode(asRunes[:offset+e.Length])) + " (" + url.String() + ")" + string(utf16.Decode(asRunes[offset+e.Length:])) indexMovedBy += len(url.String()) + 3 + prevLinkOffset = e.Offset + } + + if e.Offset == prevLinkOffset { + continue } if e.Type == "code" { |