So verwandeln Sie Ihren Telegramm-Avatar in eine Uhr

Ich habe kürzlich in einer Community von Programmierern in Telegram gesessen und ein sehr interessantes Profil festgestellt. Das Folgende war merkwürdig - auf dem Hauptfoto zeigte er die aktuelle Zeit. Ich war schrecklich interessiert daran, wie er dies erreicht hat, und ich habe mich um jeden Preis entschieden, dasselbe Programm zu schreiben.

Bild

Vorher habe ich oft mit Telegramm-Bots unter Verwendung der PyTelegramBotAPI- Bibliothek gearbeitet, daher habe ich vorgeschlagen, dass eine solche Funktion in der Bot-API enthalten ist. Sicherlich war dies eine dumme Annahme in meinem Leben, weil Das Foto befand sich auf dem Profilbild des Benutzers , nicht des Bots - und bald war ich davon überzeugt und fand keine Voraussetzungen für die Möglichkeit, das Profilfoto zu ändern.

Ich begann im Internet zu surfen und stieß auf ein ziemlich praktisches Tool - Telethon . Er erlaubte mir nur, Telegram als Benutzer und nicht als Bot einzugeben. Nun, ich denke, es war der allererste und größte Schritt in Richtung Ziel. Schauen wir uns als nächstes an, wie Sie die „Uhr“ in unserem Profilbild neu erstellen.

Erster Schritt. Erhalten Sie Zugriff auf die Telegramm-Anmeldung über den Code


Wir folgen dem Link , geben die Telefonnummer ein und erhalten einen Bestätigungscode. Lesen Sie hier mehr darüber. Von dort erhalten wir also zwei Dinge, die uns wichtig sind - api_id und api_hash. Wir erstellen die Datei config.py und geben dort den folgenden Code ein:

api_id = < API_ID> api_hash = < API_HASH> 

Erstellen Sie nun die Datei main.py , in die wir schreiben:

 from telethon import TelegramClient, sync from .config import * 

Es ist wichtig, dass sich main.py und config.py auf derselben Dateiebene befinden, d. H. in einem Ordner, andernfalls gibt die Zeile von .config import * einen Fehler aus. Die TelegramClient- Klasse ermöglicht es uns, uns als regulärer Benutzer bei Telegram anzumelden. Weiter schreiben wir in die gleiche Datei folgendes:

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

Daher können wir davon ausgehen, dass wir bei Telegram angemeldet sind. SITZUNGSNAME Sie können nach eigenem Ermessen eine beliebige auswählen (z. B. "Ananas" ). Wir sind also mit dem Telegramm verbunden. Jetzt ist es Zeit, über die Fotos nachzudenken ...

Schritt zwei Erstellen Sie eine Zeitquelle für Fotos


Vielleicht war dieser Schritt für mich der einfachste, weil Ich habe lange Zeit verschiedene Software entwickelt, die Computer Vision verwendet, und daher ist die Arbeit mit Bildern etwas Alltägliches geworden. Hier ist alles einfach - wir installieren die opencv- Bibliothek, mit der Sie mit Fotos Wunder wirken können. Erstellen Sie die Datei utils.py und schreiben Sie sie ein:

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

Wir benötigen diese Funktion, damit die Zeit im Format H: MM auf dem Foto angezeigt wird (es gab andere Möglichkeiten, dies zu tun, aber ich habe diese bevorzugt).

Also fangen wir an, die Fotos selbst zu erstellen. Wir erstellen die Datei generate_time_images.py und schreiben hinein:

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

Diese Bibliotheken sollten ausreichen, um Fotos mit Zeitstempel zu erstellen. Als nächstes schreiben wir eine Funktion, um einen schwarzen Hintergrund zu erhalten, auf den wir die Zeit schreiben werden:

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

Jetzt müssen Sie den Zyklus jede Minute in Tagen durchlaufen und ein Foto mit der Uhrzeit erstellen. Erstellen Sie im Voraus einen Ordner time_images, in dem Sie die Fotos speichern. Also schreiben wir:

 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) 

Um eine Sammlung von Fotos zu erstellen, müssen Sie nur noch etwas ausführen: generate_time_images.py ausführen. Nach dem Start sehen wir, dass viele Fotos im Ordner time_images / erschienen sind . Sie sollten so etwas wie diese Fotos bekommen:

Bild

Schritt drei Fotos jede Minute aktualisieren


Telethon hat eine sehr praktische Sache - UploadProfilePhotoRequest . Wir importieren es in unsere zuvor geschriebene main.py :

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

Natürlich sollten wir den Avatar zu keinem Zeitpunkt aktualisieren - machen Sie es einfach einmal pro Minute. Dazu müssen wir den Moment kennen, in dem die alte Minute endet und eine neue beginnt - in diesem Moment werden wir das Foto ändern. Wir schreiben noch eine kleine Funktion in utils.py :

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

Ja, ja, wir übergeben eine Zeichenfolge mit dem Zeitpunkt der vorherigen Aktualisierung des Avatars. Natürlich gab es auch andere Möglichkeiten, es zu implementieren, aber ich habe alles in Eile geschrieben, sodass ich nicht viel über Optimierung nachdachte. Wir füllen weiterhin unsere 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)) 

Wir benötigen DeletePhotosRequest , um frühere Avatare zu löschen, damit der Effekt entsteht, dass wir kein neues Foto hinzufügen - es ändert sich von selbst. Um den Prozessor nicht zu überlasten, können Sie time.sleep (1) am Ende der Schleife hinzufügen ( natürlich zuerst time.py importieren).

Fertig! Wenn Sie main.py ausführen, wird Ihr Avatar zu einer Uhr. Als originellere Option können Sie versuchen, den Text auf den Fotos folgendermaßen zu ändern:

Bild

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


All Articles