Всем привет. Недавно, листая TikTok, увидел, как человек разделил видео на кадры и установил их в качестве своей аватарки в Telegram. Я вдохновился этим и написал этот код Зависимости telethon opencv-python Исходный код main.py from telethon.sync import TelegramClient from telethon.tl.types import InputPhoto from telethon.tl.functions.photos import UploadProfilePhotoRequest, DeletePhotosRequest from pathlib import Path import cv2 import time import json import logging logging.basicConfig(level=logging.INFO) with open("settings.json", encoding="UTF-8") as f: settings = json.load(f) client = TelegramClient("Session", settings["api_id"], settings["api_hash"], system_version="4.16.30-vxCUSTOM", app_version="10.14.0", device_model="Windows") def main(): video_path = input("Введите путь до видео >> ") delete_avs = input("Удалить все предыдущие аватарки? (Y/N) >> ").lower() == "y" client.start() if delete_avs: delete_avatars() logging.info("Все предыдущие аватарки удалены") if not exists_file(video_path): logging.info("Видео по данному пути не найдено") client.disconnect() return cap = cv2.VideoCapture(video_path) frame_count = 0 while True: res, frame = cap.read() if not res: break _, buffer = cv2.imencode(".jpg", frame) file = client.upload_file(buffer.tobytes(), file_name="ava.jpg") client(UploadProfilePhotoRequest(file=file)) frame_count += 1 time.sleep(settings["delay"]) cap.release() logging.info(f"Загружено {frame_count} кадров") client.disconnect() def delete_avatars(): photos = client.get_profile_photos("me") if photos: input_photos = [ InputPhoto( photo.id, photo.access_hash, photo.file_reference ) for photo in photos ] client(DeletePhotosRequest(input_photos)) def exists_file(file_path: str) -> bool: path = Path(file_path) return path != "" and path.exists() if __name__ == "__main__": main() Python from telethon.sync import TelegramClient from telethon.tl.types import InputPhoto from telethon.tl.functions.photos import UploadProfilePhotoRequest, DeletePhotosRequest from pathlib import Path import cv2 import time import json import logging logging.basicConfig(level=logging.INFO) with open("settings.json", encoding="UTF-8") as f: settings = json.load(f) client = TelegramClient("Session", settings["api_id"], settings["api_hash"], system_version="4.16.30-vxCUSTOM", app_version="10.14.0", device_model="Windows") def main(): video_path = input("Введите путь до видео >> ") delete_avs = input("Удалить все предыдущие аватарки? (Y/N) >> ").lower() == "y" client.start() if delete_avs: delete_avatars() logging.info("Все предыдущие аватарки удалены") if not exists_file(video_path): logging.info("Видео по данному пути не найдено") client.disconnect() return cap = cv2.VideoCapture(video_path) frame_count = 0 while True: res, frame = cap.read() if not res: break _, buffer = cv2.imencode(".jpg", frame) file = client.upload_file(buffer.tobytes(), file_name="ava.jpg") client(UploadProfilePhotoRequest(file=file)) frame_count += 1 time.sleep(settings["delay"]) cap.release() logging.info(f"Загружено {frame_count} кадров") client.disconnect() def delete_avatars(): photos = client.get_profile_photos("me") if photos: input_photos = [ InputPhoto( photo.id, photo.access_hash, photo.file_reference ) for photo in photos ] client(DeletePhotosRequest(input_photos)) def exists_file(file_path: str) -> bool: path = Path(file_path) return path != "" and path.exists() if __name__ == "__main__": main() settings.json { "api_id": 0, "api_hash": "", "delay": 5 } Код { "api_id": 0, "api_hash": "", "delay": 5 } api_id и api_hash можно получить на официальном сайте Telegram ( https://my.telegram.org/auth ) delay - это задержка на загрузку аватарки, указывается в секундах. Оптимальным для меня вариантом оказалось 5 секунд
Нинтендо, я тестировал задержку и поймал кд на 10 минут, поэтому без примера работы. позже может, как руки дойдут, сделаю
greshnikov, я понимаю это, но у меня лично никаких проблем нет. и я щас тестировал этот софт, все норм
Sad0w, да это нормально, у меня тоже проблем не было долгое время, а потом че то гады захожу в тг а там введите номер.. Ну я сильно не обижаюсь на них, но пашок конечно