Apprenez à créer votre premier bot dans Telegram avec Python

Imaginez cela, il y a un robot de message qui vous enverra une image de chien mignon au hasard quand vous le souhaitez, ça sonne bien, non? Faisons un!

Pour ce didacticiel, nous allons utiliser Python 3, python-telegram-bot et l'API publique RandomDog .

À la fin de ce didacticiel, vous aurez un robot anti-stress qui vous enverra des images de chiens mignons chaque fois que vous en aurez besoin, yay!

Commencer

Avant de commencer à écrire le programme, nous devons générer un jeton pour notre bot. Le jeton est nécessaire pour accéder à l'API Telegram et installer les dépendances nécessaires.

1. Créez un nouveau bot dans BotFather

Si vous souhaitez créer un bot dans Telegram, vous devez d'abord «enregistrer» votre bot avant de l'utiliser. Lorsque nous «enregistrons» notre bot, nous obtenons le jeton pour accéder à l'API Telegram.

Accédez au BotFather (si vous l'ouvrez sur le bureau, assurez-vous que vous disposez de l'application Telegram), puis créez un nouveau bot en envoyant la /newbotcommande. Suivez les étapes jusqu'à ce que vous obteniez le nom d'utilisateur et le jeton de votre bot. Vous pouvez accéder à votre bot en accédant à cette URL: //telegram.me/YOUR_BOT_USERNAME et votre jeton devrait ressembler à ceci.

704418931:AAEtcZ*************

2. Installez la bibliothèque

Puisque nous allons utiliser une bibliothèque pour ce tutoriel, installez-la à l'aide de cette commande.

pip3 install python-telegram-bot

Si la bibliothèque est installée avec succès, nous sommes prêts à partir.

Ecrire le programme

Faisons notre premier bot. Ce bot doit renvoyer une image de chien lorsque nous envoyons la /bopcommande. Pour pouvoir faire cela, nous pouvons utiliser l'API publique de RandomDogpour nous aider à générer des images aléatoires de chiens.

Le flux de travail de notre bot est aussi simple que ceci:

accéder à l'API -> obtenir l'URL de l'image -> envoyer l'image

1. Importez les bibliothèques

Tout d'abord, importez toutes les bibliothèques dont nous avons besoin.

from telegram.ext import Updater, CommandHandler import requests import re

2. Accédez à l'API et obtenez l'URL de l'image

Créons une fonction pour obtenir l'URL. En utilisant la bibliothèque de requêtes, nous pouvons accéder à l'API et obtenir les données json.

contents = requests.get('//random.dog/woof.json').json()

Vous pouvez vérifier les données json en accédant à cette URL: //random.dog/woof.jsondans votre navigateur. Vous verrez quelque chose comme ça sur votre écran:

