Well, you found me. Congratulations. Was it worth it?
Go to file
Darks ee3fc0a75f
Added better logging system
2021-05-06 14:09:49 +02:00
.gitignore Better PoC 2020-11-08 01:41:33 +01:00
README.md Added README + fixed runtime version on outdated distros 2021-05-05 15:26:03 +02:00
bot.py Improved the API 2020-11-11 13:46:05 +01:00
irc.py Added better logging system 2021-05-06 14:09:49 +02:00
main.py Added better logging system 2021-05-06 14:09:49 +02:00
v5.py Added better logging system 2021-05-06 14:09:49 +02:00

README.md

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 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}")