Send long text messages as files
This commit is contained in:
parent
e3cde032ba
commit
7ad4f48de1
@ -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"
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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': "<b>Long message</b>\n\n"
|
||||
"This message is too long to be sent as individual "
|
||||
"messages.",
|
||||
'it': "<b>Messaggio lungo</b>\n\n"
|
||||
"Questo messaggio è troppo lungo per essere inviato come "
|
||||
"messaggi separati.",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
default_admin_messages = {
|
||||
'cancel': {
|
||||
'button': {
|
||||
|
Loading…
x
Reference in New Issue
Block a user