Recentemente, sentei-me em uma comunidade de programadores no 
Telegram e notei um perfil muito interessante. O seguinte foi curioso - na foto principal, ele descreveu o horário atual. Eu estava muito interessado em como ele conseguiu isso e decidi a todo custo escrever o mesmo programa.
Antes disso, eu costumava trabalhar com bots Telegram usando a biblioteca 
PyTelegramBotAPI , então sugeri que essa função 
estivesse na API bot. Certamente, essa foi uma suposição idiota na minha vida, porque a foto estava na foto do perfil do 
usuário , não no bot - e logo me convenci disso, sem encontrar nenhum pré-requisito para a capacidade de alterar a foto do perfil.
Comecei a navegar na Internet e me deparei com uma ferramenta bastante conveniente - o 
teleton . Ele apenas me permitiu entrar no Telegram como 
usuário , e não como bot. Bem, acho que foi o primeiro e maior passo em direção à meta. A seguir, vejamos como recriar o "relógio" na nossa foto de perfil.
Primeiro passo Obtenha acesso ao login do Telegram a partir do código
Seguimos o 
link , digite o número de telefone, após o qual obtemos um código de confirmação. Leia mais sobre isso 
aqui . Então, temos duas coisas que são importantes para nós a partir daí - api_id e api_hash. Crie o 
arquivo config.py e digite o seguinte código:
api_id = < API_ID> api_hash = < API_HASH> 
Agora crie o arquivo 
main.py no qual escrevemos:
 from telethon import TelegramClient, sync from .config import * 
É importante que 
main.py e 
config.py estejam no mesmo nível de arquivo, ou seja, em uma pasta, caso contrário, a linha 
de .config import * apresentará um erro. A classe 
TelegramClient é exatamente o que nos permitirá fazer logon no Telegram como um usuário comum. Ainda no mesmo arquivo, escrevemos o seguinte:
 client = TelegramClient(< >, api_id, api_hash) client.start() 
Assim, podemos assumir que estamos logados no Telegram. 
NOME DA SESSÃO, você pode escolher qualquer um, a seu critério (por exemplo, 
"abacaxi" ). Então, estamos conectados ao telegrama. Agora é hora de pensar nas fotos ...
Etapa dois Crie uma fonte de tempo para fotos
Talvez esse passo tenha sido o mais fácil para mim, porque Desenvolvo vários softwares que usam a 
visão computacional há muito tempo e, portanto, trabalhar com imagens tornou-se algo comum. Tudo é simples aqui - instalamos a biblioteca 
opencv , que permite trabalhar maravilhas com fotos. Crie o arquivo 
utils.py e escreva nele:
 def convert_time_to_string(dt): return f"{dt.hour}:{dt.minute:02}" 
Precisamos dessa função para que o horário no formato 
H: MM seja indicado na foto (havia outras maneiras de fazer isso, mas eu preferi essa).
Então, começamos a criar as próprias fotos. Criamos o arquivo 
generate_time_images.py e o escrevemos:
 from .utils import * import cv2 import numpy as np from datetime import datetime, timedelta 
Essas bibliotecas devem ser suficientes para criarmos fotos com registro de data e hora. Em seguida, escrevemos uma função para obter um fundo preto, no qual escreveremos o tempo:
 def get_black_background(): return np.zeros((500, 500)) 
Agora você precisará percorrer o ciclo a cada minuto em dias e gerar uma foto indicando a hora. Crie uma pasta 
time_images com 
antecedência / onde você salvará as fotos. Então, escrevemos:
 start_time = datetime.strptime("2019-01-01", "%Y-%m-%d")  
Para criar uma coleção de fotos, só há uma coisa a fazer - execute 
generate_time_images.py . Após o início, vemos que muitas fotos apareceram na pasta 
time_images / . Você deve obter algo como estas fotos:
Etapa três Atualizando fotos a cada minuto
Telethon tem uma coisa muito conveniente - chamada 
UploadProfilePhotoRequest . Nós o importamos para o nosso 
main.py escrito anteriormente:
 from telethon.tl.functions.photos import UploadProfilePhotoRequest, DeletePhotosRequest from datetime import datetime from .utils import * 
Obviamente, não devemos atualizar o avatar a qualquer momento - basta fazê-lo uma vez por minuto. Para fazer isso, precisamos saber o momento em que o velho minuto termina e um novo começa - é nesse momento que mudaremos a foto. Escrevemos mais uma pequena função no 
utils.py :
 def time_has_changed(prev_time): return convert_time_to_string(datetime.now()) != prev_time 
Sim, sim, passamos uma string para ele com o tempo da atualização anterior do avatar. Obviamente, havia outras maneiras de implementá-lo, mas escrevi tudo com pressa, por isso não pensei muito em otimização. Continuamos a preencher nosso 
main.py :
 prev_update_time = "" while True: if time_has_changed(prev_update_time): prev_update_time = convert_time_to_string(datetime.now()) client(DeletePhotosRequest(client.get_profile_photos('me'))) file = client.upload_file(f"time_images/{prev_update_time}.jpg") client(UploadProfilePhotoRequest(file)) 
Precisamos do 
DeletePhotosRequest para excluir os avatares anteriores, para que o efeito seja criado e não adicionemos uma nova foto - ela muda por si só. Para não sobrecarregar o processador, você pode adicionar 
time.sleep (1) ao final do loop (é claro, importando o 
time.py primeiro).
Feito! Execute 
main.py e seu avatar se transformará em um relógio. Como uma opção mais original, você pode tentar alterar o texto nas fotos, por exemplo, para isso: