Привет, у меня проблема, при данном сообщении, мой бот выдаёт ошибку. Есть функция для обработки сообщения, додлеай её и исправь ошибку.

Ошибка:
Ошибка при обработке сообщения: Can't parse entities: unclosed end tag at byte offset 4156Traceback (most recent call last):
  File "d:\Visual Studio\project\GPTTgBOT\main.py", line 334, in handle_message
    await send_large_message(send_bot_reply, update)
  File "d:\Visual Studio\project\GPTTgBOT\main.py", line 330, in send_large_message       
    await update.message.reply_text(part, parse_mode='HTML')
  File "d:\Visual Studio\project\GPTTgBOT\.venv\Lib\site-packages	elegram\_message.py", line 1074, in reply_text
    return await self.get_bot().send_message(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "d:\Visual Studio\project\GPTTgBOT\.venv\Lib\site-packages	elegram\ext\_extbot.py", line 2633, in send_message
    return await super().send_message(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "d:\Visual Studio\project\GPTTgBOT\.venv\Lib\site-packages	elegram\_bot.py", line 
381, in decorator
    result = await func(self, *args, **kwargs)  # skipcq: PYL-E1102
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "d:\Visual Studio\project\GPTTgBOT\.venv\Lib\site-packages	elegram\_bot.py", line 
807, in send_message
    return await self._send_message(
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "d:\Visual Studio\project\GPTTgBOT\.venv\Lib\site-packages	elegram\ext\_extbot.py", line 507, in _send_message
    result = await super()._send_message(
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "d:\Visual Studio\project\GPTTgBOT\.venv\Lib\site-packages	elegram\_bot.py", line 
559, in _send_message
    result = await self._post(
             ^^^^^^^^^^^^^^^^^
  File "d:\Visual Studio\project\GPTTgBOT\.venv\Lib\site-packages	elegram\_bot.py", line 
469, in _post
    return await self._do_post(
           ^^^^^^^^^^^^^^^^^^^^
  File "d:\Visual Studio\project\GPTTgBOT\.venv\Lib\site-packages	elegram\ext\_extbot.py", line 325, in _do_post
    return await super()._do_post(
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "d:\Visual Studio\project\GPTTgBOT\.venv\Lib\site-packages	elegram\_bot.py", line 
497, in _do_post
    return await request.post(
           ^^^^^^^^^^^^^^^^^^^
  File "d:\Visual Studio\project\GPTTgBOT\.venv\Lib\site-packages	elegramequest\_baserequest.py", line 168, in post
    result = await self._request_wrapper(
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "d:\Visual Studio\project\GPTTgBOT\.venv\Lib\site-packages	elegramequest\_baserequest.py", line 328, in _request_wrapper
    raise BadRequest(message)
telegram.error.BadRequest: Can't parse entities: unclosed end tag at byte offset 4156  

Сообщение:
Проблема возникает из-за некорректных регулярных выражений в функции <code>markdown_to_telegram_html</code>. Особенно проблемной является строка, которая заменяет любое содержимое 
на зачёркнутый текст:

<pre>text = re.sub(r'(.*?)', r'

', text)
</pre>

Это выражение заменяет <b>все</b> совпадения, включая пустые строки, на <code>

</code>, что приводит к созданию пустых или некорректных тегов HTML. Эти некорректные теги вызывают ошибку <code>telegram.error.BadRequest: Can't parse entities: unsupported start tag "" at byte offset 731</code>.

Чтобы исправить эту проблему, необходимо:

1. <b>Исправить регулярные выражения для зачёркнутого текста и других элементов</b>: Убедитесь, что они правильно соответствуют синтаксису Markdown и не захватывают лишние части текста.

2. <b>Избежать создания пустых тегов</b>: Убедитесь, что теги создаются только для корректно размеченного текста.

Ниже представлен исправленный фрагмент функции <code>markdown_to_telegram_html</code> с корректными регулярными выражениями:

<pre>def markdown_to_telegram_html(text):
    # Заголовки
    text = re.sub(r'^# (.+)$', r'<b></b>', text, flags=re.MULTILINE)
    text = re.sub(r'^## (.+)$', r'<b></b>', text, flags=re.MULTILINE)
    text = re.sub(r'^### (.+)$', r'<b></b>', text, flags=re.MULTILINE)

    # Жирный курсивный текст
    text = re.sub(r'\<i>\</i>\<i>(.</i>?)\<i>\</i>\*', r'<b><i></i></b>', text)

    # Жирный текст
    text = re.sub(r'\<i>\</i>(.<i>?)\</i>\*', r'<b></b>', text)

    # Курсивный текст
    text = re.sub(r'\<i>(.</i>?)\*', r'<i></i>', text)

    # Зачёркнутый текст (исправлено)
    text = re.sub(r'
(.*?)
', r'

', text)

    # Горизонтальная линия (заменяем на символы, поддерживаемые Telegram)
    text = re.sub(r'^---$', r'――――――――――', text, flags=re.MULTILINE)

    # Ссылки
    text = re.sub(r'\[(.<i>?)\]\((.</i>?)\)', r'<a href=""></a>', text)

    # Блоки кода (многострочные) (исправлено)
    text = re.sub(r'</pre>([\s\S]+?)<pre>', r'<pre></pre>', text)

    # Однострочный код (исправлено)
    text = re.sub(r'<code>([^</code>]+?)`', r'<code></code>', text)

    # Списки (упрощенно)
    # text = re.sub(r'^-\s(.+)$', r'• ', text, flags=re.MULTILINE)
    # text = re.sub(r'^\d+\.\s(.+)$', r'  ', text, flags=re.MULTILINE)

    # Удаление неподдерживаемых элементов
    # text = re.sub(r'!\[.<i>?\]\(.</i>?\)', '', text)  # Изображения
    # text = re.sub(r'^\|.<i>\|.</i>$', '', text, flags=re.MULTILINE)  # Таблицы
    # text = re.sub(r':[a-z_+-]+:', '', text)  # Эмодзи
    # text = re.sub(r'<a href=".+?">\^~</a>[\^~]', r'', text)  # Подстрочный и надстрочный текст
    # text = re.sub(r'\$\$.*?\$\$', '', text, flags=re.DOTALL)  # Формулы TeX
    # text = re.sub(r'\[\d+\]:\s<i>http.</i>$', '', text, flags=re.MULTILINE)  # Сноски   
    # text = re.sub(r'^> (.+)$', r'', text, flags=re.MULTILINE)  # Цитаты

    # Удаление неподдерживаемых HTML-тегов
    def remove_unsupported_html_tags(text):
        allowed_tags = ['a', 'b', 'strong', 'i', 'em', 'u', 'ins', 's', 'strike', 'del', 'code', 'pre']
        # Исправленное регулярное выражение
        pattern = r'</?(?!(?:' + '|'.join(allowed_tags) + r'))([a-zA-Z]+)(?:\s[^>]*)?>' 
        text = re.sub(pattern, '', text)
        return text

    text = remove_unsupported_html_tags(text)

    return text.strip()
</pre>

### Внесённые изменения:

1. <b>Зачёркнутый текст</b>:
    - <b>Было</b>:
      <pre>      text = re.sub(r'(.*?)', r'

', text)
      </pre>
    - <b>Стало</b>:
      <pre>      text = re.sub(r'
(.*?)
', r'

', text)
      </pre>
    - <b>Пояснение</b>: Теперь зачёркнутый текст определяется двойными тильдами <code>
text
</code>, что соответствует стандартному синтаксису Markdown.

2. <b>Блоки кода (многострочные)</b>:
    - <b>Было</b>:
      <pre>      text = re.sub(r'(?:\w+
)?([\s\S]+?)', r'<pre></pre>', text)
      </pre>
    - <b>Стало</b>:
      <pre>      text = re.sub(r'</pre>([\s\S]+?)<pre>', r'<pre></pre>', text)
      </pre>
    - <b>Пояснение</b>: Теперь многострочные блоки кода корректно обрабатываются с использованием тройных обратных кавычек.

3. <b>Однострочный код</b>:
    - <b>Было</b>:
      <pre>      text = re.sub(r'(.*?)', r'<code></code>', text)
      </pre>
    - <b>Стало</b>:
      <pre>      text = re.sub(r'<code>([^</code>]+?)`', r'<code></code>', text)        
      </pre>
    - <b>Пояснение</b>: Однострочные блоки кода теперь корректно обрабатываются с использованием одинарных обратных кавычек и предотвращается захват пустых строк.

### Дополнительные рекомендации:

- <b>Порядок замен</b>: Убедитесь, что более специфичные замены выполняются раньше, чтобы 
избежать конфликтов. Например, сначала заменяйте тройные звездочки <code><b><i></code>, затем двойные <code></b></code>, и только потом одинарные <code></i></code>.

- <b>Тестирование</b>: После внесения изменений протестируйте функцию на различных примерах разметки, чтобы убедиться, что все элементы правильно преобразуются и отсутствуют пустые или неправильные теги.

- <b>Экранирование</b>: Если пользователь может вводить HTML-теги, рассмотрите возможность экранирования, чтобы предотвратить их интерпретацию, или убедитесь, что ваша функция корректно их обрабатывает.

Внедрив эти изменения, ошибка <code>Can't parse entities: unsupported start tag "" at byte offset 731</code> должна исчезнуть, и ваш бот будет корректно обрабатывать сообщения с Markdown-разметкой.

Функция:
def markdown_to_telegram_html(text):
    # Жирный курсивный текст
    text = re.sub(r'\*\*\*(.*?)\*\*\*', r'<b><i></i></b>', text)
    
    # Жирный текст
    text = re.sub(r'\*\*(.*?)\*\*', r'<b></b>', text)
    
    # Курсивный текст
    text = re.sub(r'\*(.*?)\*', r'<i></i>', text)
    
    # Зачёркнутый текст
    text = re.sub(r'~~(.*?)~~', r'

', text)
    
    # Горизонтальная линия (заменяем на символы, поддерживаемые Telegram)    
    text = re.sub(r'^---$', r'――――――――――', text, flags=re.MULTILINE)
    
    # Ссылки
    text = re.sub(r'\[(.*?)\]\((.*?)\)', r'<a href=""></a>', text)       
    
    # Блоки кода (многострочные)
    text = re.sub(r'```(?:\w+)?
?([\s\S]+?)```', r'<pre></pre>', text)    
    
    # Однострочный код
    text = re.sub(r'`(.*?)`', r'<code></code>', text)

    # Удаление неподдерживаемых HTML-тегов
    def remove_unsupported_html_tags(text):
        allowed_tags = ['a', 'b', 'strong', 'i', 'em', 'u', 'ins', 's',
                        'strike', 'del', 'code', 'pre']
        # Правильное регулярное выражение для удаления неразрешённых тегов
        pattern = r'</?(?!(' + '|'.join(allowed_tags) + r'))[a-zA-Z]+(?:\s[^>]*)?>'       
        text = re.sub(pattern, '', text)
        return text

    text = remove_unsupported_html_tags(text)

    return text.strip()