Einfacher Telegramm-Bot in Python in 30 Minuten

Auf Habré, und nicht nur das, wurde so viel über Bots gesagt, dass es sogar zu viel ist. Nachdem ich mich vor ein paar Wochen für dieses Thema interessiert hatte, konnte ich immer noch kein normales Material finden: Alle Artikel waren entweder für Dummies gedacht und beschränkten sich darauf, eine Nachricht als Antwort auf eine Benutzernachricht zu senden, oder waren irrelevant. Dies veranlasste mich, einen Artikel zu schreiben, der einem Anfänger wie mir erklärt, wie man einen mehr oder weniger aussagekräftigen Bot schreibt und startet (mit der Möglichkeit, die Funktionalität zu erweitern).

Teil 1: Registrieren Sie einen Bot


Der einfachste und am meisten beschriebene Teil. Ganz kurz: Sie müssen den @ BotFather- Bot finden, ihm / start oder / newbot schreiben, die von ihm angeforderten Felder ausfüllen (den Namen des Bots und seinen Kurznamen) und eine Nachricht mit dem Bot-Token und einem Link zur Dokumentation erhalten. Das Token muss gespeichert werden, vorzugsweise zuverlässig, da dies der einzige Schlüssel ist, um den Bot zu autorisieren und mit ihm zu interagieren.

Teil 2: Vorbereitung zum Schreiben von Code


Wie bereits im Titel erwähnt, werden wir den Bot in Python schreiben. In diesem Artikel wird beschrieben, wie Sie mit der PyTelegramBotAPI-Bibliothek (Telebot) arbeiten. Wenn Sie Python nicht installiert haben, müssen Sie dies zuerst tun: Im Linux-Terminal müssen Sie eingeben

sudo apt-get install python python-pip 

Wenn Sie Windows verwenden, müssen Sie Python von der offiziellen Website herunterladen.

Geben Sie anschließend im Linux-Terminal oder an der Windows-Eingabeaufforderung ein

 pip install pytelegrambotapi 

Jetzt können Sie den Code schreiben.

Teil 3: Empfangen Sie Nachrichten und sagen Sie "Hallo"


Ein kleiner Exkurs. Ein Telegramm kann den Bot auf zwei Arten über Benutzeraktionen informieren: durch eine Antwort auf eine Serveranforderung (Long Poll) und über Webhook, wenn der Telegrammserver selbst eine Nachricht sendet, die jemand an den Bot geschrieben hat. Die zweite Methode sieht deutlich besser aus, erfordert jedoch eine dedizierte IP-Adresse, und SSL ist auf dem Server installiert. In diesem Artikel möchte ich über das Schreiben eines Bots und nicht über das Einrichten eines Servers sprechen, daher werden wir Long Poll verwenden.

Öffnen Sie Ihren bevorzugten Texteditor und schreiben Sie den Bot-Code!

Als erstes müssen Sie unsere Bibliothek importieren und das Bot-Token verbinden:

 import telebot; bot = telebot.TeleBot('% %'); 

Deklarieren Sie nun eine Methode zum Empfangen von Textnachrichten:

 @bot.message_handler(content_types=['text']) def get_text_messages(message): 

In diesem Codeabschnitt haben wir einen Listener für Textnachrichten und eine Methode zu deren Verarbeitung deklariert. Das Feld content_types kann unterschiedliche Werte annehmen und nicht nur einen

 @bot.message_handler(content_types=['text', 'document', 'audio']) 

Reagiert auf Textnachrichten, Dokumente und Audio. Weitere Details finden Sie in der offiziellen Dokumentation.

Jetzt fügen wir unserer Methode eine kleine Funktionalität hinzu: Wenn der Benutzer "Hallo" an uns schreibt, sagen wir "Hallo, wie kann ich Ihnen helfen?". Wenn er uns den Befehl "/ help" schreibt, weisen wir den Benutzer an, "Hallo" zu schreiben:

 if message.text == "": bot.send_message(message.from_user.id, ",     ?") elif message.text == "/help": bot.send_message(message.from_user.id, " ") else: bot.send_message(message.from_user.id, "   .  /help.") 