{“url":"//random.dog/*****.JPG"}

Obtenez l'URL de l'image car nous avons besoin de ce paramètre pour pouvoir envoyer l'image.

image_url = contents['url']

Enveloppez ce code dans une fonction appelée get_url().

def get_url(): contents = requests.get('//random.dog/woof.json').json() url = contents['url'] return url

3. Envoyez l'image

Pour envoyer un message / une image, nous avons besoin de deux paramètres, l'URL de l'image et l'ID du destinataire - cela peut être l'ID de groupe ou l'ID d'utilisateur.

Nous pouvons obtenir l'URL de l'image en appelant notre get_url()fonction.

url = get_url()

Obtenez l'identifiant du destinataire à l'aide de ce code:

chat_id = update.message.chat_id

Après avoir obtenu l'URL de l'image et l'ID du destinataire, il est temps d'envoyer le message, qui est une image.

bot.send_photo(chat_id=chat_id, photo=url)

Enveloppez ce code dans une fonction appelée bopet assurez-vous que votre code ressemble à ceci:

def bop(bot, update): url = get_url() chat_id = update.message.chat_id bot.send_photo(chat_id=chat_id, photo=url)

4. Main program

Enfin, créez une autre fonction appelée mainpour exécuter notre programme. N'oubliez pas de changerYOUR_TOKEN avec le jeton que nous avons généré plus tôt dans ce tutoriel.

def main(): updater = Updater('YOUR_TOKEN') dp = updater.dispatcher dp.add_handler(CommandHandler('bop',bop)) updater.start_polling() updater.idle() if __name__ == '__main__': main()

À la fin, votre code devrait ressembler à ceci:

from telegram.ext import Updater, InlineQueryHandler, CommandHandler import requests import re def get_url(): contents = requests.get('//random.dog/woof.json').json() url = contents['url'] return url def bop(bot, update): url = get_url() chat_id = update.message.chat_id bot.send_photo(chat_id=chat_id, photo=url) def main(): updater = Updater('YOUR_TOKEN') dp = updater.dispatcher dp.add_handler(CommandHandler('bop',bop)) updater.start_polling() updater.idle() if __name__ == '__main__': main()

5. Exécutez le programme

Impressionnant! Vous avez terminé votre premier programme. Maintenant, vérifions si cela fonctionne. Enregistrez le fichier, nommez-le main.py, puis exécutez-le à l'aide de cette commande.

python3 main.py

Accédez à votre robot de télégramme en accédant à l'adresse suivante : //telegram.me/YOUR_BOT_USERNAME. Envoyez la /bopcommande. Si tout fonctionne parfaitement, le bot répondra avec une image de chien aléatoire. Mignon, non?

Gestion des erreurs

Génial! Maintenant, vous avez un robot qui vous enverra une image de chien mignon quand vous le souhaitez.

Il y a plus! Le RandomDogAPI not only generates images, but also videos and GIFs. If we access the API and we get a video or GIF, there is an error and the bot won’t send it to you.

Let’s fix this so the bot will only send a message with an image attachment. If we get a video or GIF then we will call the API again until we get an image.

1. Match the file extension using regex

We are going to use a regex to solve this problem.

To distinguish an image from video or GIF, we can take a look at the file extension. We only need the last part of our URL.

//random.dog/*****.JPG

We need to define, first, what file extensions are allowed in our program.

allowed_extension = ['jpg','jpeg','png']

Then use the regex to extract the file extension from the URL.

file_extension = re.search("([^.]*)$",url).group(1).lower()

Using that code, make a function called get_image_url() to iterate the URL until we get the file extension that we want (jpg,jpeg,png).

def get_image_url(): allowed_extension = ['jpg','jpeg','png'] file_extension = '' while file_extension not in allowed_extension: url = get_url() file_extension = re.search("([^.]*)$",url).group(1).lower() return url

2. Modify your code

Great! Now for the last part, replace the url = get_url() line in the bop() function with url = get_image_url() , and your code should look like this:

from telegram.ext import Updater, InlineQueryHandler, CommandHandler import requests import re def get_url(): contents = requests.get('//random.dog/woof.json').json() url = contents['url'] return url def get_image_url(): allowed_extension = ['jpg','jpeg','png'] file_extension = '' while file_extension not in allowed_extension: url = get_url() file_extension = re.search("([^.]*)$",url).group(1).lower() return url def bop(bot, update): url = get_image_url() chat_id = update.message.chat_id bot.send_photo(chat_id=chat_id, photo=url) def main(): updater = Updater('YOUR_TOKEN') dp = updater.dispatcher dp.add_handler(CommandHandler('bop',bop)) updater.start_polling() updater.idle() if __name__ == '__main__': main()

Nice! Everything should run perfectly. You can also check out my GitHub account to get the code.

Finally, congratulations for finishing this tutorial, plus you have a cool Telegram bot now.

Please leave a comment if you think there are any errors in my code or writing, because I’m still learning and I want to get better.

Thank you and good luck practicing! :)