diff --git a/README.md b/README.md new file mode 100644 index 0000000..3c9a99e --- /dev/null +++ b/README.md @@ -0,0 +1,103 @@ +# GLaDOS, le bot de la v5 + +GLaDOS est un bot dont le but est d'enrichir l'IRC avec des informations provenant de la v5. Elle peut aussi réagir à des messages envoyés depuis l'IRC. + +## Configuration + +### Identifiants + +Pour connecter un compte, il faut créer un fichier `secrets.py` contenant les identifiants du compte. Vous pouvez utiliser un compte quelconque. + +``` +# secrets.py +USER = "GLaDOS" +PASSWORD = "str0ngP@ssprh4s3" +``` + +### Instanciation du bot + +Lors de l'instanciation de la classe `Bot`, vous pouvez configurer trois paramètres. + +Le premier est le serveur IRC auquel se connecter. Il est défini par un tuple `(hostname, port)`. La connexion s'effectue obligatoirement via TLS, en utilisant le fichier `secrets.py` pour la connexion SASL (obligatoire elle-aussi). + +Le second est le serveur UDP qui écoutera les évènements en provenance de la v5. Il est défini par une adresse sur laquelle écouter (en général, `127.0.0.1` ou `0.0.0.0`) et un port. Ces paramètres sont à synchroniser avec la configuration de la v5 ([ici](https://gitea.planet-casio.com/devs/PCv5/src/branch/master/config.py#L54) pour être précis). + +Le troisième est une liste de canaux à joindre automatiquement lors de la connexion au serveur IRC. + +## Lancement + +Pour lancer le bot, exécutez simplement `main.py`. + +``` +$ ./main.py +_handle: <:irc.planet-casio.com NOTICE * :*** Looking up your hostname...> +_handle: <:irc.planet-casio.com NOTICE * :*** Found your hostname (cached)> +_handle: <:irc.planet-casio.com NOTICE Darks :Serveur réservé aux membres de Planète Casio.> +[...] +``` + +## Ajout de commandes + +### Réaction à des évènements v5 + +TBD + +### Réaction à des messages IRC + +Le bot reçoit tous les messages des canaux dans lequel il est présent. Ajouter une commande consiste à définir deux fonctions : une première qui filtre les messages, et une seconde qui exécute une action dans le cas où le filtre a laissé passer le message. + +Dans les deux cas les fonctions prennent comme paramètre un objet de la classe Message. Il est donc possible d'accéder aux propriétés suivantes : + +``` +msg.author # L'auteur du message +msg.to # Le canal sur lequel il a été envoyé +msg.text # Le contenu du message +``` + +Le filtre est passé en paramètre du décorateur de la fonction d'action. On peut utiliser une lambda pour gagner en clarté dans le cas où la condition du filtre est triviale. + +Il est possible d'envoyer des messages IRC avec la commande `.irc.send(to, message)`. Notons que `to` peut être soit un channel (préfixé par `#`), soit un utilisateur (pas de préfixe). + +Les exemples suivants ajoutent deux fonctionnalités, l'une qui réagit aux messages comprennant le mot "heure", l'autre aux messages privés à destination de GLaDOS et comprenant une insulte. + +``` +@glados.irc.on(lambda m: "heure" in m.text) +def say_time(msg): + now = datetime.now().strftime("%Hh%M") + if msg.to == "GLaDOS": + # Private message + reply_to = msg.author + elif msg.to[0] == "#": + # Message on a public channel + reply_to = msg.to + else: + # WTF we received this message??? + return + + glados.irc.send(reply_to, f"Il est très précisément {now}, {msg.from}.") + + + +def privately_insulted(msg): + insults = [ + "bachi-bouzouk", + "extrait de cornichon", + "jus de poubelle", + "patagon de zoulous" + ] + + # It's not private + if msg.to != "GLaDOS": + return False + + # It's an insult + for i in insults: + if i in msg.txt: + return True + + return False + +@glados.irc.on(privately_insulted) +def reply_insult(msg): + glados.irc.send(msg.author, "Ce n'est pas gentil, {msg.author}") +``` diff --git a/main.py b/main.py index 55a54f6..2783572 100755 --- a/main.py +++ b/main.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import sys import time