diff --git a/TelegramBotBase/Constants/Telegram.cs b/TelegramBotBase/Constants/Telegram.cs
index a2837d7..f91642d 100644
--- a/TelegramBotBase/Constants/Telegram.cs
+++ b/TelegramBotBase/Constants/Telegram.cs
@@ -16,4 +16,9 @@ public static class Telegram
public const int MaxReplyKeyboardCols = 12;
public const int MessageDeletionsPerSecond = 30;
+
+ ///
+ /// The maximum length of callback data. Will raise an exception of it exceeds it.
+ ///
+ public const int MaxCallBackDataBytes = 64;
}
\ No newline at end of file
diff --git a/TelegramBotBase/Exceptions/CallbackDataTooLongException.cs b/TelegramBotBase/Exceptions/CallbackDataTooLongException.cs
new file mode 100644
index 0000000..300e0e5
--- /dev/null
+++ b/TelegramBotBase/Exceptions/CallbackDataTooLongException.cs
@@ -0,0 +1,21 @@
+using System;
+using Telegram.Bot.Exceptions;
+
+namespace TelegramBotBase.Exceptions;
+
+public sealed class CallbackDataTooLongException : Exception
+{
+ //public override string Message =>
+ // $"You have exceeded the maximum {Constants.Telegram.MaxCallBackDataBytes} bytes.";
+
+ static ApiRequestException _innerException = new Telegram.Bot.Exceptions.ApiRequestException("Bad Request: BUTTON_DATA_INVALID", 400);
+
+ static String _message = $"You have exceeded the maximum {Constants.Telegram.MaxCallBackDataBytes} bytes of callback data.\r\nThis is a pre-sending message from the TelegramBotBase framework.\r\nread more: https://core.telegram.org/bots/api#inlinekeyboardbutton";
+
+ public CallbackDataTooLongException() : base(_message, _innerException)
+ {
+
+ }
+
+
+}
diff --git a/TelegramBotBase/Form/CallbackData.cs b/TelegramBotBase/Form/CallbackData.cs
index 8385551..84c699e 100644
--- a/TelegramBotBase/Form/CallbackData.cs
+++ b/TelegramBotBase/Form/CallbackData.cs
@@ -1,4 +1,6 @@
using Newtonsoft.Json;
+using System.Text;
+using TelegramBotBase.Exceptions;
namespace TelegramBotBase.Form;
@@ -30,7 +32,7 @@ public class CallbackData
/// Serializes data to json string
///
///
- public string Serialize()
+ public string Serialize(bool throwExceptionOnOverflow = false)
{
var s = "";
try
@@ -41,6 +43,16 @@ public class CallbackData
{
}
+#if DEBUG
+
+ //Data is over 64 bytes
+ if(throwExceptionOnOverflow && Encoding.UTF8.GetByteCount(s) > Constants.Telegram.MaxCallBackDataBytes)
+ {
+ throw new CallbackDataTooLongException();
+ }
+
+#endif
+
return s;
}
@@ -65,5 +77,5 @@ public class CallbackData
return null;
}
- public static implicit operator string(CallbackData callbackData) => callbackData.Serialize();
+ public static implicit operator string(CallbackData callbackData) => callbackData.Serialize(true);
}