Comment créer un Bot Telegram en Python ?

Article publié le mardi 22 décembre 2020 et mis à jour le mercredi 3 juillet 2024.

Créer un Bot Telegram en Python

Vous voulez créer votre propre bot Telegram pour automatiser une ou plusieurs tâches ?

Alors ce tutoriel Python est fait pour vous !

Pour créer un bot Telegram en Python, cherchez l’utilisateur @BotFather sur l’application Telegram. Une fois la conversation lancée en appuyant sur START, envoyez lui le message /newbot. Le BotFather vous posera des questions à la suite desquelles vous récupérerez un Token pour créer votre bot.

Dans cet article, nous verrons :

  • Comment créer son propre bot Telegram pour automatiser des tâches du quotidien ?
  • Pourquoi utiliser Python pour coder son bot ?
  • Comment configurer et faire tourner un bot Python ?

Découvrons sans plus tarder comment créer votre premier Bot Telegram !

Qu’est-ce qu’un Bot Telegram ?

Un Bot Telegram est une application externe qui tourne dans Telegram. Les utilisateurs peuvent intéragir avec les bots en leur envoyant des message, des commande et d’autres requêtes. On peut utiliser son bot en envoyant des requêtes HTTPS à Telegram ou en utiliser un Wrapper.

Comment configurer un bot Telegram ?

Étape 1 : Trouver le BotFather

Le BotFather est un utilisateur de Telegram officiel qui vous permettra de créer votre bot. Pour le trouver, cherchez le dans votre application Telegram.

Botfather start

Étape 2 : Rejoindre le channel du BotFather

Rejoignez la conversation en appuyant sur START.

Botfather start

Étape 3 : Dire au BotFather qu’on veut créer un nouveau bot

Vous avez accès à plusieurs commandes, pour créer un bot tapez /newbot.

Botfather newbot

Étape 4 : Configurer son Bot Telegram

Le BotFather vous demandera le nom du channel de votre bot (pour lui c’est le BotFather) et puis un identifiant unique (pour lui c’est bot).

Botfather configuration

Étape 5 : Récupérer son Token

Et voilà ! Vous avez tout ce dont vous avez besoin (le token) pour commencer à développer votre bot.

💡 Attention : Votre token est privé et donnera accès à toutes les fonctionnalités de votre bot aux personnes à qui vous le donnez. Ce token doit donc rester secret et mis à l’abris sous peine de devoir générer un nouveau token.

Pourquoi utiliser Python pour son bot Telegram ?

Python possède un Wrapper populaire pour créer des bots Telegram sous le nom de python-telegram-bot. Avec, vous pourrez facilement communiquer avec l’API Telegram avec une classe Python.

Comment installer python-telegram-bot ?

Si vous n’avez pas l’habitude d’installer des packages Python, je vous explique comment installer python-telegram-bot proprement avec un environnement virtuel. Tout ce dont vous avez besoin est d’avoir Python3 d’installé sur votre machine.

1. Créer un Environnement Virtuel

Créer un environnement virtuel permet d’avoir un environnement par projet avec uniquement les paquets dont vous avez besoin. Essayez de prendre l’habitude de créer des venv pour chaque nouveau projet, quite à avoir un virtual env poubelle (sandbox) avec lequel vous installez plein de packages pour vos tests.

python3 -m venv bot-telegram
cd bot-telegram
source bin/activate

2. Installer python-telegram-bot

Une fois dans l’environnement virtual grace à la commande source, installons python-telegram-bot avec pip.

pip install python-telegram-bot

Et pour le reste de ce tutoriel, j’utiliserai un fichier appelé bot.py qui se trouve à la racine de bot-telegram.

Comment connecter son bot à Telegram ?

Pour relier son Bot Python à Telegram, on utilise la classe Updater qu’on importe de python-telegram-bot avec le nom telegram.ext. On lui fournit le token qu’on a reçu du BotFather.

from telegram.ext import Updater

updater = Updater('VOTRE_TOKEN', use_context=True)

Comment ajouter une commande à son bot ?

Une fois l’instance updater créée, on peut répondre à ce qui se passe dans le channel du bot à l’aide d’un dispatcher.

Du dispatcher on utilise la méthode add_handler et on crée un nouveau CommandHandler à qui on donne une commande et une fonction associée.

from telegram.ext import CommandHandler

updater.dispatcher.add_handler(CommandHandler("commande", fonction))

La fonction associée nous donne accès aux variables update et context.

Par exemple, pour écrire quelque chose quand une certaine commande est reçue, on utilise reply_text.

def fonction(update, context):
    update.message.reply_text("Un message à répondre en fonction de la commande saisie par l'utilisateur")

Gérer les messages qui ne sont pas des commandes

Pour tous les autres messages qui ne sont pas des commandes, on peut aussi définir une réponse automatique.

from telegram.ext import MessageHandler, Filters

updater.dispatcher.add_handler(MessageHandler(Filters.text, pas_compris))

En disant à l’utilisateur que nous n’avons pas compris son message. C’est aussi le bon moment de lui rappeler les commandes qui existent.

