@dmitry777z

Как превратить свою аватарку в Telegram в часы?

Создал программу, которая генерирует изображение с текущим временем и загружает на аватарку в Telegram, но при запуске выдаёт следующую ошибку:
Traceback (most recent call last):
  File "C:\Бот\main.py", line 15, in <module>
    client(UploadProfilePhotoRequest(file))
  File "D:\Setup\Python\Lib\site-packages\telethon\sync.py", line 39, in syncified
    return loop.run_until_complete(coro)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\Setup\Python\Lib\asyncio\base_events.py", line 664, in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
  File "D:\Setup\Python\Lib\site-packages\telethon\client\users.py", line 30, in __call__
    return await self._call(self._sender, request, ordered=ordered)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\Setup\Python\Lib\site-packages\telethon\client\users.py", line 87, in _call
    result = await future
             ^^^^^^^^^^^^
telethon.errors.rpcerrorlist.StickerMimeInvalidError: Make sure to pass a valid image file for the right InputFile parameter (caused by UploadProfilePhotoRequest)


Код самой программы состоит из трёх файлов:
1.config.py
2.generate_time_images.py
3.main.py

config.py
api_id = 'здесь айди'
api_hash = 'здесь хеш'


generate_time_images.py
import time
from PIL import ImageDraw, Image, ImageFont
from datetime import datetime, timedelta

FONT_SIZE = 50
TEXT_Y_POSITION = 1
TEXT_X_POSITION = 1
Tashkent_UTC = 5 #укажите ваш часовой пояс 

def convert_time_to_string(dt):
    dt += timedelta(hours=Tashkent_UTC)
    return f"{dt.hour}:{dt.minute:02}"

def change_img():
    start_time = datetime.utcnow()
    text = convert_time_to_string(start_time)
    row = Image.new('RGBA', (200, 200), "black")# Цвет фона black,white тд
    parsed = ImageDraw.Draw(row)
    font = ImageFont.truetype("HEADPLANE.ttf", FONT_SIZE)#стиль шрифта
    font2 = ImageFont.truetype("HEADPLANE.ttf", 15)
    parsed.text((int(row.size[0]*0.23), int(row.size[1]*0.31)), f'{text}', 
                 align="center", font=font, fill=(3,33,212))
    parsed.text((45, 110),'Tashkent time', # подтекст
                 align="center", font=font2, fill=(0,0,255))
    row.save(f'time.png', "PNG")

if __name__ == '__main__':
    change_img()


main.py
from telethon import TelegramClient, sync
from telethon.tl.functions.photos import UploadProfilePhotoRequest, DeletePhotosRequest
from datetime import datetime
import time
from config import *
from generate_time_images import *

client = TelegramClient('my_session9911', api_id, api_hash)
client.start()

while True:
    change_img()
    client(DeletePhotosRequest(client.get_profile_photos('me')))
    file = client.upload_file(f"time.png")
    client(UploadProfilePhotoRequest(file))
    time.sleep(30)

if __name__ == '__main__':
	pass


Как исправить ошибку?
  • Вопрос задан
  • 19718 просмотров
Решения вопроса 1
@maximq
QA Engineer
укажите не позиционный аргумент, а ключевой:
client(UploadProfilePhotoRequest(file=file))
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@AndrSmol
увы реализовать такое не выйдет, если быстро менять аватарку прилетает по шапке от самого телеграма и сначала придется ждать около 5 минут что-бы можно было сменить аватарку, а во второй раз уже 20 часов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы