Оптимизация кода Python (бот на PyTelegramBotAPI) и решение ошибки связанной с слишком большим сообщением

Вообщем - я делал телеграм бота на Python, который по названию (объекта, человека, предмета и тд.) вида будет отправлять информацию из википедии об этом. Решил использовать библиотеку PyTelegramBotAPI для создания самого каркаса бота, библиотеку wikipedia для извлечения информации о предмете и библиотеку translate для перевода информации (т.к. она извлекается на английском). Вот что в итоге у меня получилось:

import telebot
import wikipedia
from translate import Translator

bot = telebot.TeleBot("TOKEN")

@bot.message_handler(commands=['start', 'help'])
def send_welcome(message):
    bot.reply_to(message, "Привет, это wiki-bot ??‍?\nОтправь ему сообщение, начинающиеся\n с команды /wiki, и напиши мне название того,\nчто тебе нужно, через пробел, чтобы найти\n информацию об этом ?")

@bot.message_handler(content_types=['text'])
def send_adress(message):
    if message.text.startswith('/wiki') == True:
        translates = []
        el_prepar = list(message.text)
        del el_prepar[0:6]
        el = ''.join(el_prepar)
        wiki_prepar = wikipedia.page(el)
        wiki = wiki_prepar.content
        wiki_words = wiki.split()

        for i in wiki_words:
            translate_prepar = Translator(to_lang="Russian")
            translate_i = translate_prepar.translate(i)
            translates.append(translate_i)
        
        translate = ' '.join(translates)
        l = len(translate) + 1 
        part_1 = translate[0:l//2]
        part_2 = translate[l//2:]
        l2 = len(part_1) + 1 
        part_3 = part_1[0:l2//2]
        part_4 = part_1[l2//2:]
        l3 = len(part_2) + 1 
        part_5 = part_2[0:l3//2]
        part_6 = part_2[l3//2:]
        l4 = len(part_3) + 1 
        part_7 = part_3[0:l4//2]
        part_8 = part_3[l4//2:]
        bot.send_message(message.chat.id, part_3)
        bot.send_message(message.chat.id, part_4)
        bot.send_message(message.chat.id, part_5)
        bot.send_message(message.chat.id, part_6)
        bot.send_message(message.chat.id, part_7)
        bot.send_message(message.chat.id, part_8)


bot.polling()

Есть 2 проблемы: первая - код выполняется очень медленно (Вселенная вступит в фазу Большого Сжатия пока этот код будет выполнятся), вторая - даже при том, что я разделил переведённый текст на 6 частей, он выдаёт вот такую оошибку:

2021-02-13 11:55:22,221 (__init__.py:515 MainThread) ERROR - TeleBot: "A request
 to the Telegram API was unsuccessful. Error code: 400. Description: Bad Request
: message is too long"

, которая означает то, что сообщения слишком большие. Помогите пожалуйста оптимизировать данный код и решить проблему с размером сообщений.


Ответы (1 шт):

Автор решения: Violet

для получения "аргумента" команды можно использовать split(maxsplit=1):

message.text.split(maxsplit=1)
[In]: /wiki тест
[Out]: ['wiki', 'тест']

message.text.split(maxsplit=1)[1]
>> тест

у модуля wikipedia есть метод set_lang позволяющий задать префикс языка:

wikipedia.set_lang('ru')
r = wikipedia.page(message.text.split(maxsplit=1)[1]).content

для того чтобы разбить отправляемое сообщение ботом на несколько, если оно превышает 4096 знаков:

if len(r) > 4096:
    for x in range(0, len(r), 4096):
        bot.send_message(message.chat.id, '{}'.format(r[x:x + 4096]))
        print(x)
else:
    bot.send_message(message.chat.id, '{}'.format(r))

Итогом получим:

import telebot
import wikipedia

bot = telebot.TeleBot('9:AAE')

print(bot.get_me())


@bot.message_handler(commands=['wiki'])
def wiki(message):
    wikipedia.set_lang('ru')
    r = wikipedia.page(message.text.split(maxsplit=1)[1]).content

    if len(r) > 4096:
        for x in range(0, len(r), 4096):
            bot.send_message(message.chat.id, '{}'.format(r[x:x + 4096]))
            print(x)
    else:
        bot.send_message(message.chat.id, '{}'.format(r))


bot.polling(none_stop=True, interval=0)

в результате отправив боту /wiki москва получим вывод https://ru.wikipedia.org/wiki/Москва в виде 23 сообщений.

→ Ссылка