From e4a95c5c7a2e43d5c4f6976f6d983b11d3135dfd Mon Sep 17 00:00:00 2001 From: Wim Date: Sun, 6 Feb 2022 23:25:02 +0100 Subject: [PATCH] Make sure MessageLength and MessageSplit work as documented. Fixes #1540 --- bridge/helper/helper.go | 8 ++------ bridge/irc/irc.go | 15 ++++++++++++--- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/bridge/helper/helper.go b/bridge/helper/helper.go index fb65d8d930..43bc1539dd 100644 --- a/bridge/helper/helper.go +++ b/bridge/helper/helper.go @@ -80,10 +80,6 @@ func DownloadFileAuthRocket(url, token, userID string) (*[]byte, error) { // word boundaries when splitting but this is hard to solve without potentially // breaking formatting and other stylistic effects. func GetSubLines(message string, maxLineLength int, clippingMessage string) []string { - if clippingMessage == "" { - clippingMessage = " " - } - var lines []string for _, line := range strings.Split(strings.TrimSpace(message), "\n") { if maxLineLength == 0 || len([]byte(line)) <= maxLineLength { @@ -98,8 +94,8 @@ func GetSubLines(message string, maxLineLength int, clippingMessage string) []st var splitStart int var startOfPreviousRune int for i := range line { - if i-splitStart > maxLineLength-len([]byte(clippingMessage)) { - lines = append(lines, line[splitStart:startOfPreviousRune]+clippingMessage) + if i-splitStart > maxLineLength { + lines = append(lines, line[splitStart:startOfPreviousRune]) splitStart = startOfPreviousRune } startOfPreviousRune = i diff --git a/bridge/irc/irc.go b/bridge/irc/irc.go index 4b7b144b3e..43013c0855 100644 --- a/bridge/irc/irc.go +++ b/bridge/irc/irc.go @@ -25,7 +25,7 @@ import ( type Birc struct { i *girc.Client - Nick string + Nick, MessageClipped string names map[string][]string connected chan error Local chan config.Message // local queue for flood control @@ -172,10 +172,11 @@ func (b *Birc) Send(msg config.Message) (string, error) { } if b.GetBool("MessageSplit") { - msgLines = helper.GetSubLines(msg.Text, b.MessageLength, b.GetString("MessageClipped")) + msgLines = helper.GetSubLines(msg.Text, b.MessageLength, "") } else { - msgLines = helper.GetSubLines(msg.Text, 0, b.GetString("MessageClipped")) + msgLines = []string{helper.GetSubLines(msg.Text, b.MessageLength, "")[0] + b.getMessageClipped()} } + for i := range msgLines { if len(b.Local) >= b.MessageQueue { b.Log.Debugf("flooding, dropping message (queue at %d)", len(b.Local)) @@ -411,3 +412,11 @@ func (b *Birc) getTLSConfig() (*tls.Config, error) { return tlsConfig, nil } + +func (b *Birc) getMessageClipped() string { + if b.GetString("MessageClipped") == "" { + return " " + } else { + return " " + b.GetString("MessageClipped") + } +}