Reputation: 580
I have a telegram bot and I want to send a message
in which the error message will be returned to me
my code is :
path = 'C:\\Bot\\Log\\aaa\\*.log'
files = glob.glob(path)
nlines= 0
data = "Servers : \n"
for name in files:
with open(name) as f:
for line in f :
nlines += 1
if (line.find("Total") >= 0):
data += line
for i in range(5):
data += next(f)
data += f'\n{emoji.emojize(":blue_heart:")} ----------------------------------------------------{emoji.emojize(":blue_heart:")}\n'
if (line.find("Source") >= 0):
data += line
query.edit_message_text(
text=f"{data}",
reply_markup=build_keyboard(number_list),
)
my error is :
telegram.error.BadRequest: Message_too_long
According to this code model, how can I send my message to the bot?
Upvotes: 7
Views: 9752
Reputation: 431
Starting from py3.12, you can use itertools.batched
:
for msg_batch in itertools.batched(long_message, 4096):
bot.send_message(message.chat.id, msg_batch)
Upvotes: 2
Reputation: 2561
its still an open issue, but you can split your request for 4089 chars per send
you have 2 options:
if len(info) > 4096:
for x in range(0, len(info), 4096):
bot.send_message(message.chat.id, info[x:x+4096])
else:
bot.send_message(message.chat.id, info)
or
msgs = [message[i:i + 4096] for i in range(0, len(message), 4096)]
for text in msgs:
update.message.reply_text(text=text)
Upvotes: 8
Reputation: 249
This code may works :
if len(info) > 4096:
for x in range(0, len(info), 4096):
bot.send_message(message.chat.id, info[x:x+4096])
else:
bot.send_message(message.chat.id, info)
Upvotes: 1
Reputation: 53
Since Telegram has limit of 4096 chars per message, one way to work around will be to break your message down into 4096 chars and then send it, and repeat till the end.
You can begin with something like:
def slice(val, start=1, stop=None):
return val[start:stop]
limit = 4096
chars_arr = list(long_message)
length = len(chars_arr)
print(f"Long message length: {length} and limit is {limit}")
# Iterate for batches of 4096
print("".join(slice(chars_arr, 0, 4096)))
Upvotes: 0