Dieser Code erfordert keine Kommentare, wie es mir scheint. Jetzt müssen wir unserem Code nur eine Zeile hinzufügen (außerhalb aller Methoden).

 bot.polling(none_stop=True, interval=0) 

Jetzt wird unser Bot den Telegrammserver ständig fragen: "Hat mir jemand geschrieben?" Und wenn wir an unseren Bot schreiben, sendet das Telegramm ihm unsere Nachricht. Wir speichern die gesamte Datei und schreiben in die Konsole

 python bot.py 

Wobei bot.py der Name unserer Datei ist.

Jetzt können Sie einen Bot schreiben und sich das Ergebnis ansehen:

Bild

Teil 4: Schaltflächen und Nachrichtenthreads


Das Senden von Nachrichten macht zweifellos Spaß, aber es macht noch mehr Spaß, einen Dialog mit dem Benutzer zu führen: Stellen Sie ihm Fragen und erhalten Sie Antworten darauf. Angenommen, unser Bot fragt den Benutzer jetzt nach seinem Vor- und Nachnamen und seinem Alter. Dazu verwenden wir die register_next_step_handler-Methode des Bots:

 name = ''; surname = ''; age = 0; @bot.message_handler(content_types=['text']) def start(message): if message.text == '/reg': bot.send_message(message.from_user.id, "  ?"); bot.register_next_step_handler(message, get_name); #  –  get_name else: bot.send_message(message.from_user.id, ' /reg'); def get_name(message): #  global name; name = message.text; bot.send_message(message.from_user.id, '   ?'); bot.register_next_step_handler(message, get_surnme); def get_surname(message): global surname; surname = message.text; bot.send_message('  ?'); bot.register_next_step_handler(message, get_age); def get_age(message): global age; while age == 0: #    try: age = int(message.text) #,     except Exception: bot.send_message(message.from_user.id, ', '); bot.send_message(message.from_user.id, ' '+str(age)+' ,   '+name+' '+surname+'?') 

Und so haben wir die Benutzerdaten aufgezeichnet. Dieses Beispiel zeigt ein sehr vereinfachtes Beispiel. Sie müssen zwischendurch Zwischendaten und Benutzerstatus in der Datenbank speichern, aber heute arbeiten wir mit einem Bot und nicht mit Datenbanken. Der letzte Schliff - wir bitten die Benutzer zu bestätigen, dass alles korrekt eingegeben wurde, aber nicht nur so, sondern mit Schaltflächen! Bearbeiten Sie dazu den Methodencode get_age ein wenig

 def get_age(message): global age; while age == 0: #    try: age = int(message.text) #,     except Exception: bot.send_message(message.from_user.id, ', '); keyboard = types.InlineKeyboardMarkup(); #  key_yes = types.InlineKeyboardButton(text='', callback_data='yes'); # «» keyboard.add(key_yes); #    key_no= types.InlineKeyboardButton(text='', callback_data='no'); keyboard.add(key_no); question = ' '+str(age)+' ,   '+name+' '+surname+'?'; bot.send_message(message.from_user.id, text=question, reply_markup=keyboard) 

Und jetzt sendet unser Bot die Tastatur, aber wenn Sie darauf klicken, passiert nichts. Weil wir keine Handler-Methode geschrieben haben. Schreiben wir:

 @bot.callback_query_handler(func=lambda call: True) def callback_worker(call): if call.data == "yes": #call.data  callback_data,       .... #  ,    bot.send_message(call.message.chat.id, ' : )'); elif call.data == "no": ... # 

Es bleibt nur eine Zeile an den Anfang der Datei anzuhängen:

 from telebot import types 

Das ist alles, speichern Sie unseren Bot und führen Sie ihn aus:

Bild

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


All Articles