Azzurra IRC Network Forum

Sentinelle: Cosa sono e Come si creano

BuDuS · 15/08/2007 23:38 · #1
Proverò a spiegare nel modo più semplice e conciso possibile cosa sono e come si creano le Sentinelle.

Le sentinelle sono un sistema con il quale lo script consente all'utente di eseguire determinate operazioni al verificarsi di un determinato evento.

Ad esempio un evento può essere quando qualcuno entra in un canale, viene cambiata una modalità, qualcuno scrive una frase, si riceve un kick e così via, in sintesi: un evento rappresenta ciò che può succedere su IRC, in una chat.

Ogni evento porta con se quelli che potremmo definire come "dati caratteristici", ad esempio immaginiamo un OP che esegue un KICK su un utente. Supponiamo che l'OP abbia nickname Budus e la "vittima" si chiami paperino. Budus digita un comando IRC come questo:
/KICK paperino togliti dai piedi !Con i privilegi adeguati, un comando come questo provoca il KICK di paperino dal canale con un il messaggio "togliti dai piedi !".
Ecco quindi che, come "dati caratteristici", abbiamo almeno questi:
Il nickname dell'utente che ha eseguito il KICK
Il nickname dell'utente che ha subito il KICK
l'Hostname dell'utente che ha subito il KICK (è importante se di mezzo c'è un KICKBAN piuttosto che un semplice KICK)
Il nome del canale
il nome del server IRC
il messaggio (eventuale) che spiega la ragione del KICKAd ognuno di questi dati potremmo, per comodità, dare un nome, un po' come si fa nei programmi con le variabili, cioè si da un nome ad un "contenitore di dati" che può assumere un valore.
Per "chiarezza", giusto per non confondere queste "variabili", stabiliamo anche che il loro nome dovrà sempre iniziare con il carattere $ , così sappiamo distinguere quando sono variabili o quando invece effettivamente semplici parole.
Ad esempio:
$lu sarà il nickname di chi esegue il KICK
$ru sarà il nickname di chi lo subisce
$rhost l'Hostname dell'utente KICKATO
$channel potrebbe essere il nome del canale
$server lo associamo al nome del server IRC
$data conterrà il testo con il motivo del KICKIl KICK è di per se un evento, cioè un'azione che si può compiere in chat.
Supponiamo di voler creare una Sentinella che, quando ad essere "KICKATO" è l'utente locale, cioè noi stessi, lo script reagisca in un certo modo, non so, un re-join automatico del canale dal quale si è stati espulsi, tanto per iniziare.
Potremmo quindi dire che vogliamo una sentinella come questa:
ogni volta che viene eseguito un KICK e $nick è uguale a $lu esegui un re-join
La variabile $nick non l'ho elencata sopra, ma rappresenta sempre il nickname dell'utente locale.

Ecco, noi sappiamo che questa "sentinella" dovrà agire in suddette condizioni; per comodità, proviamo a scomporla in quelli che sono i suoi componenti principali:
"ogni volta" rappresenta QUANTE volte la nostra sentinella dovrà intervenire; in questo caso abbiamo sostanzialmente "sempre", ma potrebbero verificarsi situazioni dove ci torna comodo che agisca solo 2 o 3 volte o 1 sola. Sostanzialmente abbiamo definito il numero di ripetizioni.
"KICK" rappresenta il nostro evento . La sentinella sarà presa in considerazione solo quando da qualche parte c'è almeno un KICK, qualsiasi altra operazione sarà ignorata.
"$nick è uguale a $lu" è la nostra condizione, ovvero, ok che controlliamo tutti i KICK che vengono eseguiti, ma interveniamo esclusivamente solo quando questa condizione è soddisfatta. $nick abbiamo detto che è una variabile e rappresenta il "nickname dell'utente locale" mentre $ru è colui che lo subisce. Se coincidono, significa proprio che è l'utente localde ad aver subito l'azione !
"re-join" è l'azione che vogliamo compiere quando la condizione viene soddisfatta.BuDuScRiPt fornisce il comando /event add per creare sentinelle e quest'ultimo accetta i parametri citati qui sopra nel seguente modo:
RIPETIZIONE EVENTO CONDIZIONE AZIONE
La RIPETIZIONE possiamo definirla mettendo il numero 0 (zero) per identificare quando vogliamo che sia sempre valutata la condizione (ciò avviene solo se l'evento corrisponde a quello che si è effettivamente verificato), un numero superiore a 0 (da 1 in sù) per definire quante volte dovrà essere valutata (quindi mettendo 3 otteniamo che al massimo l'azione verrà eseguita al verificarsi di 3 evento+condizione soddisfatti) mentre inserendo il carattere '?' otterremo che nel momento in cui la sentinella verrà soddisfatta, dopo che l'azione sarà eseguita, si auto-eliminerà.
L'EVENTO è una parola chiave associato ad una operazione IRC, e in BuDuScRiPt abbiamo:
jserver quando si entra in un server
jchannel quando si entra in un canale o lo fanno altri
pchannel quando si esce da un canale o lo fanno altri
pserver quando si esce da un server o lo fanno altri

kick quando viene eseguito un kick
who quando viene eseguito un who
chgnick quando si cambia nickname o lo fanno altri
text quando altri scrivono qualcosa nel canale
badword quando si scrive una parolaccia o lo fanno altri

query quando altri ci scrivono in query
ctcp quando si riceve un CTCP
mode quando viene eseguito un mode

flood quando altri superano l'anti-flood
notify quando si riceve una NOTIFICA
all qualsiasi evento gestito (tutti quelli precedenti)
La CONDIZIONE va scomposta in "costante=variabile" oppure "costante!variabile" ('!' rappresenta il "non uguale").
L'AZIONE è sempre un comando IRC o BuDuScRiPt; nel nostro caso un "/join #nomecanale".Ora, la RIPETIZIONE noi sappiamo che dev
[lo snapshot dell'Archive si interrompe qui: il messaggio e' incompleto]