2 Scripting-IRC
Claude edited this page 2026-05-16 12:31:27 +02:00

Scripting IRC (NoxScript)

NoxIRC dispose d'un langage de scripting personnalisé NoxScript pour automatiser des actions IRC côté serveur. Les scripts sont déclenchés par des événements IRC en temps réel.

Syntaxe

Déclaration d'événement

on <event> {
    // code exécuté à chaque déclenchement
}

Alias (commande personnalisée)

alias <nom> {
    // code
}

Variables

let x = "valeur"
let n = 42

Conditions

if $variable == "test" {
    msg #chan "c'est test"
} else {
    msg #chan "autre chose"
}

Timer (délai en secondes)

timer 5 {
    msg $chan "5 secondes passées !"
}

Variables d'événement

Accessibles avec le préfixe $ dans un handler on :

Variable Description
$nick Nick de l'utilisateur ayant déclenché l'événement
$chan Channel concerné
$message Contenu du message
$me Ton propre nick
$network Nom du réseau IRC

Commandes disponibles

Commande Syntaxe Description
msg msg <cible> <texte> Envoyer un message (channel ou nick)
notice notice <cible> <texte> Envoyer une notice IRC
kick kick <channel> <nick> [raison] Kicker un utilisateur
mode mode <channel> <modes> Changer les modes du channel
sleep sleep <secondes> Attendre
echo echo <texte> Afficher dans la console de script

Événements disponibles

Événement Variables disponibles Description
text $nick, $chan, $message Message reçu dans un channel
private $nick, $message Message privé reçu
highlight $nick, $chan, $message Mention de ton nick
join $nick, $chan Un utilisateur rejoint un channel
part $nick, $chan Un utilisateur quitte un channel

Mots-clés du langage

on, alias, if, else, timer, let


Exemples

Accueil automatique

on join {
    if $chan == "#general" {
        msg $chan "Bienvenue $nick !"
    }
}

Anti-flood basique

on text {
    if $message == "!flood" {
        kick $chan $nick "Flood interdit"
    }
}

Répondeur automatique aux messages privés

on private {
    msg $nick "Je suis absent. Réessaie plus tard."
}

Commande personnalisée

alias bonjour {
    msg $chan "Bonjour tout le monde !"
}

Timer avec action différée

on text {
    if $message == "!minuteur" {
        msg $chan "Minuteur de 10 secondes lancé !"
        timer 10 {
            msg $chan "Temps écoulé !"
        }
    }
}

Gestion des scripts

Via Paramètres → Scripts :

  1. Créer un script (nom + code)
  2. Test dry-run : simuler sans envoyer sur IRC
  3. Associer à un réseau spécifique (ou vide = tous réseaux)
  4. Activer/désactiver sans supprimer

Via l'API

# Créer
curl -X POST /api/scripts \
  -H "Authorization: Bearer <token>" \
  -d '{"name": "Accueil", "code": "on join { msg $chan \"Bienvenue $nick !\" }"}'

# Tester
curl -X POST /api/scripts/test \
  -H "Authorization: Bearer <token>" \
  -d '{"code": "...", "event": "text", "context": {"nick": "Bob", "chan": "#test", "message": "hello"}}'

Contraintes et sécurité

  • Timeout : 3 secondes max par handler
  • Validation syntaxique : au moment de la sauvegarde, code rejeté si invalide
  • Pas d'accès réseau : les scripts ne peuvent pas faire de requêtes HTTP (contrairement aux plugins)
  • Isolation : chaque script tourne dans son propre scope de variables