На примере telethon
async for dialog in client.iter_dialogs(): # Итерируем все диалоги
result = await client(functions.messages.GetPeerDialogsRequest( # Получаем данные диалога
peers=[dialog]
))
# result.dialogs[0].read_outbox_max_id - Это последнее прочитанное сообщение в диалоге
async for message in client.iter_messages(dialog): # Итерируем сообщения диалога
if result.dialogs[0].read_outbox_max_id < message.id: # Если read_outbox_max_id меньше message.id - Значит сообщение не прочитано
print(f'{message.message} (Не прочитано)')