Truncate messages sent to IRC based on byte count

This commit is contained in:
flan
2018-02-08 01:44:20 +01:00
parent d0b2ee5c85
commit 238ffa4270

View File

@@ -19,6 +19,7 @@ import (
"strconv"
"strings"
"time"
"unicode/utf8"
)
type Birc struct {
@@ -194,9 +195,12 @@ func (b *Birc) Send(msg config.Message) (string, error) {
msg.Text = helper.SplitStringLength(msg.Text, b.Config.MessageLength)
}
for _, text := range strings.Split(msg.Text, "\n") {
input := []rune(text)
if len(text) > b.Config.MessageLength {
text = string(input[:b.Config.MessageLength]) + " <message clipped>"
for len(text)+len(" <message clipped>") > b.Config.MessageLength {
_, size := utf8.DecodeLastRuneInString(text)
text = text[:len(text)-size]
}
text += " <message clipped>"
}
if len(b.Local) < b.Config.MessageQueue {
if len(b.Local) == b.Config.MessageQueue-1 {