JavaRush /Java-Blog /Random-DE /Telegram-Bot als erstes Projekt und seine Bedeutung für d...
Pavel Mironov (Miroha)
Level 16
Москва

Telegram-Bot als erstes Projekt und seine Bedeutung für die berufliche Weiterentwicklung anhand persönlicher Erfahrungen

Veröffentlicht in der Gruppe Random-DE
Grüße an alle! Erzählen Sie uns etwas über sich. Ich bin 24 Jahre alt, habe letztes Jahr mein Studium an einer technischen Universität abgeschlossen und habe noch keine Berufserfahrung. Mit Blick auf die Zukunft möchte ich sagen, dass ich ursprünglich im festgelegten Plan (erstellt im Herbst 2019) geplant hatte, im März-April 2020 zur Arbeit zu gehen, aber leider kam dazwischen die Quarantäne, sodass ich alles auf Mitte verschoben habe -Sommer und ich hoffe, in Zukunft meine eigene Erfolgsgeschichte schreiben zu können. Telegram-Bot als erstes Projekt und seine Bedeutung für die berufliche Weiterentwicklung basierend auf persönlichen Erfahrungen – 1Ich habe mich nie zum Programmieren hingezogen gefühlt. An der Universität wurde zwar genug Programmieren gelehrt, aber dieses Handwerk konnte mich damals nicht interessieren. Außerdem gab es prozedurale Sprachen (C), einen einjährigen Kurs in OOP (Java), Datenbanken, sogar Assembler und C++. Aber ehrlich gesagt war mir das Studium im Allgemeinen gleichgültig, da mir die meisten der gelehrten Disziplinen nutzlos und nur für Berichtszwecke geeignet erschienen (im Prinzip ist das so). Nach meinem Universitätsabschluss musste ich eine Entscheidung treffen: Ich habe einige Fähigkeiten nicht erworben, aber ich musste arbeiten. Ich musste darüber nachdenken, mich selbst weiterzubilden (oh, ich habe schon mindestens zwei volle Jahre verpasst, indem ich untätig herumgesessen habe) und die Wahl fiel natürlich auf Java, da einer der Jungs in einem OOP-Kurs an der Universität den Javarush-Kurs empfohlen hat , und er widmet sich, wie Sie wissen, speziell der Java-Sprache. Mich interessierte die Präsentation des Kurses. Ja, das Programmieren gefiel mir damals nicht, weil ich sofort aufgab, wenn ich auf Schwierigkeiten stieß, und es gibt mehr als genug Schwierigkeiten beim Programmieren. Aber gleichzeitig hatte ich das Gefühl, dass ich Code schreiben wollte, und so entschied ich mich schließlich für die Programmierung. Ich erzähle Ihnen kurz von meinen Erfahrungen mit Javarush. Ich habe im August 2019 angefangen, sofort ein Abonnement für einen Monat gekauft, aber auf Level 7 wurde mir klar, dass die Aufgaben schwierig waren. Ich legte den Kurs beiseite und holte Shildt ab. Parallel dazu habe ich den Kurs 3 Monate lang absolviert. Ich habe Level 20 erreicht (dies ist mein zweiter Account), habe Shildt fast vollständig gelesen und dann die Aufgaben hier satt, bei denen ich keinen praktischen Nutzen mehr für mich selbst sah. Ich ging zu Codewars und Leetcode und fing an, mir Videokurse anzusehen. Übrigens, in 3 Monaten ging ich von „Oh nein, was ist ein Array? Wie arbeitet man damit und warum ist es so beängstigend“? bis hin zu einer detaillierten Untersuchung des Quellcodes von Sammlungsklassen (ArrayList, HashMap usw.). Aus persönlicher Erfahrung sage ich Anfängern: Hier geht es vor allem darum, das Gefühl zu überwinden, das entsteht, wenn man nichts versteht und nichts lösen kann. Wenn es dazu kommt, willst du einfach alles aufgeben und es scheint, dass du dafür zu dumm bist. Wenn Sie solche Momente in sich selbst überwinden und sich geistig ausruhen, wird der Erfolg kommen. Ich denke, dass viele Menschen damit nicht zurechtkommen und daher solche Unternehmungen schnell aufgeben. Daher begann ich im Dezember 2019 über mein Projekt nachzudenken. Ich habe mich für einen Telegram-Bot entschieden, aber ich hatte keine Ahnung. Gleichzeitig benötigte ein Freund eine Funktionalität für seine Gruppe in einem Telegramm, die er gerne automatisieren würde. Er wusste nur, dass ich mich intensiv mit Programmieren beschäftigte, und bot mir ein Projekt an. Für mich, für Erfahrung und einen zukünftigen Lebenslauf, für ihn, für die Entwicklung der Gruppe. Ich erlaube mir sogar, seine Idee zu zitieren: „Недавно софтину хотел у программиста заказать, которая загружала бы в выбранное Облако файлы по прямым Verknüpfungм. Это интересно, так Wie аналогов нет. И просто очень удобно. Суть: копируешь ссылку, вставляешь в окно и выбираешь нужное Облако (GDrive, Mail, Яндекс Диск и т.п), в своё время софт всё делает на стороне Serverа и юзеру ничего не нужно загружать на свою машину (особенно круто, когда у тебя сборка на SSD-накопителях). Думали сделать в web-интерфейсе, чтобы можно было запускать Wie с телефонов, так и с десктопа... Можно в принципе через приложение реализовать, а не через web-интерфейс. Тебе такое по силам?„Ich fing an zu arbeiten, aber am Ende, nach ein paar Tagen, wurde mir klar, dass für uns nichts klappen würde, hauptsächlich aufgrund mangelnder Kenntnisse. Ein Freund brauchte dieselben Links zu Cloud.Mail, aber sie tun es immer noch nicht. Es gab keine API. Es wurde versucht, etwas über GDrive zusammenzustellen, aber die Umsetzung war lahm, außerdem passte dieser Cloud-Dienst nicht zum „Kunden“. Obwohl er zunächst mehrere Clouds zur Auswahl anbot, lehnte er letztendlich alles außer Mail ab .ru, für die keine Lösung gefunden wurde. Irgendwie stellte sich heraus, dass alles teuer war, es war notwendig, die Datenbank anzuschließen, einen Server für die Speicherung zu verwenden usw. Übrigens braucht es noch diese Webanwendung. Da die Dinge nicht funktionierten Da es für uns nicht geklappt hat, habe ich beschlossen, einen Informationsbot zu erstellen. Er sollte Links zum Spiel vom Google Play Store empfangen, den Link analysieren, die empfangenen Informationen in der Bibliothek speichern und sie dann in eine JSON-Datei schreiben. Somit kann die Bibliothek dank der Bemühungen der Benutzer mit jeder Anfrage erweitert werden. Informationen über das Spiel können Sie in Zukunft nicht mehr in bequemer Form über Google Play erhalten. Sie schreiben einfach den Befehl /libraryHere_game_name und erhalten alles, was Sie brauchen. Es gibt jedoch einige Schwierigkeiten, über die ich Ihnen später berichten werde. Zuerst kam ich langsam voran, da ich anfing, zwei SQL-Kurse gleichzeitig zu belegen. Ich konnte einfach nicht verstehen, wie der Bot überhaupt funktioniert und wie Anfragen bearbeitet werden. Ich habe einen Freund kennengelernt, der ebenfalls daran interessiert war, an dem Projekt mitzuarbeiten. Die erste Version des Bots war in etwa einem Monat fertig, es kam jedoch zu Meinungsverschiedenheiten mit einem Freund (meiner Seite). Ich habe den Teil des Bots übernommen, der für das Parsen verantwortlich ist, und er hat direkt an den Anfragen an den Bot und deren Bearbeitung gearbeitet. Aus irgendeinem Grund fing er an, den Bot zu komplizieren, eine Art Autorisierung einzuführen, Administratoren zu erfinden, unnötige Funktionen hinzuzufügen, und außerdem gefiel mir sein Codierungsstil nicht wirklich. Meiner Meinung nach war dies bei einem Informationsbot nicht notwendig. Also beschloss ich, selbst einen Bot mit der Funktionalität zu schreiben, die ich brauchte. Jetzt erzähle ich Ihnen, was der Bot eigentlich macht (anhand eines Beispiels aus dem Projektcode). Ich werde den vollständigen Code des Projekts am Ende des Artikels anhängen und kann ihn leider nicht vollständig kommentieren. Jede an den Bot gesendete Benutzernachricht ist ein Objekt der Update-Klasse. Es enthält viele Informationen (Nachrichten-ID, Chat-ID, eindeutige Benutzer-ID usw.). Es gibt verschiedene Arten von Updates: Es kann eine Textnachricht sein, es kann eine Antwort von der Telegram-Tastatur (Rückruf), ein Foto, Audio usw. sein. Um zu verhindern, dass der Benutzer zu viel herumspielt, verarbeite ich nur Textanfragen und Rückrufe über die Tastatur. Sendet der Nutzer ein Foto, teilt ihm der Bot mit, dass er damit nichts zu tun hat. In der Haupt-Bot-Klasse empfängt der Bot in der onUpdateReceived-Methode ein Update.
@Override
    public void onUpdateReceived(Update update) {
        UpdatesReceiver.handleUpdates(update);
    }
