Как получить фото всех участников канала с помощью telethon?
Я хочу взять фото и ники всех участников чата в Telegram. Для этого у меня есть такой код:
client = TelegramClient(username, api_id, api_hash)
async def dump_all_participants(channel) -> list:
offset_user = 0
limit_user = 100
all_participants = []
filter_user = ChannelParticipantsSearch('')
while True:
participants = await client(GetParticipantsRequest(channel,
filter_user, offset_user, limit_user, hash=0))
if not participants.users:
break
all_participants.extend(participants.users)
offset_user += len(participants.users)
all_users_details = []
for participant in all_participants:
if participant.photo is None:
photo = UNKNOWN.STRING
else:
photo = participant.photo
all_users_details.append({participant.id: [participant.username, photo]})
return all_users_details
проблема в том, что фотография является объектом Telethon. Я не могу вытащить из него ссылку или просто не знаю, как это сделать
вывод переменной photo: UserProfilePhoto (photo_id = 208135253786732667, photo_small = FileLocationToBeDeprecated (volume_id = 257125342, local_id = 230348), photo_big = FileLocationToBeDeprecated (volume_id = 257125342, local_id = 257125342, local_id = 257125342, local_id = 257125342)
Я нашел InputPhoto в документации по teletone и надеюсь, что мне это поможет, но документация не содержит примеров использования, и я не могу понять, как это реализовать. Может кто поможет подсказкой или примером как достать оттуда саму фотографию?
Ответы (2 шт):
Возможно этот метод get_profile_photos поможет, подробнее здесь https://docs.telethon.dev/en/latest/modules/client.html?#telethon.client.chats.ChatMethods.get_profile_photos, код оттуда:
# Get the photos of a channel
photos = await client.get_profile_photos(channel)
# Download the oldest photo
await client.download_media(photos[-1])
или iter_profile_photos, подробнее: https://docs.telethon.dev/en/latest/modules/client.html?#telethon.client.chats.ChatMethods.iter_profile_photos, код оттуда:
# Download all the profile photos of some user
async for photo in client.iter_profile_photos(user):
await client.download_media(photo)
или download_profile_photo подробнее: https://docs.telethon.dev/en/latest/modules/client.html?#telethon.client.downloads.DownloadMethods.download_profile_photo, код оттуда:
# Download your own profile photo
path = await client.download_profile_photo('me')
print(path)
Может еще актуально.
Получать изображения в Telethon можно примерно так:
client.download_media(message, file='Тут путь к выходному файлу')
Или вот так:
message.download_media()