Telegrammbot in Python

Vor kurzem habe ich ein Praktikum bei einem neuen IT-Unternehmen für mich gemacht und unser Projekt (meines Teams) war ein Telegramm-Bot, der einen Teil der Arbeit von Personalmanagern automatisiert. Die erste Woche wurde uns gegeben, um alles selbst zu lernen, was wir für notwendig halten (und ich bin überzeugt, dass der beste Weg, etwas zu lernen, das Üben ist), also begann ich zu handeln. Die Programmiersprache wurde als Python gewählt (wahrscheinlich ist aus dem Cover ersichtlich, warum), daher werde ich in diesem Artikel ein Beispiel damit analysieren.





BotFather

Um einen Kabel-Bot zu erstellen, können Sie einen Benutzer @ BotFather- Befehl / newbot schreiben . Es wird nach dem Namen und @Benutzernamen für den zukünftigen Bot gefragt . Hier ist nichts kompliziertes - es sagt Ihnen alles (Hauptsache, @username ist nicht beschäftigt und endet mit "bot"). BotFather sendet ein HTTP-API-Token, mit dem wir mit dem Bot arbeiten.





Bot-Erstellung
Bot-Erstellung

Telebot und die Kraft der Python

Es schien mir immer, dass das Erstellen eines Bots nicht so einfach ist. Ehrlich gesagt wollte ich es lange versuchen, aber entweder hatte ich nicht genug Zeit (ich dachte, es würde mehr als einen Abend dauern) oder ich konnte die Technologie nicht auswählen (ich habe mir das Tutorial für c # irgendwie angesehen). aber höchstwahrscheinlich war es nur Faulheit. Aber dann brauchte ich es, um zu funktionieren, also wagte ich es nicht länger aufzuschieben.





python . , , . ( ) 6 (!) . :





import telebot
bot = telebot.TeleBot('1111105161:AAHIjyAKY4fj62whM5vEAfotuixC5syA-j8')
@bot.message_handler(commands=['start'])
def start_command(message):
    bot.send_message(message.chat.id, "Hello!")
bot.polling()
      
      



Erste Nachricht

/start, . : telebot ( pyTelegramBotAPI pip install pyTelegramBotAPI



( pip install telebot



!), , , BotFather. , ( “/start”), , , “Hello!”. , , , . - , "" .





Flask & Requests

Telebot, , , “”. , hr- (), / / . , . python - flask. , 5000- (http://localhost:5000/):





from flask import Flask
 
app = Flask(__name__)


@app.route("/", methods=["GET"])
def index():
    return "Hello, World!"
 
 
if __name__ == "__main__":
    app.run()
      
      



, . (habr), . , “Hello!” :





from flask import Flask, request
import requests

app = Flask(__name__)


def send_message(chat_id, text):
    method = "sendMessage"
    token = "1111105161:AAHIjyAKY4fj62whM5vEAfotuixC5syA-j8"
    url = f"https://api.telegram.org/bot{token}/{method}"
    data = {"chat_id": chat_id, "text": text}
    requests.post(url, data=data)


@app.route("/", methods=["POST"])
def receive_update():
    chat_id = request.json["message"]["chat"]["id"]
    send_message(chat_id, "Hello!")
    return "ok"


if __name__ == "__main__":
    app.run()
      
      



, . , . , , . telegram API setWebhook. , url, ( http://localhost:5000/). , : " localhost", localhost . , setWebhook https url-. ngrok, . ngrok, “ngrok http 5000”. :





ngrok
ngrok

setWebhook, , postman. post https://api.telegram.org/bot<>/setWebhook url. :





setWebhook
setWebhook

telebot, . , flask’e, . ? -, send_message . :





from flask import Flask, request
import telebot

app = Flask(__name__)
 
bot = telebot.TeleBot('1111105161:AAHIjyAKY4fj62whM5vEAfotuixC5syA-j8')


@app.route("/", methods=["POST"])
def receive_update():
    chat_id = request.json["message"]["chat"]["id"]
    bot.send_message(chat_id, "Hello!")
    return "ok"


if __name__ == "__main__":
    app.run()
      
      



, , , , @bot.message_handler - , (, , , . .). , flask , telebot. bot.polling(), “ ”. , - . , :





from flask import Flask, request
import telebot

bot = telebot.TeleBot('1111105161:AAHIjyAKY4fj62whM5vEAfotuixC5syA-j8')
bot.set_webhook(url="https://8c6f687b75c9.ngrok.io")
app = Flask(__name__)


@app.route('/', methods=["POST"])
def webhook():
    bot.process_new_updates(
        [telebot.types.Update.de_json(request.stream.read().decode("utf-8"))]
    )
    return "ok"


@bot.message_handler(commands=['start'])
def start_command(message):
    bot.send_message(message.chat.id, 'Hello!')


if __name__ == "__main__":
    app.run()
      
      



Hier verwenden wir die set_webhook-Methode, ähnlich wie wir es früher durch Postman gemacht haben, und auf einer leeren Route schreiben wir "ein wenig Magie", um erfolgreich Bot-Updates zu erhalten. Dies ist natürlich kein sehr guter Weg, und in Zukunft ist es besser, die Funktionalität für die Verarbeitung eingehender Nachrichten selbst zu schreiben. Aber zuerst denke ich, dass dies die beste Lösung ist.





Fazit

Es ist wirklich nicht so schwierig, einen Telegramm-Bot in Python zu schreiben, aber es gibt auch Fallstricke, über die ich in diesem Artikel zu sprechen versucht habe. Dies ist natürlich nur der Anfang, aber der letzte Code kann als Vorlage für die Serverseite verwendet werden, die mit dem Telegrammbot funktioniert. Dann bleibt nur noch die Funktionalität nach Ihrem Ermessen zu erhöhen.








All Articles