Added README + fixed runtime version on outdated distros

This commit is contained in:
Darks 2021-05-05 15:26:03 +02:00
parent b1eaa4ecd7
commit 49339f8c7a
Signed by: Darks
GPG Key ID: C3E0B298F7D85EAD
2 changed files with 104 additions and 1 deletions

103
README.md Normal file
View File

@ -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 `<bot>.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}")
```

View File

@ -1,4 +1,4 @@
#!/usr/bin/env python
#!/usr/bin/env python3
import sys
import time