was ich an den Handler (eigene UpdatesReceiver-Klasse) übergebe:
public static void handleUpdates(Update update) {
        ...
        if (update.hasMessage() && update.getMessage().hasText()){
            log.info("[Update (id {}) типа \"Текстовое сообщение\"]", update.getUpdateId());
            new TextMessageHandler(update, replyGenerator).handleTextMessage();
        }
        else if (update.hasCallbackQuery()) {
            //логгирование
            new CallbackQueryHandler(update, replyGenerator).handleCallBackQuery();
        }
        else {
           //логгирование
            replyGenerator.sendTextMessage(update.getMessage().getChatId(), "Я могу принимать только текстовые Mitteilungen!");
        }
    }
UpdatesReceiver ist ein zentraler Handler, der je nach Art des Updates die Kontrolle an einen anderen spezialisierten Handler übergibt: TextMessageHandler oder CallbackQueryHandler, an dessen Konstruktoren ich update weiter unten in der Kette übergebe. Das Update ist das Wichtigste bei der Arbeit mit einem Bot und kann nicht verloren gehen, denn mithilfe der im Update gespeicherten Informationen finden wir heraus, an welchen Benutzer und an welchen Chat die Antwort gesendet werden soll. Um Antworten an den Benutzer zu generieren, habe ich eine separate Klasse geschrieben. Es kann normale Textnachrichten, Nachrichten mit integrierter Tastatur, Nachrichten mit Bildern und Nachrichten mit Antworttastatur senden. Eine Inline-Tastatur sieht so aus: Telegram-Bot als erstes Projekt und seine Bedeutung für die berufliche Weiterentwicklung basierend auf persönlichen Erfahrungen – 1Sie definiert Schaltflächen, bei deren Anklicken der Benutzer einen Rückruf an den Server sendet, der fast genauso wie normale Nachrichten verarbeitet werden kann. Um es zu „pflegen“, benötigen Sie einen eigenen Handler. Wir legen für jede Schaltfläche eine Aktion fest, die dann in das Update-Objekt geschrieben wird. Diese. Für den Button „Kosten“ setzen wir die Beschreibung „/Preis“ für den Rückruf, die wir später aus dem Update erhalten können. Als nächstes kann ich in einer separaten Klasse diesen Callback bereits verarbeiten:
public void handleCallBackQuery() {
  String call_data = update.getCallbackQuery().getData();
  long message_id = update.getCallbackQuery().getMessage().getMessageId();
  long chat_id = update.getCallbackQuery().getMessage().getChatId();
    switch (call_date){
      case "/price" :
        //тут что-то сделать
        break;
...
Die Reply-Tastatur sieht so aus: Telegram-Bot als erstes Projekt und seine Bedeutung für die berufliche Weiterentwicklung basierend auf persönlichen Erfahrungen – 2Und im Wesentlichen ersetzt sie das Tippen des Benutzers. Durch Klicken auf die Schaltfläche „Bibliothek“ wird schnell eine „Bibliothek“-Nachricht an den Bot gesendet. Für jeden Tastaturtyp habe ich meine eigene Klasse geschrieben und das Builder-Muster implementiert: inline und Reply . Dadurch können Sie im Wesentlichen die gewünschte Tastatur entsprechend Ihren Anforderungen „zeichnen“. Das ist unheimlich praktisch, da die Tastaturen zwar unterschiedlich sind, das Prinzip aber das gleiche bleibt. Hier ist eine intuitive Methode zum Senden einer Nachricht mit einer Inline-Tastatur:
public synchronized void sendInlineKeyboardMessage(long chat_id, String gameTitle) {
        SendMessage keyboard = InlineKeyboardMarkupBuilder.create(chat_id)
                .setText("Вы может узнать следующую информацию об игре " + gameTitle)
                .row()
                .button("Стоимость " + "\uD83D\uDCB0", "/price " + gameTitle)
                .button("Обновлено " + "\uD83D\uDDD3", "/updated " + gameTitle)
                .button("Версия " + "\uD83D\uDEE0", "/version " + gameTitle)
                .endRow()
                .row()
                .button("Требования " + "\uD83D\uDCF5", "/requirements " + gameTitle)
                .button("Покупки " + "\uD83D\uDED2", "/iap " + gameTitle)
                .button("Размер " + "\uD83D\uDD0E", "/size " + gameTitle)
                .endRow()
                .row()
                .button("Получить всю информацию об игре" + "\uD83D\uDD79", "/all " + gameTitle)
                .endRow()
                .row()
                .button("Скрыть клавиатуру", "close")
                .endRow()
                .build();
        try {
            execute(keyboard);
        } catch (TelegramApiException e) {
            log.error("[Не удалось отправить сообщение с -inline- клавиатурой]: {}", e.getMessage());
        }
    }
Um dem Bot eine strenge Funktionalität zu verleihen, wurden spezielle Befehle erfunden, die den Schrägstrich verwenden: /library, /help, /game usw. Andernfalls müssten wir jeglichen Müll verarbeiten, den der Benutzer möglicherweise schreibt. Eigentlich wurde MessageHandler dafür geschrieben:
if (message.equals(ChatCommands.START.getDescription())) {
     replyGenerator.sendTextMessage(chat_id, new StartMessageHandler().reply());
     replyGenerator.sendReplyKeyboardMessage(chat_id);
}
else if (message.equals(ChatCommands.HELP.getDescription())
             || message.equalsIgnoreCase("Помощь")) {
      replyGenerator.sendTextMessage(chat_id, new HelpMessageHandler().reply());
}
 ...
Je nachdem, welchen Befehl Sie an den Bot senden, wird also ein spezieller Handler in die Arbeit einbezogen. Gehen wir weiter und schauen wir uns die Arbeit des Parsers und der Bibliothek an. Wenn Sie dem Bot einen Link zu einem Spiel im Google Play Store senden, wird automatisch ein spezieller Handler aktiviert . Als Antwort erhält der Benutzer Informationen über das Spiel in folgender Form: Telegram-Bot als erstes Projekt und seine Bedeutung für die berufliche Weiterentwicklung basierend auf persönlichen Erfahrungen – 3Gleichzeitig wird eine Methode aufgerufen, die versucht, das Spiel zur Bibliothek des Bots hinzuzufügen (zuerst zur lokalen Karte, dann zur -> JSON-Datei). ). Befindet sich das Spiel bereits in der Bibliothek, wird eine Prüfung durchgeführt (wie bei einer regulären Hashmap) und wenn sich die Felddaten (z. B. die Versionsnummer) geändert haben, wird das Spiel in der Bibliothek überschrieben. Wenn keine Änderungen festgestellt werden, werden keine Einträge vorgenommen. Wenn in der Bibliothek überhaupt kein Spiel vorhanden war, wird es zuerst auf die lokale Karte (ein Objekt wie tyk ) und dann in eine JSON-Datei geschrieben, da die Daten gelöscht werden, wenn die Anwendung auf dem Server unerwartet geschlossen wird verloren, kann aber jederzeit über die Datei gelesen werden. Tatsächlich wird die Bibliothek beim Programmstart immer zum ersten Mal aus einer Datei aus einem statischen Block geladen:
static {
        TypeFactory typeFactory = mapper.getTypeFactory();
        MapType mapType = typeFactory.constructMapType(ConcurrentSkipListMap.class, String.class, GooglePlayGame.class);

        try {
            Path path = Paths.get(LIBRARY_PATH);
            if (!Files.exists(path)) {
                Files.createDirectories(path.getParent());
                Files.createFile(path);
                log.info("[Файл библиотеки создан]");
            }
            else {
                ConcurrentMap<string, googleplaygame=""> temporary = mapper.readValue(new File(LIBRARY_PATH), mapType);
                games.putAll(temporary);
                log.info("[Количество игр в загруженной библиотеке] = " + games.size());
            }
        }
        catch (IOException e) {
            log.error("[Ошибка при чтении/записи Datei] {}", e.getMessage());
        }
    }
Hier müssen Sie zusätzlich Daten aus der Datei in eine temporäre Karte einlesen, die dann in eine vollständige Karte „kopiert“ wird, um bei der Suche nach einem Spiel in der Datei die Groß-/Kleinschreibung zu wahren (durch Schreiben von tITan QuEST wird der Bot trotzdem finden). das Spiel Titan Quest in der Bibliothek). Eine andere Lösung konnte nicht gefunden werden, das sind die Merkmale der Deserialisierung mit Jackson. Bei jeder Anfrage nach einem Link wird das Spiel also nach Möglichkeit zur Bibliothek hinzugefügt und die Bibliothek dadurch erweitert. Weitere Informationen zu einem bestimmten Spiel erhalten Sie mit dem Befehl /libraryGame_Name. Sie können sowohl einen bestimmten Parameter (zum Beispiel die aktuelle Version) als auch alle Parameter auf einmal herausfinden. Dies wird über die zuvor besprochene Inline-Tastatur implementiert. Während der Arbeit habe ich die hier erworbenen Fähigkeiten auch bei der Lösung von Problemen angewendet. Zum Beispiel eine Liste mit Namen von Zufallsspielen, die sich in der Bibliothek befinden (die Option ist mit dem Befehl /library verfügbar):
private String getRandomTitles(){
        if (LibraryService.getLibrary().size() < 10){
            return String.join("\n", LibraryService.getLibrary().keySet());
        }
        List<string> keys = new ArrayList<>(LibraryService.getLibrary().keySet());
        Collections.shuffle(keys);
        List<string> randomKeys = keys.subList(0, 10);
        return String.join("\n", randomKeys);
    }
