➡️Вот мой код:
👉
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
        )

        # Затем отправляем инструкции отдельным сообщением
        instruction_text = (
            "🆔 ID сообщения: {}\n"
            "➖➖➖➖➖➖➖➖➖\n"
            "Команды:\n"
            "✅ /send_{} - отправить\n"
            "❌ /cancel_{} - отменить"
        ).format(message.id, message.id, message.id)

        sent_instructions = await client.send_message(
            INTERIM_CHAT_ID,
            instruction_text
        )

        pending_messages[message.id] = {
            'message': message,
            'interim_message': sent_message,
            'instruction_message': sent_instructions
        }
    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)
        # Отправляем альбом в промежуточный канал без кнопок
        sent_messages = []
        for msg in messages:
            sent = await client.send_message(
                INTERIM_CHAT_ID,
                msg,
                silent=True
            )
            sent_messages.append(sent)

        # Отправляем сообщение с кнопками после альбома
        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("Альбом успешно отправлен в канал.")

        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("Отправка альбома отменена.")


@client.on(events.NewMessage(pattern=r'/send_(\d+)'))
async def send_message(event):
    if event.sender_id != ALLOWED_USER_ID:
        return

    message_id = int(event.pattern_match.group(1))
    if message_id in pending_messages:
        # Получаем измененное сообщение из промежуточного канала
        interim_message = await client.get_messages(
            INTERIM_CHAT_ID,
            ids=pending_messages[message_id]['interim_message'].id
        )

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

        # Удаляем оба сообщения из промежуточного канала
        await pending_messages[message_id]['interim_message'].delete()
        await pending_messages[message_id]['instruction_message'].delete()
        del pending_messages[message_id]
        await event.reply("Сообщение отправлено в канал")

@client.on(events.NewMessage(pattern=r'/cancel_(\d+)'))
async def cancel_message(event):
    if event.sender_id != ALLOWED_USER_ID:
        return

    message_id = int(event.pattern_match.group(1))
    if message_id in pending_messages:
        # Удаляем оба сообщения
        await pending_messages[message_id]['interim_message'].delete()
        await pending_messages[message_id]['instruction_message'].delete()
        del pending_messages[message_id]
        await event.reply("Отправка отменена")

print("Бот запущен!")
client.run_until_disconnected()
👈
➡️Братан, в этом коде всё идеально, только когда я пересылаю пост с двумя и более медиа файлами, то есть сгруппированный альбом, то в промежуточном канале его разделяет, но после отправки в основной канал снова собирает. Это не как не мешает, всё хорошо, просто визуально в промежуточном канале не нравится когда они разбросаны.