Смотри, тут два пути — форвардить как есть (с именем отправителя) или копировать (от имени бота). Зависит от того, что тебе нужно.
Вариант 1 — forward_message (сохраняет автора):
from aiogram import Bot, Dispatcher, types
bot = Bot(token="YOUR_TOKEN")
dp = Dispatcher()
TARGET_CHAT_ID = -1001234567890 # ID группы/канала
@dp.message_handler(chat_type=types.ChatType.PRIVATE)
async def forward_from_pm(message: types.Message):
await bot.forward_message(
chat_id=TARGET_CHAT_ID,
from_chat_id=message.chat.id,
message_id=message.message_id
)
Вариант 2 — copy_message (выглядит как сообщение от бота, аккуратнее):
@dp.message_handler(chat_type=types.ChatType.PRIVATE)
async def copy_from_pm(message: types.Message):
await message.copy_to(chat_id=TARGET_CHAT_ID)
Как получить ID целевого чата:
Добавь бота в группу/канал, дай права админа, потом кинь любое сообщение и лови chat.id через тот же хендлер. Или используй @getidsbot.
Важно: если целевой чат — канал, бот должен быть админом с правом публикации. Если группа — тоже админ, иначе получишь Forbidden: bot is not a member.
Кстати, раз уж тут все с Telegram работаем — у меня вопрос к Android-разработчикам. Полгода мучился с платными SMS при каждом входе в Telegram и постоянными обрывами картинок. Перепробовал кучу VPN и ручных прокси, в итоге нашёл клиент, где всё это работает из коробки без танцев. Если кому актуально на Android — вот ссылка:
https://tgrusnet.github.io/tgrus/
Только Android, ставится через APK. Если будут вопросы по установке — пишите.