Братан, вот код:
import os
import asyncio
import logging
from dotenv import load_dotenv
from telethon import TelegramClient, events, Button
from telethon.errors import (
    FloodWaitError, SlowModeWaitError
)

# Загрузка переменных окружения из файла .env
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_messages = {}

@client.on(events.NewMessage)
async def handle_message(event):
    if event.sender_id != ALLOWED_USER_ID:
        await event.reply("Извините, вы не имеете доступа к использованию этого бота.")
        return

    # Получаем сообщение
    message = event.message

    # Пересылаем сообщение в промежуточную группу и добавляем кнопки
    buttons = [
        [Button.inline("✅ Отправить", data="send_message"), Button.inline("❌ Отменить", data="cancel_message")]
    ]

    sent = await client.send_message(
        INTERIM_CHAT_ID,
        message,
        buttons=buttons
    )

    # Сохраняем информацию о сообщении
    pending_messages[sent.id] = {
        'original_message_id': message.id,
        'sender_id': event.sender_id
    }

    # Удаляем исходное сообщение от пользователя (опционально)
    await event.delete()

@client.on(events.CallbackQuery)
async def callback_handler(event):
    data = event.data.decode('utf-8')

    # Проверяем, что запрос от разрешенного пользователя
    pending = pending_messages.get(event.message_id)
    if not pending or pending['sender_id'] != event.sender_id:
        await event.answer("Вы не имеете доступа к этой функции.", alert=True)
        return

    if data == 'send_message':
        # Получаем отредактированное сообщение из группы
        edited_message = await client.get_messages(INTERIM_CHAT_ID, ids=event.message_id)

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

        # Удаляем сообщение с кнопками из группы
        await edited_message.delete()

        # Удаляем запись из pending_messages
        del pending_messages[event.message_id]

        await event.answer("Сообщение успешно отправлено в канал.")

    elif data == 'cancel_message':
        # Удаляем сообщение с кнопками из группы
        message_to_delete = await client.get_messages(INTERIM_CHAT_ID, ids=event.message_id)
        await message_to_delete.delete()

        # Удаляем запись из pending_messages
        del pending_messages[event.message_id]

        await event.answer("Отправка сообщения отменена.")

    else:
        await event.answer("Неизвестная команда.", alert=True)

@client.on(events.MessageEdited)
async def message_edited_handler(event):
    # Обработчик на случай, если нужно выполнить действия при редактировании сообщения
    # В данном случае он не обязателен, но можно добавить логику при необходимости
    pass

with client:
    print("Бот запущен!")
    client.run_until_disconnected()
➡️Надо решить проблему с групповыми медиа файлами, потому что сейчас при пересылке поста с 2 и более медиа файлами, их разделяет на разные сообщения.