Salut à tous! J’écris encore un billet nocturne pour parler d’un petit projet que j’ai conçu depuis deux jours déjà et qui commence à prendre forme. Vous connaissez Telegram? C’est un chat qui se base sur la synchro sur plusieurs supports (PC/Terminaux mobiles/Client web), le chat en groupe ou 1-à-1, avec ou sans cryptage point-à-point pour ce dernier. Dernièrement, l’équipe a publié toute une API REST(?) pour pouvoir créer des bots facilement qui puissent intéragir avec Telegram.

Pris d’une folie Python suite à un autre projet, bien plus important pour ce site, j’ai décidé de faire un bot qui va servir le groupe dans lequel je traîne. Ne sachant pas à quoi il servira par la suite… bah je l’ai tellement rendu versatile que le code principal est devenu un projet à part entière : une librarie/API de communication avec l’API Telegram-Bot.

Le bestiau se base sur une attente d’évènements (des updates venant du serveur) qui seront dispatchés à des handlers qui s’attacheront à la classe Telegram en implémentant une ou plusieurs des fonctions qu’il peut appeler. Ainsi, un plugin qui va logger un chat va intéragir ainsi avec Telegram:

class LoggerHandler:



    def __init__(self, filename):

        try:

            self.file = open(filename, 'a')

        except IOError:

            self.file = None

            print("Couldn't open {} for log writing".format(filename))



    def on_text(self, tg, message):

        if self.file is not None:

            date = datetime.fromtimestamp(message.date)\

                .strftime('%Y-%m-%d %H:%M:%S')

            self.file.write("[{}]{} : {}\n"

                            .format(date,

                                    message.from_user.username,

                                    message.text))

            self.file.flush()



    def on_reply(self, tg, message):

        print("Reply")



    def on_sticker(self, tg, message):

        date = datetime.fromtimestamp(message.date)\

                .strftime('%Y-%m-%d %H:%M:%S')

        self.file.write("[{}]{} sent a sticker (id:{}).\n"

                        .format(date, message.from_user.username, message.sticker.file_id))

        self.file.flush()</pre> 

Notez les lignes en surbrillance : ces fonctions seront appelées par Telegram quand une update de ces types seront reçues.

Voilà, pour le moemnt, je vous laisse avec l’adresse du repo du coeur du futur bot : https://github.com/Eiyeron/telegram-bot-api/ Amusez-vous bien avec le Python!