Telegramm - Bot | Vollständiges Menü

Bild

Früher oder später, im Leben eines Telegramm-Bot-Entwicklers, besteht ein klares Verständnis dafür, dass alles tödlich notwendig ist, um mehr oder weniger vollständige Menüs für Bots zu erstellen.

Als:

A) Es ist bequem
B) Praktisch für die Anpassung *

Natürlich hat niemand das "/ team" abgesagt, aber trotzdem

Essenz der Aufgabe


Auf den ersten Blick - die Aufgabe ist einfach, aber egal wie. Das ganze Problem liegt in der API selbst , nämlich im Update-Objekt .
Ein bisschen mehr Details: Mit der getUpdate-Methode erhalten Sie ein Update-Objekt. Das ist logisch! Dieses Objekt enthält also viele nützliche Dinge, einschließlich Informationen über die Nachricht, aber nur über die letzte. Das ist der Haken
Auf der Grundlage des oben Gesagten folgt die nicht so angenehme Schlussfolgerung: Die Bearbeitung von Anfragen per Webhook ohne Speicherung zusätzlicher Daten scheint für uns nicht ...

Nun, wir waschen uns und machen uns an die Arbeit.

Lerncode schreiben


In ihrer Praxis wurde speziell für diese Aufgabe eine kleine Klasse entwickelt.

NEU! Jetzt auf Github )

Wenn Sie nicht warten können, können Sie sofort zum Repository gehen. Dort gibt es einen Ausflug.

Weiter


Die Klasse erstellt eine Anforderungsanforderung
Ein wenig zur Struktur: Das Menü wird durch Erstellen einer Anfrage für eine Anfrage navigiert. Sie erstellen es an der richtigen Stelle und beim nächsten Benutzeranruf bam, und er befindet sich im „Menü“.
Ich stimme zu, das Konzept wurde danach nicht verständlich ... Ich werde versuchen zu klären. Um dies zu verstehen, müssen Sie zu einer bestimmten Abstraktionsebene gehen, dh stellen Sie sich vor, dass die gesamte Struktur des Bots aus verschiedenen Menüs besteht, zwischen denen der Benutzer wechselt (Sie können eine Analogie zur Android-Aktivität ziehen). Wenn der Bot aktiviert ist, befindet sich der Benutzer im "Startmenü", von dem aus er beispielsweise im Menü "Einstellungen", "Informationen" usw. aufrufen kann.

Bild

Und so ändert sich die Struktur des Bots ein wenig, kurz gesagt:

Überprüfen Sie zunächst, ob die Anforderung vorhanden ist:

JA) Führen Sie den Anforderungshandler aus
NEIN) Wir bleiben im "Startmenü", wir überprüfen die Antwort des Benutzers mit den verfügbaren Befehlen.

* Dies ist eine sehr vereinfachte Version, aus diesem Grund klopft es an die Latte. Mit Beispielen wird es einfacher.

Lass uns weitermachen ..?


Beginnen wir mit der Installation. Wir werden den Compser verwenden , um es zu installieren (erstellen Sie "composer.json", kopieren Sie dann die folgenden Zeilen hinein, lesen Sie mehr in off.docs).

{ "require" : { "s0d3s/tg-long-req": ">=1" } } 

und verbinden

 include_once('path/to/autoload.php'); use TgLongReq\TgLongReq; 

ODER manuell verbinden (in den Projektordner herunterladen)

 include_once('TgLongReq.php'); use TgLongReq\TgLongReq; 

EIN OBJEKT ERSTELLEN

 function SOMTH($tg_res, $long_req_obj, $tab_key){ echo "EveryForEveryone"; return; } $BOT_FUNC_ASSO_TAB = arrray("ECHO_SOMETHING" => "SOMTH"); // -      ,  -  -\  $tgreq = new TgLongReq ( $usr_id, //(STR) -id  $BOT_FUNC_ASSO_TAB, //(ARRAY) $BOT_req_dir , //[OPT](STR) $tapi, //[OPT](ANY*) $result //[OPT](ANY**) ); // *  ,    $this->tg_api // **  ,      

Stellen Sie eine Anfrage, überprüfen Sie die Verfügbarkeit und beginnen Sie mit der Verarbeitung

 $tgreq -> ReqCreate('SOMTH');//  if($tgreq -> ReqCheck()){ // ,   ,       $tgreq -> ReqHand();// ,   } 

VERSTECKTE UND ZEITDATEN ERHALTEN

Speichern:

 $tgreq -> SaveToTemp('HiHabr');//  ,    json- 

wiederherstellen:

 $tgreq -> GetFromTemp(false);//  -    ,    // ,    SaveToTemp() 

FUNKTIONSERGEBNIS

Es ist zu beachten, dass jede [mit Ausnahme von GetFromTemp (), GetError (), ReqCheck () und dem Konstruktor] -Funktion ein Array zurückgibt:

 /*$function_result = array( 'func_res' =>   'error' =>true,    'err_discript' => ,     ); */ 

FEHLER

Jede Funktion [mit Ausnahme von GetFromTemp (), GetError (), ReqCheck () und dem Konstruktor] setzt im Fehlerfall einen Fehler, der überprüft werden kann mit:

 $error_arr = $tgreq -> GetError(); /*$error_arr = array( 'error' =>true,    'err_discript' => ,     ); */ 

Alles versammelt, geh!


Wir gehen davon aus, dass Sie mit dem Schreiben von Telegramm-Bots nur minimal vertraut sind. Wenn nicht -% article %, lesen Sie bis zum Punkt " Schreiben des Bot-Codes " - den ersten Link in Google zu einem Thema, den Sie selbst suchen können. Die Hauptsache ist, herauszufinden, wie Sie einen Bot in tg selbst erstellen und konfigurieren ihn zu Ihrem Server. Wenn es interessant ist, schreibe ich einen Artikel darüber, wie ein Webhook für die Arbeit mit einem lokalen Server konfiguriert wird (~ NEU! Lösung zur Umgehung des "Problems" mit https).

Wir werden dieses Beispiel realisieren. Wir teilen den Raum in zwei Dateien "botmain.php" (Hauptmenü und Verarbeitung) und "varfunc.php" (Anforderungsverarbeitungsfunktionen). Zur Vereinfachung verwenden wir beispielsweise telegram-bot-sdk (ein gut gemachtes und gestaltetes Projekt, das dank des Erstellers für kleine Projekte geeignet ist;).

Im Allgemeinen Auflistung :

composer.json
 { "require" : { "irazasyed/telegram-bot-sdk": ">=3", "s0d3s/tg-long-req": ">=1", "php":">=7.1" } } 


Öffnen Sie anschließend im Projektordner die Konsole und ...

 >composer install ... 

UPD : Innerhalb der Grenzen von Habr wird der Quellcode ohne globale Bearbeitung unlesbar. Wenn Sie an Beispielen interessiert sind, empfehle ich Ihnen daher, zu Github zu wechseln.

Original | Vereinfachte Version .

Fazit


Am Ende kann ich nur sagen, dass dies nicht die einzig mögliche Lösung für dieses Problem ist, aber unter dem Gesichtspunkt der Optimalität für ME ein Favorit ist.

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


All Articles