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"
|
__email__ = "davide@davte.it"
|
||||||
__credits__ = ["Marco Origlia", "Nick Lee @Nickoala"]
|
__credits__ = ["Marco Origlia", "Nick Lee @Nickoala"]
|
||||||
__license__ = "GNU General Public License v3.0"
|
__license__ = "GNU General Public License v3.0"
|
||||||
__version__ = "2.5.22"
|
__version__ = "2.6.0"
|
||||||
__maintainer__ = "Davide Testa"
|
__maintainer__ = "Davide Testa"
|
||||||
__contact__ = "t.me/davte"
|
__contact__ = "t.me/davte"
|
||||||
|
|
||||||
|
@ -52,6 +52,7 @@ from aiohttp import web
|
|||||||
from .api import TelegramBot, TelegramError
|
from .api import TelegramBot, TelegramError
|
||||||
from .database import ObjectWithDatabase
|
from .database import ObjectWithDatabase
|
||||||
from .languages import MultiLanguageObject
|
from .languages import MultiLanguageObject
|
||||||
|
from .messages import davtelepot_messages
|
||||||
from .utilities import (
|
from .utilities import (
|
||||||
async_get, escape_html_chars, extract, get_secure_key,
|
async_get, escape_html_chars, extract, get_secure_key,
|
||||||
make_inline_query_answer, make_lines_of_buttons, remove_html_tags
|
make_inline_query_answer, make_lines_of_buttons, remove_html_tags
|
||||||
@ -82,6 +83,7 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject):
|
|||||||
_authorization_denied_message = None
|
_authorization_denied_message = None
|
||||||
_unknown_command_message = None
|
_unknown_command_message = None
|
||||||
TELEGRAM_MESSAGES_MAX_LEN = 4096
|
TELEGRAM_MESSAGES_MAX_LEN = 4096
|
||||||
|
_max_message_length = 3 * (TELEGRAM_MESSAGES_MAX_LEN - 100)
|
||||||
_default_inline_query_answer = [
|
_default_inline_query_answer = [
|
||||||
dict(
|
dict(
|
||||||
type='article',
|
type='article',
|
||||||
@ -120,6 +122,7 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject):
|
|||||||
TelegramBot.__init__(self, token)
|
TelegramBot.__init__(self, token)
|
||||||
ObjectWithDatabase.__init__(self, database_url=database_url)
|
ObjectWithDatabase.__init__(self, database_url=database_url)
|
||||||
MultiLanguageObject.__init__(self)
|
MultiLanguageObject.__init__(self)
|
||||||
|
self.messages['davtelepot'] = davtelepot_messages
|
||||||
self._path = None
|
self._path = None
|
||||||
self.preliminary_tasks = []
|
self.preliminary_tasks = []
|
||||||
self.final_tasks = []
|
self.final_tasks = []
|
||||||
@ -128,6 +131,7 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject):
|
|||||||
self._certificate = certificate
|
self._certificate = certificate
|
||||||
self._max_connections = max_connections
|
self._max_connections = max_connections
|
||||||
self._allowed_updates = allowed_updates
|
self._allowed_updates = allowed_updates
|
||||||
|
self._max_message_length = None
|
||||||
self._session_token = get_secure_key(length=10)
|
self._session_token = get_secure_key(length=10)
|
||||||
self._name = None
|
self._name = None
|
||||||
self._telegram_id = None
|
self._telegram_id = None
|
||||||
@ -399,6 +403,17 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject):
|
|||||||
"""
|
"""
|
||||||
return self._allowed_updates or []
|
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
|
@property
|
||||||
def name(self):
|
def name(self):
|
||||||
"""Bot name."""
|
"""Bot name."""
|
||||||
@ -1178,6 +1193,8 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject):
|
|||||||
update = update['message']
|
update = update['message']
|
||||||
if chat_id is None and 'chat' in update:
|
if chat_id is None and 'chat' in update:
|
||||||
chat_id = self.get_chat_id(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:
|
if reply_to_update and 'message_id' in update:
|
||||||
reply_to_message_id = update['message_id']
|
reply_to_message_id = update['message_id']
|
||||||
if (
|
if (
|
||||||
@ -1195,13 +1212,29 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject):
|
|||||||
return
|
return
|
||||||
parse_mode = str(parse_mode)
|
parse_mode = str(parse_mode)
|
||||||
if isinstance(text, dict):
|
if isinstance(text, dict):
|
||||||
if user_record is None:
|
|
||||||
user_record = self.db['users'].find_one(telegram_id=chat_id)
|
|
||||||
text = self.get_message(
|
text = self.get_message(
|
||||||
update=update,
|
update=update,
|
||||||
user_record=user_record,
|
user_record=user_record,
|
||||||
messages=text
|
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_chunks = self.split_message_text(
|
||||||
text=text,
|
text=text,
|
||||||
limit=self.__class__.TELEGRAM_MESSAGES_MAX_LEN - 100,
|
limit=self.__class__.TELEGRAM_MESSAGES_MAX_LEN - 100,
|
||||||
|
@ -1,5 +1,22 @@
|
|||||||
"""Default messages for bot functions."""
|
"""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 = {
|
default_admin_messages = {
|
||||||
'cancel': {
|
'cancel': {
|
||||||
'button': {
|
'button': {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user