Как уже говорилось ранее, оба эти метода помогают извлекать сообщения из чатов, но делают они это по-разному. Далее они будут рассмотрены подробнее.
.get_messages() и .iter_messages() принимают одинаковые аргументы:
client.get_messages(chat\group\dialog) — первый обязательный аргумент, ссылка на телеграмм чат\паблик\диалог;
client.get_messages(limit) — количество сообщений, которые необходимо собрать из группы\паблика\диалога, если limit не установлен, будет получено первое сообщение в чате, так как по умолчанию установлен вывод всего одного сообщения, однако если указать limit=None, то должны быть получены все сообщения. Однако limit=None следует использовать с осторожностью, так как попытка получения слишком большого количества сообщений может быть расценена как подозрительная и может привести к временной блокировке или ограничению запросов от Telegram API.
client.get_messages(offset_date=datetime(2022, 6, 1)) — принимает объект datatime находит все сообщения ранее указанной даты, формат даты(год, месяц, день);
client.get_messages(offset_id(id_message)) — будут извлечены те сообщения, которые предшествуют сообщению с указанным id_message;
client.get_messages(max_id=30) — будут исключены те сообщения, которые имеют более высокий идентификатор;
client.get_messages(min_id=30) — будут исключены те сообщения, которые имеют более старый идентификатор;
client.get_messages(search=’Искомый текст’) — строка, которая будет использоваться в качестве поискового запроса;
client.get_messages(from_user=»@user») — будут возвращены сообщения только этого пользователя. Имя можно указать как username, id_user, last_name, first_name;
client.get_message(reverse=True) — если установлено значение True, сообщения будут возвращаться в обратном порядке (от самого старого к самому новому, а не от нового к самому старому). Это также означает, что значения параметров offset_id и offset_date меняются местами;
client.get_messages(filter=InputMessagesFilterPhotos) — фильтр используется для возврата сообщения. Например, данный фильтр вернет первое сообщение содержащее фото. Для работы с подобными фильтрами необходимо их импортировать from telethon.tl.types import InputMessagesFilterPhotos.
Другие используемые фильтры (у каждого фильтра в списке, свой одноимённый импорт, по аналогии с InputMessagesFilterPhotos):
- filter=InputMessagesFilterChatPhotos — вернет первое сообщение, содержащее фото;
- filter=InputMessagesFilterContacts- вернет первое сообщение, содержащее контакт пользователя;
- filter=InputMessagesFilterDocument- вернет первое сообщение, содержащее документ(pdf, docx, txt т т.д.);
- filter=InputMessagesFilterEmpty- вернет первое сообщение, если его отправитель пуст, скорее всего это работает если пользователь был забанен в группе, а его сообщения не удалены;
- filter=InputMessagesFilterGeo- вернет первое сообщение, в котором есть геометка;
- filter=InputMessagesFilterGif- вернет первое сообщение, в котором содержится GIF;
- filter=InputMessagesFilterMusic- вернет первое сообщение, если в нём содержится музыкальный файл;
- filter=InputMessagesFilterMyMentions- вернет первое сообщение, в котором есть упоминания учетной записи, с которой происходит поиск;
- filter=InputMessagesFilterPhoneCalls- вернет информацию об аудио-звонке;
- filter=InputMessagesFilterPhotoVideo- вернет информацию о видео-звонке;
- filter=InputMessagesFilterPhotos- используется для фильтрации результатов при поиске сообщений, чтобы получить только сообщения, содержащие фотографии;
- filter=InputMessagesFilterPinned- вернет первое закреплённое сообщение;
- filter=InputMessagesFilterRoundVideo- вернет первое сообщение, в котором содержится круглое видео;
- filter=InputMessagesFilterRoundVoice- вернет первое сообщение, в котором содержится голосовое сообщение;
- filter=InputMessagesFilterUrl- вернет первое сообщение, в котором содержится ссылка;
- filter=InputMessagesFilterVideo- вернет первое сообщение, в котором содержится видео;
- filter=InputMessagesFilterVoice- вернет первое сообщение, в котором содержится голосовое сообщение.
Больше методов в документации
Код ниже найдет первое сообщение, содержащее фотографию, и вернет объект этого сообщения.
from telethon import TelegramClient, events, sync, connection
from telethon.tl.types import InputMessagesFilterPhotos
r_api = 1111
r_hash = ''
with TelegramClient('my', r_api, r_hash, system_version="4.10.5 beta x64") as client:
all_message = client.get_messages('https://t.me/name_group', filter=InputMessagesFilterPhotos)
print(all_message)
Код ниже найдет и скачает столько сообщений с картинками, сколько указано в аргументе limit=
from telethon import TelegramClient, events, sync, connection
from telethon.tl.types import InputMessagesFilterPhotos
r_api = 1********8
r_hash = 'b********************b'
with TelegramClient('my', r_api, r_hash, system_version="4.10.5 beta x64") as client:
all_message = client.get_messages('https://t.me/name_group', filter=InputMessagesFilterPhotos, limit=100)
for message in all_message:
client.download_media(message) #file='img/' чтобы указать путь для скачивания.