Bot Telegram simple en Python en 30 minutes

Sur Habré, et pas seulement, on a tant parlé des bots que c'est encore trop. Mais étant devenu intéressé par ce sujet il y a quelques semaines, je ne pouvais toujours pas trouver de matériel normal: tous les articles étaient soit pour les nuls et étaient limités à l'envoi d'un message en réponse à un message utilisateur, ou n'étaient pas pertinents. Cela m'a incité à écrire un article qui expliquerait à un novice comme moi comment écrire et lancer un bot plus ou moins significatif (avec la possibilité d'étendre les fonctionnalités).

Partie 1: Enregistrer un bot


La partie la plus simple et la plus décrite. Très brièvement: vous devez trouver le bot @BotFather , lui écrire / start , ou / newbot , remplir les champs qu'il demande (le nom du bot et son nom abrégé), et recevoir un message avec le token bot et un lien vers la documentation. Le jeton doit être enregistré, de préférence fiable, car c'est la seule clé pour autoriser le bot et interagir avec lui.

Partie 2: Préparation pour écrire du code


Comme déjà mentionné dans le titre, nous écrirons le bot en Python. Cet article décrit comment travailler avec la bibliothèque PyTelegramBotAPI (Telebot). Si vous n'avez pas installé Python, vous devez d'abord le faire: dans le terminal Linux, vous devez entrer

sudo apt-get install python python-pip 

Si vous utilisez Windows, vous devez télécharger Python depuis le site officiel.

Après, dans le terminal Linux ou l'invite de commande Windows, entrez

 pip install pytelegrambotapi 

Vous êtes maintenant prêt à écrire le code.

Partie 3: Recevez des messages et dites «Bonjour»


Une petite digression. Un télégramme peut informer le bot des actions de l'utilisateur de deux manières: via une réponse à une demande de serveur (Long Poll) et via Webhook, lorsque le serveur Telegram lui-même envoie un message que quelqu'un a écrit au bot. La deuxième méthode semble clairement meilleure, mais nécessite une adresse IP dédiée, et SSL est installé sur le serveur. Dans cet article, je veux parler de l'écriture d'un bot, pas de la configuration d'un serveur, nous allons donc utiliser Long Poll.

Ouvrez votre éditeur de texte préféré et écrivons le code du bot!

La première chose à faire est d'importer notre bibliothèque et de connecter le token bot:

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

Déclarez maintenant une méthode pour recevoir des messages texte:

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

Dans cette section de code, nous avons déclaré un écouteur pour les messages texte et une méthode pour les traiter. Le champ content_types peut prendre différentes valeurs, et pas seulement une, par exemple

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

Répondra aux messages texte, documents et audio. Plus de détails peuvent être trouvés dans la documentation officielle.

Maintenant, nous allons ajouter un peu de fonctionnalité à notre méthode: si l'utilisateur nous écrit "Bonjour", alors nous dirons "Bonjour, comment puis-je vous aider?", Et s'ils nous écrivent la commande "/ help", nous dirons à l'utilisateur d'écrire "Bonjour":

 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.") 

Ce morceau de code ne nécessite pas de commentaires, comme il me semble. Maintenant, nous devons ajouter une seule ligne à notre code (en dehors de toutes les méthodes).

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

Maintenant, notre bot demandera constamment au serveur Telegram "Quelqu'un m'a écrit?" Et si nous écrivons à notre bot, le Telegram lui enverra notre message. Nous enregistrons tout le fichier et écrivons dans la console

 python bot.py 

Où bot.py est le nom de notre fichier.

Vous pouvez maintenant écrire un bot et regarder le résultat:

image

Partie 4: Boutons et fils de messages


L'envoi de messages est sans aucun doute amusant, mais c'est encore plus amusant d'avoir un dialogue avec l'utilisateur: posez-lui des questions et obtenez des réponses. Supposons maintenant que notre robot demande à son tour à l'utilisateur son nom, son prénom et son âge. Pour cela, nous utiliserons la méthode register_next_step_handler du bot:

 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+'?') 

Et donc, nous avons enregistré les données utilisateur. Cet exemple montre un exemple très simplifié, pour de bon, vous devez stocker des données intermédiaires et des états utilisateur dans la base de données, mais aujourd'hui nous travaillons avec un bot et non avec des bases de données. La touche finale - nous demandons aux utilisateurs de confirmer que tout est entré correctement, mais pas seulement comme ça, mais avec des boutons! Pour ce faire, modifiez un peu le code de la méthode 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, ', '); 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) 

Et maintenant, notre robot envoie le clavier, mais si vous cliquez dessus, rien ne se passera. Parce que nous n'avons pas écrit de méthode de gestionnaire. Écrivons:

 @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": ... # 

Il ne reste plus qu'à ajouter une ligne au début du fichier:

 from telebot import types 

C'est tout, enregistrez et exécutez notre bot:

image

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


All Articles