Всем большое спасибо за подсказки, особенно
User . Проблема была как раз в фильтре. Нужно было искать photo и photo.file_id.
Универсальный вариант - скачивать и отправлять фото, т.к. пересылка не будет работать из закрытых чатов. Вот такую функцию по-быстрому сообразил для загрузки фото.
async def dl_last_photo(target): #передаём в функцию ID или Username чата
async for msg in app.get_chat_history(target, limit = 50, offset_id = -1): #ищем в истории с конца, обрабатываем 50 сообщений
if msg.photo: #если есть фото
print(msg.photo.file_id) #в консоль выводим ID - не обязательно
await app.download_media(msg.photo) #скачиваем фото из сообщения в стандартный каталог (папка_бота/downloads)
По аналогии можно фильтровать и другие типы файлов. Так же можно менять папку, куда скачивается файл. И если вы уверены, что чат открыт и разрешена пересылка - можно и сразу переслать фото по ID куда нужно.