Wie verarbeitet der Bot Links? Es prüft, ob sie zu Google Play gehören (Host, Protokoll, Port):
private static class GooglePlayCorrectURL {

        private static final String VALID_HOST = "play.google.com";

        private static final String VALID_PROTOCOL = "https";

        private static final int VALID_PORT = -1;

        private static boolean isLinkValid(URI link) {
            return (isHostExist(link) && isProtocolExist(link) && link.getPort() == VALID_PORT);
        }

        private static boolean isProtocolExist(URI link) {
            if (link.getScheme() != null) {
                return link.getScheme().equals(VALID_PROTOCOL);
            }
            else {
                return false;
            }
        }

        private static boolean isHostExist(URI link) {
            if (link.getHost() != null) {
                return link.getHost().equals(VALID_HOST);
            }
            else {
                return false;
            }
        }
Wenn alles in Ordnung ist, verbindet sich der Bot über einen Link mit der Jsoup-Bibliothek, wodurch Sie den HTML-Code der Seite abrufen können, der einer weiteren Analyse und Analyse unterzogen wird. Sie können den Bot nicht mit einem falschen oder schädlichen Link täuschen.
if (GooglePlayCorrectURL.isLinkValid(link)){
     if (!link.getPath().contains("apps")){
         throw new InvalidGooglePlayLinkException("К сожалению, бот работает исключительно с играми. Введите другую ссылку.");
     }
     URL = forceToRusLocalization(URL);
     document = Jsoup.connect(URL).get();
 }
     else {
         throw new NotGooglePlayLinkException();
      }
...
Hier mussten wir ein Problem mit regionalen Einstellungen lösen. Der Bot stellt von einem Server in Europa eine Verbindung zum Google Play Store her, sodass die Seite im Google Play Store in der entsprechenden Sprache geöffnet wird. Ich musste eine Krücke schreiben, die zwangsweise zur russischen Version der Seite „umleitet“ (das Projekt war schließlich an unser Publikum gerichtet). Dazu müssen Sie am Ende des Links sorgfältig den Parameter hl: &hl=ru in die GET-Anfrage an den Google Play-Server einfügen .
private String forceToRusLocalization(String URL) {
        if (URL.endsWith("&hl=ru")){
            return URL;
        }
        else {
            if (URL.contains("&hl=")){
                URL = URL.replace(
                        URL.substring(URL.length()-"&hl=ru".length()), "&hl=ru");
            }
            else {
                URL += "&hl=ru";
            }
        }
        return URL;
    }
Nach einer erfolgreichen Verbindung erhalten wir ein HTML-Dokument, das zur Analyse und Analyse bereit ist. Dies würde jedoch den Rahmen dieses Artikels sprengen. Der Parser-Code ist hier . Der Parser selbst ruft die notwendigen Informationen ab und erstellt ein Objekt mit dem Spiel, das später bei Bedarf der Bibliothek hinzugefügt wird. <h2>Zusammenfassend</h2>Der Bot unterstützt mehrere Befehle, die bestimmte Funktionen enthalten. Es empfängt Nachrichten vom Benutzer und ordnet sie seinen Befehlen zu. Wenn es sich um einen Link oder den Befehl /game + link handelt, prüft es, ob dieser Link zu Google Play gehört. Wenn der Link korrekt ist, verbindet er sich über Jsoup und empfängt das HTML-Dokument. Dieses Dokument wird basierend auf dem geschriebenen Parser analysiert. Aus dem Dokument werden die notwendigen Informationen zum Spiel extrahiert und anschließend das Objekt mit dem Spiel mit diesen Daten gefüllt. Als nächstes wird das Objekt mit dem Spiel im lokalen Speicher abgelegt (sofern das Spiel noch nicht vorhanden ist) und sofort in eine Datei geschrieben, um Datenverlust zu vermeiden. Ein in der Bibliothek aufgezeichnetes Spiel (der Name des Spiels ist der Schlüssel für die Karte, das Objekt mit dem Spiel ist der Wert für die Karte) kann mit dem Befehl /library Game_name abgerufen werden. Wenn das angegebene Spiel in der Bibliothek des Bots gefunden wird, erhält der Benutzer eine Inline-Tastatur zurück, mit der er Informationen über das Spiel erhalten kann. Wenn das Spiel nicht gefunden wird, müssen Sie entweder sicherstellen, dass der Name richtig geschrieben ist (er muss bis auf die Groß-/Kleinschreibung vollständig mit dem Namen des Spiels im Google Play Store übereinstimmen) oder das Spiel durch Senden des Bots zur Bibliothek hinzufügen ein Link zum Spiel. Ich habe den Bot auf Heroku bereitgestellt und für diejenigen, die in Zukunft planen, ihren eigenen Bot zu schreiben und ihn kostenlos auf Heroku zu hosten, werde ich ein paar Empfehlungen zur Lösung der Schwierigkeiten geben, auf die Sie möglicherweise stoßen (da ich selbst auf sie gestoßen bin). Leider wird die Bot-Bibliothek aufgrund der Natur von Heroku ständig einmal alle 24 Stunden „zurückgesetzt“. Mein Plan unterstützt das Speichern von Dateien auf Heroku-Servern nicht, daher ruft er meine Spieldatei einfach von Github ab. Es gab mehrere Lösungen: Verwenden Sie eine Datenbank oder suchen Sie nach einem anderen Server, der diese Datei mit dem Spiel speichert. Ich habe beschlossen, vorerst nichts zu unternehmen, da der Bot im Grunde genommen nicht so nützlich ist. Ich brauchte es eher, um eine umfassende Erfahrung zu sammeln, und das ist im Grunde das, was ich erreicht habe. Also, Empfehlungen für Heroku:
  1. Wenn Sie in Russland leben, müssen Sie sich höchstwahrscheinlich über ein VPN bei Heroku registrieren.

