Added README + fixed runtime version on outdated distros
This commit is contained in:
parent
b1eaa4ecd7
commit
49339f8c7a
|
@ -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}")
|
||||
```
|
Loading…
Reference in New Issue