From 9732aac6b43cff6c332f9f604314d26aadcb2167 Mon Sep 17 00:00:00 2001 From: barelyprofessional <150058423+barelyprofessional@users.noreply.github.com> Date: Wed, 5 Feb 2025 08:26:05 +0800 Subject: [PATCH] Hopeful fix for out of order messages where multiple are sent and more accurate length limit --- KfChatDotNetBot/ChatBot.cs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/KfChatDotNetBot/ChatBot.cs b/KfChatDotNetBot/ChatBot.cs index ec14612..0165a75 100644 --- a/KfChatDotNetBot/ChatBot.cs +++ b/KfChatDotNetBot/ChatBot.cs @@ -1,4 +1,5 @@ using System.Net; +using System.Text; using System.Text.Json; using Humanizer; using KfChatDotNetBot.Models; @@ -245,7 +246,9 @@ public class ChatBot if (InitialStartCooldown) InitialStartCooldown = false; } - public async Task SendChatMessageAsync(string message, bool bypassSeshDetect = false, LengthLimitBehavior lengthLimitBehavior = LengthLimitBehavior.TruncateNicely, int lengthLimit = 500) + // Reference for Sneedchat hardcoded length limit + // https://github.com/jaw-sh/ruforo/blob/master/src/web/chat/connection.rs#L226 + public async Task SendChatMessageAsync(string message, bool bypassSeshDetect = false, LengthLimitBehavior lengthLimitBehavior = LengthLimitBehavior.TruncateNicely, int lengthLimit = 1023) { var settings = await Helpers .GetMultipleValues([ @@ -282,7 +285,7 @@ public class ChatBot return messageTracker; } - if (messageTracker.Message.Length > lengthLimit && lengthLimitBehavior != LengthLimitBehavior.DoNothing) + if (Encoding.UTF8.GetByteCount(messageTracker.Message) > lengthLimit && lengthLimitBehavior != LengthLimitBehavior.DoNothing) { if (lengthLimitBehavior == LengthLimitBehavior.RefuseToSend) { @@ -320,13 +323,15 @@ public class ChatBot // If you feed this long ass messages they will be eaten, don't be retarded. public async Task> SendChatMessagesAsync(List messages, - bool bypassSeshDetect = false) + bool bypassSeshDetect = false, LengthLimitBehavior lengthLimitBehavior = LengthLimitBehavior.RefuseToSend) { List sentMessages = []; foreach (var message in messages) { - sentMessages.Add(await SendChatMessageAsync(message, bypassSeshDetect, LengthLimitBehavior.RefuseToSend)); + sentMessages.Add(await SendChatMessageAsync(message, bypassSeshDetect, lengthLimitBehavior)); + // Delay sending each message, hopefully this will help the issue where messages come out of order + await Task.Delay(TimeSpan.FromMilliseconds(100), _cancellationToken); } return sentMessages;