Attempt to improve the way long strings are split up. There's a new extension method called FancySplitMessage to achieve this. Truncation options now work on bytes instead of string length too

This commit is contained in:
barelyprofessional
2025-02-09 15:59:39 +08:00
parent 4448a6a70a
commit f0fc79c142
3 changed files with 85 additions and 7 deletions

View File

@@ -285,7 +285,7 @@ public class ChatBot
return messageTracker;
}
if (Encoding.UTF8.GetByteCount(messageTracker.Message) > lengthLimit && lengthLimitBehavior != LengthLimitBehavior.DoNothing)
if (messageTracker.Message.Utf8LengthBytes() > lengthLimit && lengthLimitBehavior != LengthLimitBehavior.DoNothing)
{
if (lengthLimitBehavior == LengthLimitBehavior.RefuseToSend)
{
@@ -296,7 +296,8 @@ public class ChatBot
}
if (lengthLimitBehavior == LengthLimitBehavior.TruncateNicely)
{
messageTracker.Message = messageTracker.Message.Truncate(lengthLimit);
// '…' is 3 bytes so we have to make room for it
messageTracker.Message = messageTracker.Message.TruncateBytes(lengthLimit - 3).TrimEnd() + "…";
}
if (lengthLimitBehavior == LengthLimitBehavior.TruncateExactly)
@@ -304,7 +305,7 @@ public class ChatBot
// ReSharper disable once ReplaceSubstringWithRangeIndexer
// The range indexer is a fucking piece of shit that does not work.
// TrimEnd in case you end up truncating on a space (happened during testing) as Sneedchat will trim it
messageTracker.Message = messageTracker.Message.Substring(0, lengthLimit).TrimEnd();
messageTracker.Message = messageTracker.Message.TruncateBytes(lengthLimit).TrimEnd();
}
}
@@ -316,7 +317,7 @@ public class ChatBot
}
public SentMessageTrackerModel SendChatMessage(string message, bool bypassSeshDetect = false,
LengthLimitBehavior lengthLimitBehavior = LengthLimitBehavior.TruncateNicely, int lengthLimit = 500)
LengthLimitBehavior lengthLimitBehavior = LengthLimitBehavior.TruncateNicely, int lengthLimit = 1023)
{
return SendChatMessageAsync(message, bypassSeshDetect, lengthLimitBehavior, lengthLimit).Result;
}