Telegram bot en Python

Récemment, j'ai obtenu un stage dans une nouvelle société informatique pour moi-même et notre projet (de mon équipe) était un robot de télégramme qui automatise une partie du travail des gestionnaires des ressources humaines. La première semaine nous a été consacrée à l'auto-apprentissage de tout ce que nous jugeons nécessaire (et je suis convaincu que la meilleure façon d'apprendre quelque chose est la pratique), alors j'ai commencé à agir. Le langage de programmation a été choisi python (il est probablement clair dans la couverture pourquoi), donc dans cet article, j'analyserai un exemple avec.





BotFather

Pour créer un cable-bot, vous pouvez écrire une commande utilisateur @BotFather / newbot . Il demandera le nom et le @username du futur bot. Rien de compliqué ici - il vous dit tout (l'essentiel est que @username n'est pas occupé et se termine par "bot"). BotFather enverra un jeton d'API HTTP, que nous utiliserons pour travailler avec le bot.





Création de bot
Création de bot

Telebot et la puissance de python

Il m'a toujours semblé que créer un bot n'était pas si simple. Honnêtement, je voulais essayer depuis longtemps, mais soit je n'avais pas assez de temps (je pensais que cela prendrait plus d'une soirée), soit je ne pouvais pas choisir la technologie (j'ai en quelque sorte regardé le tutoriel pour c #), mais très probablement, c'était juste de la paresse. Mais ensuite, j'en avais besoin pour fonctionner, alors je n'ai plus osé le remettre à plus tard.





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()
      
      



Premier message

/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()
      
      



Ici, nous utilisons la méthode set_webhook, similaire à la façon dont nous l'avons fait plus tôt via postman, et sur une route vide, nous écrivons "un peu de magie" pour recevoir avec succès les mises à jour du bot. Bien sûr, ce n'est pas un très bon moyen, et à l'avenir, il est préférable d'écrire vous-même la fonctionnalité de traitement des messages entrants. Mais d'abord, je pense que c'est la meilleure solution.





Conclusion

Ce n'est vraiment pas si difficile d'écrire un robot de télégramme en python, mais il y a aussi des pièges dont j'ai essayé de parler dans cet article. Bien sûr, ce n'est que le début, mais le dernier morceau de code peut être utilisé comme modèle pour le côté serveur, qui fonctionnera avec le robot de télégramme. Ensuite, il ne reste plus qu'à augmenter la fonctionnalité à votre discrétion.








All Articles