def pas_compris(update, context):
    update.message.reply_text('Je n\'ai pas compris votre message "', update.message.text, "')

Comment modifier le clavier avec Bot Telegram ?

Si vous voulez changer le clavier pour avoir plusieurs options par exemple, vous pouvez utiliser des KeyboardButton et puis les assembler avec ReplyKeyboardMarkup.

async def question(update, context):
  keyboard = [
    [KeyboardButton("Python"), KeyboardButton("Java")],
    [KeyboardButton("JavaScript"), KeyboardButton("C et C++")],
  ]

  reply_markup = ReplyKeyboardMarkup(
    keyboard=keyboard,
    resize_keyboard=True,
    one_time_keyboard=True
  )

  await update.message.reply_text("Quel est votre langage préféré ?",
                                  reply_markup=reply_markup)

Comment ajouter des boutons cliquables ?

On utilise les InlineKeyboardButton pour ajouter des liens sous forme de boutons qui sont cliquables directement dans le chat de Telegram.

Ensuite, on les assemble avec un InlineKeyboardMarkup avant de renvoyer la réponse.

Par exemple :

async def youtube(update, context):
  keyboard = [
    [InlineKeyboardButton('Python', 'https://www.youtube.com/watch?v=5EnpNI2iCZA')],
    [InlineKeyboardButton('Django', 'https://www.youtube.com/watch?v=xJNvJaLl8bU')],
    [InlineKeyboardButton('Bot Discord en Python', 'https://www.youtube.com/watch?v=vDmed9KcGRc')],
  ]

  reply_markup = InlineKeyboardMarkup(keyboard)

  await update.message.reply_text("Que voulez-vous apprendre aujourd'hui ?",
                                  reply_markup=reply_markup)

Comment faire tourner son bot Telegram ?

Une fois les comportements de notre bot définis, on “lance” le bot en faisant en sorte qu’il commence à écouter ce qui se passe avec la méthode start_polling :

updater.start_polling()

Comment couper son bot Telegram ?

Pour couper un bot Telegram, il faut lui envoyer un signal d’interruption avec le raccourci CTRL+C.

Bot Telegram complet

Mettons maintenant toutes ces pièces ensemble pour avoir un bot telegram fonctionnel au complet.

import os
from dotenv import load_dotenv
from telegram import ReplyKeyboardMarkup, KeyboardButton, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import Application, CommandHandler

load_dotenv()

token = os.getenv('TOKEN')

async def start(update, context):
  await update.message.reply_text("""Bienvenue sur le bot de Comment Coder.
Pour avoir les dernières informations, veuillez faire :
- /site pour consulter le site
- /question pour répondre à une question
- /youtube pour voir les dernières vidéos""")


async def site(update, context):
  await update.message.reply_text("Le lien du site Comment Coder est https://www.commentcoder.com")


async def question(update, context):
  keyboard = [
    [KeyboardButton("Python"), KeyboardButton("Java")],
    [KeyboardButton("JavaScript"), KeyboardButton("C et C++")],
  ]

  reply_markup = ReplyKeyboardMarkup(
    keyboard=keyboard,
    resize_keyboard=True,
    one_time_keyboard=True
  )

  await update.message.reply_text("Quel est votre langage préféré ?",
                                  reply_markup=reply_markup)


async def youtube(update, context):
  keyboard = [
    [InlineKeyboardButton('Python', 'https://www.youtube.com/watch?v=5EnpNI2iCZA')],
    [InlineKeyboardButton('Django', 'https://www.youtube.com/watch?v=xJNvJaLl8bU')],
    [InlineKeyboardButton('Bot Discord en Python', 'https://www.youtube.com/watch?v=vDmed9KcGRc')],
  ]

  reply_markup = InlineKeyboardMarkup(keyboard)

  await update.message.reply_text("Que voulez-vous apprendre aujourd'hui ?",
                                  reply_markup=reply_markup)


if __name__ == '__main__':
  app = Application.builder().token(token).build()

  app.add_handler(CommandHandler('start', start))
  app.add_handler(CommandHandler('site', site))
  app.add_handler(CommandHandler('question', question))
  app.add_handler(CommandHandler('youtube', youtube))

  app.run_polling(poll_interval=5)

Commencer faire tourner bot Telegram ?

Maintenant que la base de notre bot est finie, on peut le lancer avec la commande python bot.py.

Rejoignez le channel telegram de votre bot et essayez vos commandes, vous devriez obtenir quelque chose comme ça :

bot telegram CommentCoder 1

bot telegram CommentCoder 2

Ajoutez des fonctions à votre bot !

Vous voilà maintenant en possession du squelette d’un bot telegram écrit en Python. Pour aller plus loin, vous pouvez ajouter un système de logging qui fait partie de la bibliothèque standard de Python.

D’ailleurs, vous pouvez retrouver le code complet du Bot Telegram sur GitHub.

Plus important, votre bot doit tourner en permanence pour qu’il puisse répondre à vos utilisateurs. Pour ça il existe plusieurs solutions en fonction de vos besoins. Commentez en bas de cet article si vous voulez que je vous explique comment héberger votre Bot Instagram pour qu’il tourne en continu.

Comment Coder

Je m'appelle Thomas. J'ai commencé à coder dans mon enfance. Depuis ma sortie de la première promo de l'École 42, j'ai développé des centaines d'applications et sites web. Sur ce blog, je vous donne les meilleurs conseils et astuces pour apprendre comment apprendre à coder efficacement.