Вот мой код:
👉
import os
import asyncio
import logging
from collections import defaultdict
from dotenv import load_dotenv
from telethon import TelegramClient, events, Button

Загрузка переменных окружения
load_dotenv()
API_ID = os.getenv("API_ID")
API_HASH = os.getenv("API_HASH")
BOT_TOKEN = os.getenv("BOT_TOKEN")
CHANNEL_ID = int(os.getenv("CHANNEL_ID"))
INTERIM_CHAT_ID = int(os.getenv("INTERIM_CHAT_ID"))
ALLOWED_USER_ID = int(os.getenv("ALLOWED_USER_ID"))

Инициализация клиента
client = TelegramClient('bot', API_ID, API_HASH)
client.start(bot_token=BOT_TOKEN)

Настройка логирования
logging.basicConfig(filename="bot.log", level=logging.INFO)

Словари для хранения сообщений
pending_albums = {}
pending_messages = {}
grouped_messages = defaultdict(list)

ALBUM_TIMEOUT = 1.0

@client.on(events.NewMessage(func=lambda e: e.is_private and e.sender_id == ALLOWED_USER_ID))
async def handle_message(event):
message = event.message


if message.text and message.text.startswith('/'):
    return

if message.grouped_id:
    group_id = str(message.grouped_id)
    grouped_messages[group_id].append(message)
    if len(grouped_messages[group_id]) == 1:
        asyncio.create_task(schedule_group_send(group_id))
else:
    # Отправляем само сообщение в промежуточный канал
    sent_message = await client.send_message(
        INTERIM_CHAT_ID,
        message
    )

    # Создаём инлайн-кнопки
    buttons = [
        [
            Button.inline("✅ Отправить", data=f"send_message:{message.id}"),
            Button.inline("❌ Отменить", data=f"cancel_message:{message.id}")
        ]
    ]

    # Отправляем сообщение с кнопками
    buttons_message = await client.send_message(
        INTERIM_CHAT_ID,
        "Выберите действие для сообщения:",
        buttons=buttons
    )

    pending_messages[message.id] = {
        'interim_message': sent_message,
        'buttons_message_id': buttons_message.id,
        'sender_id': message.sender_id,
        'message': message
    }
await event.delete()
async def schedule_group_send(group_id):
await asyncio.sleep(ALBUM_TIMEOUT)
if group_id in grouped_messages:
messages = grouped_messages.pop(group_id)


    # Создаём списки для медиа и подписей
    media_list = [msg.media for msg in messages]
    caption = "\n".join([msg.text for msg in messages if msg.text])

    # Отправляем альбом в промежуточный канал как единое целое
    sent_messages = await client.send_file(
        INTERIM_CHAT_ID,
        media_list,
        caption=caption,
        silent=True
    )

    # Создаём инлайн-кнопки для альбома
    buttons = [
        [
            Button.inline("✅ Отправить", data=f"send_album:{group_id}"),
            Button.inline("❌ Отменить", data=f"cancel_album:{group_id}")
        ]
    ]

    # Отправляем сообщение с кнопками после альбома
    buttons_message = await client.send_message(
        INTERIM_CHAT_ID,
        "Выберите действие для альбома:",
        buttons=buttons
    )

    pending_albums[group_id] = {
        'message_ids': [msg.id for msg in sent_messages],
        'buttons_message_id': buttons_message.id,
        'sender_id': messages[0].sender_id,
        'messages': messages
    }

    # Удаляем исходные сообщения
    for msg in messages:
        await msg.delete()
@client.on(events.CallbackQuery)
async def callback_handler(event):
data = event.data.decode('utf-8')
if ':' not in data:
return


command, identifier = data.split(':', 1)

if command in ['send_album', 'cancel_album']:
    pending = pending_albums.get(identifier)
    if not pending or pending['sender_id'] != event.sender_id:
        await event.answer("У вас нет доступа к этой функции.", alert=True)
        return

    if command == 'send_album':
        # Получаем изменённые сообщения из промежуточного канала
        interim_messages = await client.get_messages(
            INTERIM_CHAT_ID,
            ids=pending['message_ids']
        )

        media_list = [msg.media for msg in interim_messages]
        caption = "\n".join([msg.text for msg in interim_messages if msg.text])

        # Отправляем обновлённый альбом
        await client.send_file(
            CHANNEL_ID,
            media_list,
            caption=caption
        )

        # Удаляем сообщения альбома и кнопки
        await client.delete_messages(INTERIM_CHAT_ID, pending['message_ids'])
        await client.delete_messages(INTERIM_CHAT_ID, [pending['buttons_message_id']])
        del pending_albums[identifier]
        await event.answer("Альбом успешно отправлен в канал.", alert=True)

    elif command == 'cancel_album':
        # Удаляем сообщения альбома и кнопки
        await client.delete_messages(INTERIM_CHAT_ID, pending['message_ids'])
        await client.delete_messages(INTERIM_CHAT_ID, [pending['buttons_message_id']])
        del pending_albums[identifier]
        await event.answer("Отправка альбома отменена.", alert=True)

elif command in ['send_message', 'cancel_message']:
    message_id = int(identifier)
    pending = pending_messages.get(message_id)
    if not pending or pending['sender_id'] != event.sender_id:
        await event.answer("У вас нет доступа к этой функции.", alert=True)
        return

    if command == 'send_message':
        # Получаем изменённое сообщение из промежуточного канала
        interim_message = await client.get_messages(
            INTERIM_CHAT_ID,
            ids=pending['interim_message'].id
        )

        # Отправляем сообщение как есть
        await client.send_message(
            CHANNEL_ID,
            interim_message
        )

        # Удаляем оба сообщения из промежуточного канала
        await client.delete_messages(INTERIM_CHAT_ID, [pending['interim_message'].id, pending['buttons_message_id']])
        del pending_messages[message_id]
        await event.answer("Сообщение отправлено в канал.", alert=True)

    elif command == 'cancel_message':
        # Удаляем оба сообщения
        await client.delete_messages(INTERIM_CHAT_ID, [pending['interim_message'].id, pending['buttons_message_id']])
        del pending_messages[message_id]
        await event.answer("Отправка отменена.", alert=True)
print("Бот запущен!")
client.run_until_disconnected()
👈
Всё прекрасно, но когда я в промежуточном канале изменяю пост, а затем изменённый пост отправляю в основной канал, то некоторые форматирования: Цитата и Моноширинный, а остальные остаются.