diff --git a/davtelepot/__init__.py b/davtelepot/__init__.py
index fd511fd..4565090 100644
--- a/davtelepot/__init__.py
+++ b/davtelepot/__init__.py
@@ -11,7 +11,7 @@ __author__ = "Davide Testa"
__email__ = "davide@davte.it"
__credits__ = ["Marco Origlia", "Nick Lee @Nickoala"]
__license__ = "GNU General Public License v3.0"
-__version__ = "2.5.22"
+__version__ = "2.6.0"
__maintainer__ = "Davide Testa"
__contact__ = "t.me/davte"
diff --git a/davtelepot/bot.py b/davtelepot/bot.py
index 62f268c..fa4ca7e 100644
--- a/davtelepot/bot.py
+++ b/davtelepot/bot.py
@@ -52,6 +52,7 @@ from aiohttp import web
from .api import TelegramBot, TelegramError
from .database import ObjectWithDatabase
from .languages import MultiLanguageObject
+from .messages import davtelepot_messages
from .utilities import (
async_get, escape_html_chars, extract, get_secure_key,
make_inline_query_answer, make_lines_of_buttons, remove_html_tags
@@ -82,6 +83,7 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject):
_authorization_denied_message = None
_unknown_command_message = None
TELEGRAM_MESSAGES_MAX_LEN = 4096
+ _max_message_length = 3 * (TELEGRAM_MESSAGES_MAX_LEN - 100)
_default_inline_query_answer = [
dict(
type='article',
@@ -120,6 +122,7 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject):
TelegramBot.__init__(self, token)
ObjectWithDatabase.__init__(self, database_url=database_url)
MultiLanguageObject.__init__(self)
+ self.messages['davtelepot'] = davtelepot_messages
self._path = None
self.preliminary_tasks = []
self.final_tasks = []
@@ -128,6 +131,7 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject):
self._certificate = certificate
self._max_connections = max_connections
self._allowed_updates = allowed_updates
+ self._max_message_length = None
self._session_token = get_secure_key(length=10)
self._name = None
self._telegram_id = None
@@ -399,6 +403,17 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject):
"""
return self._allowed_updates or []
+ @property
+ def max_message_length(self) -> int:
+ return self._max_message_length or self.__class__._max_message_length
+
+ @classmethod
+ def set_class_max_message_length(cls, max_message_length: int):
+ cls._max_message_length = max_message_length
+
+ def set_max_message_length(self, max_message_length: int):
+ self._max_message_length = max_message_length
+
@property
def name(self):
"""Bot name."""
@@ -1178,6 +1193,8 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject):
update = update['message']
if chat_id is None and 'chat' in update:
chat_id = self.get_chat_id(update)
+ if user_record is None:
+ user_record = self.db['users'].find_one(telegram_id=chat_id)
if reply_to_update and 'message_id' in update:
reply_to_message_id = update['message_id']
if (
@@ -1195,13 +1212,29 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject):
return
parse_mode = str(parse_mode)
if isinstance(text, dict):
- if user_record is None:
- user_record = self.db['users'].find_one(telegram_id=chat_id)
text = self.get_message(
update=update,
user_record=user_record,
messages=text
)
+ if len(text) > self.max_message_length:
+ message_file = io.StringIO(text)
+ message_file.name = self.get_message(
+ 'davtelepot', 'long_message', 'file_name',
+ update=update,
+ user_record=user_record,
+ )
+ return await self.send_document(
+ chat_id=chat_id,
+ document=message_file,
+ caption=self.get_message(
+ 'davtelepot', 'long_message', 'caption',
+ update=update,
+ user_record=user_record,
+ ),
+ use_stored_file_id=False,
+ parse_mode='HTML'
+ )
text_chunks = self.split_message_text(
text=text,
limit=self.__class__.TELEGRAM_MESSAGES_MAX_LEN - 100,
diff --git a/davtelepot/messages.py b/davtelepot/messages.py
index a7247be..c54b016 100644
--- a/davtelepot/messages.py
+++ b/davtelepot/messages.py
@@ -1,5 +1,22 @@
"""Default messages for bot functions."""
+davtelepot_messages = {
+ 'long_message': {
+ 'file_name': {
+ 'en': "Long message.html",
+ 'it': "Messaggio lungo.html",
+ },
+ 'caption': {
+ 'en': "Long message\n\n"
+ "This message is too long to be sent as individual "
+ "messages.",
+ 'it': "Messaggio lungo\n\n"
+ "Questo messaggio รจ troppo lungo per essere inviato come "
+ "messaggi separati.",
+ }
+ }
+}
+
default_admin_messages = {
'cancel': {
'button': {