  2. Im Stammverzeichnis des Projekts müssen Sie eine Datei ohne Erweiterung namens Procfile ablegen. Der Inhalt sollte so aussehen: https://github.com/miroha/Telegram-Bot/blob/master/Procfile

  3. Fügen Sie in pom.xml die folgenden Zeilen entsprechend dem Beispiel hinzu, wobei im mainClass-Tag der Pfad zur Klasse angegeben wird, die die Hauptmethode enthält: bot.BotApplication (wenn sich die BotApplication-Klasse im Bot-Ordner befindet).

  4. Erstellen Sie kein Projekt mit MVN-Paketbefehlen usw., Heroku stellt alles für Sie zusammen.

  5. Es empfiehlt sich, dem Projekt einen Gitignore hinzuzufügen, zum Beispiel diesen:

    # Log file
    *.log
    
    # Compiled resources
    target
    
    # Tests
    test
    
    # IDEA files
    .idea
    *.iml
  6. Laden Sie das Projekt tatsächlich auf Github hoch und verbinden Sie dann das Repository mit Heroku (oder verwenden Sie andere Methoden, es gibt drei davon, wenn ich mich nicht irre).

  7. Wenn der Download erfolgreich war („Build erfolgreich“), gehen Sie unbedingt zu „Dynos konfigurieren“:

