Comment transformer votre avatar Telegram en montre

J'ai récemment siégé dans une communauté de programmeurs à Telegram et j'ai remarqué un profil très intéressant. Ce qui suit était curieux - sur la photo principale, il représentait l'heure actuelle. J'étais terriblement intéressé par la façon dont il y était parvenu et j'ai décidé à tout prix d'écrire le même programme.

image

Avant cela, je travaillais souvent avec des bots Telegram en utilisant la bibliothèque PyTelegramBotAPI , j'ai donc suggéré qu'une telle fonction se trouve dans l'API bot. Certes, c'était une hypothèse stupide dans ma vie, car la photo était sur la photo de profil de l' utilisateur , pas sur le bot - et bientôt j'en suis devenu convaincu, ne trouvant aucune condition préalable pour pouvoir changer la photo de profil.

J'ai commencé à surfer sur Internet et suis tombé sur un outil plutôt pratique - le téléthon . Il m'a juste permis d'entrer dans Telegram en tant qu'utilisateur , et non en tant que bot. Eh bien, je suppose que c'était le tout premier et le plus grand pas vers l'objectif. Ensuite, regardons comment recréer «l'horloge» sur notre photo de profil.

Première étape. Accédez à la connexion Telegram à partir du code


Nous suivons le lien , entrons le numéro de téléphone, après quoi nous obtenons un code de confirmation. En savoir plus à ce sujet ici . Donc, nous obtenons deux choses qui sont importantes pour nous à partir de là - api_id et api_hash. Nous créons le fichier config.py et y entrons le code suivant:

api_id = < API_ID> api_hash = < API_HASH> 

Créez maintenant le fichier main.py dans lequel nous écrivons:

 from telethon import TelegramClient, sync from .config import * 

Il est important que main.py et config.py soient au même niveau de fichier, c'est-à-dire dans un dossier sinon la ligne de .config import * donnera une erreur. La classe TelegramClient est exactement ce qui nous permettra de nous connecter à Telegram en tant qu'utilisateur régulier. Plus loin dans le même fichier, nous écrivons ce qui suit:

 client = TelegramClient(< >, api_id, api_hash) client.start() 

Ainsi, nous pouvons supposer que nous sommes connectés à Telegram. NOM DE SESSION, vous pouvez en choisir à votre discrétion (par exemple, "ananas" ). Donc, nous sommes connectés au télégramme. Il est maintenant temps de penser aux photos ...

Deuxième étape Créer une source de temps pour les photos


Cette étape a peut-être été la plus facile pour moi, car Je développe depuis longtemps divers logiciels qui utilisent la vision par ordinateur et, par conséquent, travailler avec des images est devenu quelque chose de banal. Tout est simple ici - nous installons la bibliothèque opencv , qui vous permet de faire des merveilles avec des photos. Créez le fichier utils.py et écrivez-le:

 def convert_time_to_string(dt): return f"{dt.hour}:{dt.minute:02}" 

Nous avons besoin de cette fonction pour que l'heure au format H: MM soit indiquée sur la photo (il y avait d'autres façons de le faire, mais j'ai préféré celle-ci).

Nous commençons donc à créer les photos elles-mêmes. Nous créons le fichier generate_time_images.py et écrivons dedans:

 from .utils import * import cv2 import numpy as np from datetime import datetime, timedelta 

Ces bibliothèques devraient nous suffire pour créer des photos horodatées. Ensuite, nous écrivons une fonction pour obtenir un fond noir, sur lequel nous écrirons l'heure:

 def get_black_background(): return np.zeros((500, 500)) 

Maintenant, vous devrez parcourir le cycle pour chaque minute en jours et générer une photo indiquant l'heure. Créez un dossier time_images à l' avance / où vous allez enregistrer les photos. Nous écrivons donc:

 start_time = datetime.strptime("2019-01-01", "%Y-%m-%d") #     end_time = start_time + timedelta(days=1) def generate_image_with_text(text): image = get_black_background() font = cv2.FONT_HERSHEY_SIMPLEX cv2.putText(image, text, (int(image.shape[0]*0.35), int(image.shape[1]*0.5)), font, 1.5, (255, 255, 0), 2, cv2.LINE_AA) return image while start_time < end_time: text = convert_time_to_string(start_time) image = generate_image_with_text(text) cv2.imwrite(f"time_images/{text}.jpg", image) start_time += timedelta(minutes=1) 

Pour créer une collection de photos, il n'y a qu'une seule chose à faire: exécutez generate_time_images.py . Après le démarrage, nous voyons que beaucoup de photos sont apparues dans le dossier time_images / . Vous devriez obtenir quelque chose comme ces photos:

image

Troisième étape Mise à jour des photos toutes les minutes


Le téléthon a une chose très pratique - appelée UploadProfilePhotoRequest . Nous l'importons dans notre main.py précédemment écrit:

 from telethon.tl.functions.photos import UploadProfilePhotoRequest, DeletePhotosRequest from datetime import datetime from .utils import * 

Bien sûr, nous ne devons pas mettre à jour l'avatar à tout moment - faites-le une fois par minute. Pour ce faire, nous devons connaître le moment où la vieille minute se termine et une nouvelle commence - c'est à ce moment que nous allons changer la photo. Nous écrivons une autre petite fonction dans utils.py :

 def time_has_changed(prev_time): return convert_time_to_string(datetime.now()) != prev_time 

Oui, oui, on lui passe une chaîne avec l'heure de la précédente mise à jour de l'avatar. Bien sûr, il y avait d'autres façons de l'implémenter, mais j'ai tout écrit à la hâte, donc je n'ai pas beaucoup pensé à l'optimisation. Nous continuons à remplir notre 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)) 

Nous avons besoin de DeletePhotosRequest pour supprimer les avatars précédents, afin que l'effet soit créé sans que nous ajoutions de nouvelle photo - elle change d'elle-même. Afin de ne pas surcharger le processeur, vous pouvez ajouter time.sleep (1) à la fin de la boucle (bien sûr, importez time.py en premier).

C'est fait! Exécutez main.py et votre avatar se transformera en horloge. Comme option plus originale, vous pouvez essayer de changer le texte des photos, par exemple, en ceci:

image

Source: https://habr.com/ru/post/fr457078/


All Articles