    Telegram-Bot als erstes Projekt und seine Bedeutung für die berufliche Weiterentwicklung basierend auf persönlichen Erfahrungen – 4

    und schalten Sie den Schieberegler um und stellen Sie dann sicher, dass er auf ON steht (da ich dies nicht getan habe, hat mein Bot nicht funktioniert und ich habe mir ein paar Tage lang den Kopf zerbrochen und viele unnötige Bewegungen gemacht ).

  8. Verstecken Sie den Bot-Token auf Github. Dazu müssen Sie das Token aus der Umgebungsvariablen abrufen:

    public class Bot extends TelegramLongPollingBot {
    
        private static final String BOT_TOKEN = System.getenv("TOKEN");
    
        @Override
        public String getBotToken() {
            return BOT_TOKEN;
        }
    ...
    }

    Und dann, nachdem Sie den Bot bereitgestellt haben, legen Sie diese Variable im Heroku-Dashboard auf der Registerkarte „Einstellungen“ fest (rechts neben TOKEN befindet sich ein WERT-Feld, kopieren Sie den Token Ihres Bots dorthin):

    Telegram-Bot als erstes Projekt und seine Bedeutung für die berufliche Weiterentwicklung basierend auf persönlichen Erfahrungen – 5
Insgesamt habe ich in den zwei Monaten, in denen ich an meinem eigenen Projekt gearbeitet habe:
  • ein voll funktionsfähiges, in Java geschriebenes Projekt erhalten;
  • gelernt, mit der API eines Drittanbieters (Telegram Bot API) zu arbeiten;
  • In der Praxis habe ich mich tiefer mit der Serialisierung beschäftigt, viel mit JSON und der Jackson-Bibliothek gearbeitet (anfangs habe ich GSON verwendet, aber es gab Probleme damit);
  • Ich habe meine Fähigkeiten im Umgang mit Dateien gestärkt und mich mit Java NIO vertraut gemacht.
  • habe den Umgang mit Konfigurations-XML-Dateien gelernt und mich an die Protokollierung gewöhnt;
  • verbesserte Kenntnisse in der Entwicklungsumgebung (IDEA);
  • lernte, mit Git zu arbeiten und lernte den Wert von Gitignore kennen;
  • erlangte Kenntnisse im Parsen von Webseiten (Jsoup-Bibliothek);
  • erlernte und nutzte mehrere Entwurfsmuster;
  • entwickelte ein Gespür und den Wunsch, Code zu verbessern (Refactoring);
  • Ich habe gelernt, Lösungen online zu finden und mich nicht zu scheuen, Fragen zu stellen, auf die ich keine Antwort finden konnte.
Telegram-Bot als erstes Projekt und seine Bedeutung für die berufliche Weiterentwicklung basierend auf persönlichen Erfahrungen – 7Ich weiß nicht, wie nützlich oder nutzlos der Bot war oder wie hübsch/hässlich der Code war, aber die Erfahrung, die ich gemacht habe, war es auf jeden Fall wert. Ich fühlte mich für mein Projekt verantwortlich. Hin und wieder möchte ich es verbessern, etwas Neues hinzufügen. Als ich es ausführen konnte und sah, dass alles so funktionierte, wie ich es wollte, war das ein echter Nervenkitzel. Ist das nicht die Hauptsache? Genießen Sie, was Sie tun, und genießen Sie jede funktionierende Codezeile wie den letzten Schokoriegel. Wenn Sie also das Programmieren beherrschen, dann mein Rat an Sie: Bleiben Sie hier nicht bis Level 40, sondern starten Sie so früh wie möglich mit Ihrem eigenen Projekt. Falls es jemanden interessiert, der Quellcode des Projekts ist hier (für Spring neu geschrieben): https://github.com/miroha/GooglePlayGames-TelegramBot In den letzten zwei Monaten habe ich, wie mir scheint, kaum neues Material studiert dass ich in einer Sackgasse angekommen bin. Ohne Arbeit sehe ich nicht mehr, wo ich mich weiterentwickeln kann, außer vielleicht, um das Spring Framework zu lehren, was ich im nächsten Monat vorhabe. Und dann werde ich versuchen, den Bot mithilfe dieses Frameworks „umzuschreiben“. Bereit, alle Fragen zu beantworten. :) Allen viel Glück! UPDATE vom 07.07.2020 Das Repository mit dem Bot in reinem Java ging verloren (ich habe es gelöscht, eine Kopie verblieb auf einem anderen lokalen Rechner), aber ich habe den neu geschriebenen Bot für Spring Boot heruntergeladen: https://github.com/miroha /GooglePlayGames-TelegramBot
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION