G u i d a    d i    B u D u S c R i P t
BuDuScRiPt è un plugin per XChat, cioè un "pezzo di programma" che, una volta caricato in memoria (ciò avviene in automatico se lo si è installato opportunamente), aggiunge al client tutta una serie di funzionalità aggiuntive. Ogni comportamento o funzionalità del plugin è utilizzabile sia attraverso i menu a tendina, sia attraverso la riga dei comandi (cioè dove si scrive normalmente per chattare). Il comportamento del plugin è personalizzabile configurando opportunamente le sue "variabili interne", mentre le funzionalità sono disponibili attraverso l'uso di sottocomandi (o comunque da menu). Ogni "variabile interna" è modificabile attraverso una parola chiave (o dal menu BuDuScRiPt -> Preferenze) e ha sempre un "valore di default", cioè un valore preimpostato in origine. Digitando il comando /budus si ottiene:
  • La lista delle Parole Chiave necessarie per modificare le Variabili Interne.
  • La lista dei Comandi.
  • La lista delle Guide Speciali.

Modificando il valore delle "variabili interne" si ottiene una corrispondente modifica del comportamento del plugin, ma solo per la sessione corrente. Chiudendo XChat e riaprendolo, comunque il plugin viene configurato ai valori presenti nel file di configurazione (~/.xchat2/buduscript/budusrc) o, se non presente, a quelli di default.

E' quindi necessario, se si desidera che la configurazione rimanga la stessa ai successivi ri-avvii di XChat, salvarla tramite il comando /budus save. Se invece si è modificata la configurazione ma il risultato non soddisfa e si vuole tornare alla situazione originale, è possibile usare il comando /budus read, che carica quella salvata su disco. Infine, usando il comando /budus var reset è possibile configurare tutte le variabili al proprio valore di default (però attenzione al fatto che lo stato non viene salvato, è temporaneo, solo per la sessione corrente, va salvato se si vuole renderlo permanente).
L'elenco delle variabili, il valore attuale ed una breve descrizione è ottenibile attraverso /budus var

Per utilizzare gli aspetti piu' potenti e avanzati del plugin è possibile usare il comando /budus help advanced; vengono proposti i "comandi interni" del plugin, i quali consentono di modificare il comportamento degli aspetti più delicati e le funzioni necessarie per accedere a parti del plugin o del client di basso livello (cioè cose normalmente non usate per quanto riguarda l'esperienza in chat).

Il software consente l'utilizzo di "Comandi Decisionali", ovvero comandi che eseguono un'operazione nel caso in cui una determinata condizione sia soddisfatta. Questo tipo di comandi offre la possibilità di usare delle "Funzioni Avanzate" che permettono di ottenere informazioni sullo stato del Clien/Script e di manipolarle; per ottenere la guida specifica (comprensiva di numerosi esempi) usare il comando /budus help function.

Il plugin è dotato di un sistema che consente di eseguire delle azioni al verificarsi di una determinata condizione; ad esempio reagire in qualche modo quando si entra in un canale o lo fa un altro, quando qualcuno scrive una certa parola, ecc.....
Questo sistema si chiama Events Manager ed è utilizzabile attraverso il comando /event.

Di seguito sono riportate tre sezioni che esplicano l'uso rispettivamente delle "variabili interne", dei comandi del plugin normali e avanzati e i comandi per la gestione dell'Events Manager



V ar i a b i l i
Parola Chiave
Variabile d'Ambiente
Valore di Default
Descrizione

audiodevice psAudioDevice /dev/audio Permette di stabilire il path del file che il plugin deve verificare prima di eseguire un evento sonoro; se il file specificato (che deve essere il device audio, o comunque un link simbolico ad esso) risulta occupato, il programma evitera' di eseguire l'evento sonoro. Se il device specificato è la parola chiave "ALSA", lo script la interpreta come il desiderio di utilizzare il Driver ALSA e quindi si comporterà di conseguenza (insieme allo script egrave; fornito un software - udaplaysound - che si interfaccia con ALSA).

awaymessage iFlagAwayMessage 1 Consente di inibire la risposta automatica che il plugin emette quando, in stato di AWAY, l'utente locale viene nominato o riceve una QUERY.

awaypostfix psAwayPostfix _AWAY Permette di stabilire il postfisso da applicare al nickname quando l'utente locale va in stato di AWAY.

alert iFlagBeep 1 Stabilisce se devono essere emessi o meno i segnali acustici per avvertire l'utente che si e' verificato un determinato evento (per default sono abilitati).

badword iFlagBadWord 1 Stabilisce se il sistema che intercetta quando un utente scrive una "parola proibita" (o comunque quando possiede un "nickname proibito") deve essere attivo o meno.

badwordmsg iFlagBadWordMessage 1 Stabilisce se il messaggio di avvertimento emesso quando un utente scrive una "parola proibita" deve essere emesso.

budusmsg iFlagBudusMsg 1 Stabilisce se devono essere emessi o meno i "Messaggi Pubblicitari" del plugin (per default sono abilitati).

clonecount iMaxCloneCount 10 Permette di impostare il numero massimo di Cloni da visualizzare; puo' risultare utile in un canale dove siano presenti molti cloni in modo da limitare l'output del Clone Detector (potrebbe diventare fastidioso piu' che utile). Tuttavia, quando il sistema intercetta più di "iMaxCloneCount / 3" utenti aventi medesimo dominio, evita di segnalarli, perchè li tratta come "domini virtuali" (su alcuni server IRC c'è la possibilità per gli utenti - ad esempio gli admin dei canali - di personalizzarsi il dominio ed, avendolo uguale a molti altri, verrebbero intercettati come cloni anche se effettivamente non lo sono); questo può comportare che se il limite è fissato a 10 ed un utente ha più di 3 cloni, non venga segnalato. 
Per default vengono visualizzati un massimo di 10 Cloni. 
Ex: /budus clonecount 30

clonedetect iFlagCloneDetect 1 Abilita (default) o Diabilita il Clone Detector. Questa peculiarita' dello script permette di essere avvisati, quando si entra in un canale, di tutti i possibili Cloni presenti. 
Il monitoring avviene anche per gli utenti che entrano in un secondo tempo o che cambiano nick.

cloneprint iFlagPrintClone 0 Determina se l'output del comando /budus clone deve essere Privato (default) o pubblico (cioe' nella finestra corrente tramite dei /say)

color iFlagColor 1 Determina se la colorazione delle decorazioni deve essere Attiva o meno; puo' risultare utile disattivarla laddove i colori non siano bene accetti.

ctcp iFlagCTCPAnswer 1 Consente di IGNORARE tutti i messaggi CTCP in entrata, provenienti da qualsiasi utente, non consentendo al software XChat di rispondere. Per default accetta (e risponde con la versione di BuDuScRiP alle prime 3 richieste da parte di un utente, dopodiche' lo ignora in automatico) tutti i messaggi CTCP in entrata (1).

ctcptime tCTCPFloodTimer 1 E' il tempo che deve trascorrere tra la ricezione di un messaggio CTCP e l'altro prima che venga disattivato in automatico qualsiasi tipo di risposta per limitare il DoS dovuto al Flood (cioe' la ricezione troppo ravvicinata di molti messaggi) Per default il plugin prevede che se si ricevono piu' di 5 messaggi in 3 secondi (quest'ultimo e' il valore modificabile) e' da considerarsi CTCP flood..

currenttab iFlagCurrentTab 1 Quando questa variabile e' impostata a 1, tutti i messaggi di errore/avvertimento vengono inviati alla "tabella" corrente (comportamento predefinito); se viene impostata a 0, il plugin, a seconda del contesto nel quale si e' generato l'avvertimento, inviera' il messaggio alla relativa "tabella".

debug iFlagDebugMode 0 Permette di abilitare la scrittura nel file ~/.xchat/buduscript/budus.dbg di informazioni necessarie per eseguire un debug sul motore del plugin sfruttando i messaggi ricevuta dal server prima dell'eventuale crash del plugin stesso. 
Per default e' disabilitato ( 0 ) ma puo' risultare utile abilitarlo nel caso in cui il programma risulti instabile; sara' poi necessario contattare la UDA'Software per fornirgli suddetto file in modo che possa correggere eventuali errori.

dm iFlagDomainMonitoring 1 Stabilisce se l'utente deve essere avvisato quando vengono intercettati degli utenti appartenenti ad un Dominio "Interessante" (vedere comando /budus list per ulteriori informazioni).

error iFlagErrorMessage 0 Stabilisce se il plugin deve emettere i messaggi di errore o avvertimento meno importanti; in genere servono solo in fase di debug e quindi risultano fastidiosi ad un uso "normale". E' consigliato abilitare questa opzione nel caso in cui si verifichino dei problemi.

eventdebug iFlagEventsManagerDebug 0 Per default l'evento TEXT dell'Events Manager viene generato solo da ciò che scrivono gli utenti remoti; in altri termini, non è possibile per l'utente locale far reagire una sentinella scrivendo in locale. Questa variabile consente di modificare questo comportamento, facendo generare l'evento TEXT anche per ciò che viene scritto localmente. Questo consente di testare le sentinelle che devono reagire all'evento TEXT. Inoltre, l'abilitazione di questa variabile, comporta che ogni evento generato andrà a generare messaggi di aiuto che fanno capire all'utente se e come lavorano le sentinelle create.

filter iFlagFilterSystem 1 Stabilisce se il filtro di censura deve essere attivo o meno (vedere anche /budus help filterfile per ulteriori informazioni).

identifycmd psIdentifyCommand /MSG NickServ Identify Consente di specificare il comando che lo script deve usare per identificare l'utente locale, quando quest'ultimo torna dallo stato di AWAY ("/away" e "/budus away"); se viene impostato a null (cioe' non si specifica nulla), l'auto-identificazione non sara' eseguita. La password utilizzata e' la medesima utilizzata per collegarsi al server.

ignoreprint iFlagIgnoreMessage 1 Stabilisce se, quando vengono usati i comandi /budus ignore e /budus unignore, deve essere notificata l'azione intrapresa con un messaggio ACTION nella finestra corrente.

language psMessageLanguage italiano Permette di configurare in quale lingua devono essere generati tutti i messaggi in uscita, sia pubblici che privati. 
Il comando si aspetta di trovare un file ./xchat/budus_italiano.msg al fine di caricare in memoria tutti i messaggi di testo generati dal software stesso; per gli utenti non italiani sono disponibili .xchat/buduscript/budus_deutsch.msg (/budus language deutsch), .xchat/buduscript/budus_english.msg (/budus language english), .xchat/buduscript/budus_espanol.msg (/budus language espanol) e .xchat/buduscript/budus_francais.msg (/budus language francais). 
Suddetti files sono modificabili con qualsiasi editor di testi; cio' significa che, oltre alla possibilita' di crearsi un file nella lingua desiderata, e' anche possibile personalizzarsi quelli gia' presenti.

listprint iFlagPrintList 1 Determina se la Lista degli Utenti presenti nel canale corrente (comando names) deve essere stampata in modo "Pubblico" (cioe' visibile da tutti i presenti nel canale - opzione di default) o solo dall'utente in forma "privata".

jm iFlagNickJoinMonitoring 1 Stabilisce se l'utente deve essere avvisato tramite Messaggio di Avvertimento quando in un canale entra un utente avente il nick corrispondente (anche parzialmente) a quelli contenuti nel file lista ~/.xchat/buduscript/budus.nik .

log iFlagLogFile 0 Determina se il file di log deve essere abilitato; questa opportunita' permette di salvare tutti i dati ricevuti in Input dal Server IRC e trasmessi in Outupt dal client (ad esempio per salvare una discussione). 
Il file di log Generale (cioe' non appartenente a nessun server) viene salvato in ~/.xchat/buduscript/budus.log e non viene mai eliminato dal plugin, il quale si limita ad Accodare i dati tra una sessione e l'altra; discorso analogo per i files di log relativi ad ogni singolo server: non vengono mai eliminati e hanno un nome del tipo ~/.xchat/buduscript/server.log dove server rappresenta il nome del server relativo. 
Per default e' disabilitato ( 0).

logadvanced iFlagAdvancedLog 0 Determina la tipologia del file di log; il file di log diventa univoco per tutti i servers (~/.xchat/buduscript/budus.log) e il formato del file e' composto da records (ogni riga un record) i cui campi, separati da carattere di tabulazione, rispettano la seguente formattazione (tra parentesi tonde i nomi dei campi): (PID_OF_PROCESS)_(PROCESS_TIME) (MESSAGE_TYPE) (MESSAGE_DATE) (HOSTNAME) (SERVERNAME) (LOCAL_NICKNAME) (LOCAL_HOSTNAME) (CHANNEL) (SENDER_NICKNAME) (SENDER_HOSTNAME) (RECEIVING_NICKNAME) (RECEIVING_HOSTNAME) (DATA)

maxchar iMaxMessageChar 256 Stabilisce il numero massimo di caratteri che si possono spedire (verso il Server IRC) nel caso in cui il textfloodout (iFlagTextFloodOutgoing) sia abilitato. Nel caso in cui il limite venga superato il messaggio viene automaticamente troncato alla lunghezza massima consentita. Lo stesso valore determina anche il parametro con il quale l'anti-flood genera l'evento FLOOD dell'Events Manager.

maxquery iMaxQueryMSGFlood 8 E' il numero massimo di messaggi che si possono ricevere in QUERY (sia dallo stesso utente che da utenti diversi) nell'arco di un secondo. Nel caso venga superato suddetto limite il plugin disabilita in automatico la ricezione delle QUERY per almeno 20 secondi al fine di evitare l'apertura di troppe "finestre" nel caso si tratti di un "Attacco" da parte di un "LaMeR".

maxsent iMaxMessageSent 2 Stabilisce il numero massimo di messaggi che si possono spedire (verso il Server IRC) nell'arco di tempo stabilito dalla variabile minsecond (tMinSecondSent) nel caso in cui il textflood (iFlagTextFloodOutgoing) sia abilitato. Nel caso in cui il limite venga superato il client viene addormentato per 5 secondi. Lo stesso valore determina anche il parametro con il quale l'anti-flood genera l'evento FLOOD dell'Events Manager.

minsecond tMinSecondSent 6 Stabilisce il numero minimo di secondi che devono trascorrere dopo l'invio (verso il Server IRC) del quantitativo di messaggi stabilito nella variabile maxsent (iMaxMessageSentSecond) prima che avvenga un "Text Flood" (che potrebbe causare la disconnessione dal server); perche' il controllo sia attivo e' necessario abilitare la variabile textflood (iFlagTextFloodOutgoing). Nel caso in cui il limite venga superato il client viene addormentato per 5 secondi. Lo stesso valore determina anche il parametro con il quale l'anti-flood genera l'evento FLOOD dell'Events Manager.

mmsg iFlagMonitoringMessage 1 Permette di inibire gli avvisi testuali eseguiti dal plugin al verificarsi di un evento monitorato; la variabile non influisce anche sugli avvisi acustici, che dipendono invece dal comando /budus alert.

mode iFlagLocalUserModeChg 1 Abilita la risposta automatica al cambio di modalita' dell'utente locale eseguita da un Operatore Remoto.

nick iFlagNickBeep 1 Abilita il segnale acustico quando in un canale o in una QUERY viene nominato il nome dell'utente locale corrispondente.

pipecommand psPipeCommand /ECHO  Permette di configurare il comando utilizzato da /budus pipe per visualizzare l'output del risultato della chiamata al sistema operativo. Lo stesso comando sarà utilizzato dal "Clone Detector", quando la variabile "cloneprint" vale 1, per elencare gli eventuali cloni intercettati.

postfix psPostfixOutput Permette di specificare un Testo da mettere come Postfisso ad ogni messaggio spedito; omettendo il parametro viene impostato a (null). Si sconsiglia l'uso di questa modalità

prefix psPrefixOutput Permette di specificare un Testo da mettere come Prefisso ad ogni messaggio spedito; omettendo il parametro viene impostato a (null). Si sconsiglia l'uso di questa modalità

pkallow iPKAllowOnTimeout 0 Per default il "Private Killer System" censura i messaggi privati che, alla richiesta se devono essere censurati o meno, ne vedono scadere il timeout; questa variabile consente di lasciarli passare ugualmente.

pkmsg iPrivateKillerMessage 2 Il "Private Killer System", quando decide autonomamente se abilitare o negare un messaggio proveniente da un altro utente - e ciò, chiaramente, avviene comunque in base ad una precedente scelta dell'utente -, emette dei messaggi di avvertimento, ed in particolare:
  • Se la variabile è impostata a "2" emette tutti i messaggi.
  • Se la variabile è impostata a "1" emette solo quelli dove comunica gli utenti che vengono censurati.
  • Se la variabile è impostata a "0" non emette messaggi (sconsigliato).
.

pktime iPrivateKillerAlert 8 Determina se il "Private Killer System" deve essere abilitato (ad un valore 0 (zero) corrisponde "disabilitato") e, a seconda del valore numerico impostato, il numero di secondi che il sistema deve attendere prima di negare in automatico il messaggio privato ricevuto.
Il "Private Killer System" è lo strumento offerto dallo script che consente di abilitare/negare in automatico i messaggi privati (QUERY, NOTICE, INVITE, ecc...) provenienti da terzi; il sistema sfrutta una "whitelist" contenente i nickname/hostname degli utenti che saranno abilitati in automatico ed una "blacklist" che invece contiene quelli negati in automatico.
Se un utente invia un messaggio privato e non appartiene a nessuna di queste due liste, ecco che viene richiesto di scegliere se "Abilitare", "Abilitare in modo permanente", "Negare" e "Negare in modo permanente". Allo scadere dei secondi specificati, il sistema da per scontata la risposta "Negare" e, di conseguenza, invia al mittente un auto-messaggio che lo invita a contattare pubblicamente e non in forma privata. Nel caso in cui l'utente locale scriva un messaggio privato ad un utente che era stato precedentemente inserito nella "blacklist", quest'ultimo sarà automaticamente rimosso e, alla sua eventuale risposta, sarà nuovamente chiesto il da farsi. Il sistema consente inoltre di abilitare/negare in automatico interi servers/canali; in questo modo, tutti gli utenti appartenenti subiranno la medesima impostazione, salvo non venga specificatamente configurato diversamente per uno o più di essi. Vedere il menu Comandi Utente => Private Killer System.

pkversion iPKIgnoreCTCPVersion 1 Alcuni server/canali, all'atto del collegamento/join, effettuano un controllo sulla versione del Client IRC utilizzato al fine di verificare che non si tratta di BOT, SPAMMER, VIRUS, ecc... Se il sistema "Private Killer System" è attivo, questi messaggi vengono intercettati e, se il server/utente che ha inviato la richiesta non risulta abilitato o comunque scade il tempo di timeout per rispondere sul da farsi, vengono censurati e questo può comportare, da parte del richiedente, l'interpretazione come un atto ostile, teso a nascondere informazioni. Per evitare questo comportamento è possibile abilitare (per default lo è) questa variabile, in modo che la richiesta sia lasciata passare senza controlli da parte del "Private Killer System".

query iFlagQueryBeep 1 Abilita il segnale acustico quando viene aperta una QUERY.

textfloodin iFlagTextFloodIncoming 0 Abilita/disabilita la gestione dei textflood in entrata. (per default e' disattivo)

textfloodout iFlagTextFloodOutgoing 0 Abilita/disabilita la gestione dei textflood in uscita. (per default e' disattivo)

textflooderr iFlagTextFloodError 1 Abilita/disabilita i messaggi di errore del sistema anti-flood, per segnalare quando un utente, locale o remoto, supera i limiti impostati. (per default e' attivo)

setaway iFlagAwaySystem 1 Abilita/Disabilita il sistema che permette al plugin di rinominare il nickname dell'utente locale quando cambia stato di AWAY (AWAY/BACK) e rispondere in automatico agli utenti remoti che lo contattano in QUERY.

soundtime tSoundCommandTimer 5 Permette di configurare il tempo minimo, espresso in secondi, che deve trascorrere tra l'emissione di un segnale acustico e l'altro quando il plugin deve avvertire l'utente che si e' verificata una condizione "monitorata". 
Per default non viene emesso piu' di un segnale ogni 5 secondi; per modificare questo valore usare la sintassi: 
Ex: /budus soundtime 3

C o m a n d i
Parola Chiave
Parametro
Descrizione

allsess <comando> Esegue il <comando> specificato in tutte le sessioni attive (canali, query). 
Ex: /budus allsess /budus ver

alluser <comando> Esegue il <comando> specificato per tutti gli utenti presenti nel Canale Corrente; affinche' il <comando> venga eseguito su tutti gli utenti e' necessario che al suo interno sia presente la stringa $nick, la quale, e' una Variabile che verra' sostituita con i vari nicks. 
Ex: /budus alluser /msg $nick Ciao

away [testo] Commuta l'utente locale in stato di AWAY in tutti i server ai quali e' connesso. [testo] e' l'eventuale motivazione. 
Ex: /budus away sono a mangiare
Ex: /budus away


ATTENZIONE: la sintassi utilizzata nella seconda riga di esempio puo' servire per andare in AWAY con il messaggio impostato di default (configurazione di XChat), oppure, se gia' si era in stato di AWAY Globale, permette di eseguire il BACK su tutti i servers (che sono in stato di AWAY); e' infatti possibile, dopo essersi commutati in AWAY su tutti i servers, eseguire il BACK solo su alcuni di essi con il solito comando /BACK.

badwordfile [file] Consente di ri-caricare (ad esempio dopo che e' stato modificato) il file $HOME/.xchat2/buduscript/badword.txt contenente, per ogni riga, una parola da considerare "cattiva"
Quando il sistema (se attivo, vedi: /budus help badword) intercetta nella frase di un altro utente una parola contenuta in suddetto file, genera un Evento di tipo badword e ne imposta la variabile $data al numero di intercettazioni effettuate, sul medesimo utente (che sono condivise con l'evento "badnick").
Volendo usare Espressioni Regolari anzichè semplici parole, è necessario anteporre il carattere /
Ex: /budus badwordfile
Ex: /budus badwordfile $HOME/miadir/parole_cattive.txt

badnickfile [file] Consente di ri-caricare (ad esempio dopo che e' stato modificato) il file $HOME/.xchat2/buduscript/badnick.txt contenente, per ogni riga, un nickname da considerare "proibito"
Quando il sistema (se attivo, vedi: /budus help badword) intercetta un nickname - di un altro utente - che soddisfa suddetto file, genera un Evento di tipo badnick e ne imposta la variabile $data al numero di intercettazioni effettuate, sul medesimo utente (che sono condivise con l'evento "badword").
Volendo usare Espressioni Regolari anzichè semplici nickname, è necessario anteporre il carattere /
Ex: /budus badnickfile
Ex: /budus badnickfile $HOME/miadir/nickname_proibiti.txt

ban +/- <nome> <mask_format> [unban_sec_time] Consente di mettere (+) o togliere (-) il ban al nickname specificato <nome> in base alla maschera <mask_format> fornita. Quest'ultima va composta dalle parole chiave $nick, $host e $domain. Se viene specificato il valore in secondi [unban_sec_time] (solo con l'opzione +), il ban verra' automaticamente rimosso. 
Ex: /budus ban + pinkopallino $nick!*@*
Ex: /budus ban + pinkopallino *!$host@*
Ex: /budus ban + pinkopallino *!*@$domain 600
Ex: /budus ban - pinkopallino *!*@$domain

banner <testo> Stampa il <testo> (cioe' quello che viene passato come parametro) utilizzando dei font "enormi" ... come un Banner ! 
Ex: /budus banner BuDuScRiPt !

bigrose <nome> Disegna una Rosa Enorme dedeicandola al <nome> specificato; da usare con parsimonia perche' impiega qualche minuto ! 
Ex: /budus bigrose Fiorellina

birth <nome> Disegna un'Orichidea (o presunta tale) ed augura "Buon Compleanno" al <nome> specificato. 
Ex: /budus birth Fiorellina
Ex: /budus birth Fiorellina

c <testo> Stampa il <testo> (cioe' quello che viene passato come parametro) colorandolo con la Palette 3 e modificando la proprieta' di ogni lettera (provare per vedere !). 
Ex: /budus c Un testo di prova

cat <nome> Disegna un "Gattino" e comunica che <nome> rappresenta "la micina piu' carina del mondo". 
Ex: /budus cat Fiorellina

clone [nome] Senza parametri esegue un Clone Scanning nel Canale Corrente, altrimenti, se viene specificato un [nome], verifica se quest'ultimo e' un possibile Clone.

cmd [|\]<comando> Esegue il <comando> specificato dopo averlo "risolto". Risolvere il comando significa che il sistema andrà a verificare la presenza di variabili, attributi o funzioni avanzate BuDuScRiPt e li sostituirà di conseguenza. Anteponendo il carattere '|' (pipe) al comando, quest'ultimo non sarà risolto mentre anteponendo '\' non sarà eseguito (utile solo con funzioni avanzate che eseguono comandi). E' possibile eseguire multi-comandi separandoli con "\;". (Per ulteriori informazioni, vedere il comando if)

domain Esegue una ricerca degli utenti aventi il Dominio corrispondente ad uno di quelli "Speciali" (vedi comando /budus list) in tutti i Canali del Server corrente.


else <comando> Esegue il <comando> specificato, dopo averlo "risolto", solo se un precedente comando if non ha visto la propria condizione soddisfatta. Risolvere il comando significa che il sistema andrà a verificare la presenza di variabili o attributi BuDuScRiPt e li sostituirà di conseguenza. (Per ulteriori informazioni, vedere il comando if)

else if <condizione> <comando> Esegue il <comando> specificato, dopo averlo "risolto", solo se un precedente comando if non ha visto la propria condizione soddisfatta e se invece trova soddisfatta la <condizione> specificata. Risolvere il comando significa che il sistema andrà a verificare la presenza di variabili o attributi BuDuScRiPt e li sostituirà di conseguenza. (Per ulteriori informazioni, vedere il comando if)

exec <comando> Esegue il <comando> specificato nella shell del Sistema Operativo. 
Ex: /budus exec rxvt

filterfile [file] Consente di ri-caricare (ad esempio dopo che e' stato modificato) il file $HOME/.xchat2/buduscript/filter.txt contenente, per ogni riga, una filtro che stabilisce cosa deve essere censurato.
Quando il sistema (se attivo, vedi: /budus help filter) intercetta un messaggio proveniente da un altro utente che soddisfa il filtro, lo censura completamente ed è come se non fosse stato scritto nulla. Allo stesso modo è possibile censurare solo i colori, in modo che il testo ricevuto passi "de-colorato".
Per filtro si intende una stringa che rispetta questa sintassi:
[[network,][canale,][nickname,][removecolors()]][[/][stringa]]

Ecco qualche esempio:
SINTASSI: network,canale,utente,removecolors()
ESEMPIO: irc.budus.net,#buduscript,budus,removecolors()
SIGNIFICATO: Rimuove tutti i colori dai messaggi scritti da "budus", nel canale "#buduscript" sul server "irc.budus.net".
SINTASSI: network,canale,removecolors()
ESEMPIO: irc.budus.net,#buduscript,removecolors()
SIGNIFICATO: Rimuove tutti i colori dai messaggi nel canale "#buduscript" sul server "irc.budus.net".
SINTASSI: network,removecolors()
ESEMPIO: irc.budus.net,removecolors()
SIGNIFICATO: Rimuove tutti i colori dai messaggi scritti sul server "irc.budus.net".
SINTASSI: removecolors()
ESEMPIO: removecolors()
SIGNIFICATO: Rimuove tutti i colori dai messaggi scritti ovunque.
SINTASSI: stringa
ESEMPIO: Sto ascoltando
SIGNIFICATO: Censura tutte le frasi che contengono "Sto ascoltando".
SINTASSI: /espressione_regolare
ESEMPIO: /irc.budus.net,.*,.*,.*,.*sto ascoltando
SIGNIFICATO: Censura tutte le frasi che contengono "Sto ascoltando", ma solo sul server "irc.budus.net".
SINTASSI: network,canale,utente,
ESEMPIO: irc.budus.net,#mychan,pluto,
SIGNIFICATO: Sul network "irc.budus.net" censura tutte le frasi scritte da "pluto" nel canale "#mychan".
SINTASSI: network,canale,
ESEMPIO: irc.budus.net,#mychan,
SIGNIFICATO: Censura tutte le frasi scritte nel canale "#mychan" sul network "irc.budus.net".
Il sistema di filtraggio può risultare abbastanza oneroso in termini di utilizzo della CPU, quindi se è possibile evitarne l'uso è sicuramente meglio. 

if <condizione> <comando> Esegue il <comando> specificato dopo aver verificato che la <condizione> sia stata soddisfatta.
La <condizione> è un confronto tra due espressioni, avente sintassi <expr1> <operatore> <expr2>, dove <expr1> e <expr2> possono contenere variabili o attributi, oppure (ma solo nel caso di <expr1>), essere il risultato di un comando del sistema operativo e l' <operatore> deve essere un carattere tra <, =, >, : e ! i quali, rispettivamente, rappresentano MINORE DI, UGUALE, MAGGIORE DI, SIMILE, DIVERSO.
Le variabili rappresentano delle parole chiave che verranno sostituite con dei valori; le variabili che è possibile usare sono:
  • $sesstype, restituisce la tipologia di sessione (la finestra di XChat) in forma numerica.
  • $nickname, restituisce il nickname dell'utente locale.
  • $password, restituisce la password associata al server corrente (utilizzare con attenzione)
  • $quitreason, restituisce la stringa configurata come "messaggio di quit" (quella che XChat mostra quando si esce).
  • $channelname, restituisce il canale corrente.
  • $chanlimit, restituisce il limite massimo di utenti - se configurato - del canale corrente.
  • $chantopic, restituisce il topic - se configurato - del canale corrente.
  • $chanmode, restituisce dei caratteri che identificano le eventuali modalità impostate nel canale corrente.
  • $chankey, restituisce la parola chiave - se configurata - del canale corrente.
  • $opnum, restituisce il numero di operatori presenti nel canale corrente.
  • $hopnum, restituisce il numero di mezzi operatori presenti nel canale corrente.
  • $voicenum, restituisce il numero di utenti con il voice presenti nel canale corrente.
  • $usernum, restituisce il numero di utenti presenti nel canale corrente.
  • $servername, restituisce il nome del server al quale si è connessi.
  • $network, restituisce il nome del network al quale si è connessi.
  • $database, restituisce il percorso del Database del plugin, dove vengono salvate le informazioni relative a canali e utenti (vedere anche il comando dbsave).
  • $dcc_database, restituisce il percorso del Database relativo alle connessioni DCC, dove vengono salvate le informazioni relative alle connessioni DCC in coda, attive, abortite, ecc... (vedere anche il comando dccsave).
  • $output, restituisce il risultato del comando eseguito dal sistema operativo, quando in <expr1> si utilizza la sintassi $(<comando>).
Oltre alle variabili standard elencate sopra, è possibile accedere anche a tutte le variabili interne dello script (quelle usate per determinare il comportamento dello script). E' possibile ottenerne la lista con il comando /budus var ed usarle anteponendo il carattere '$'; nel caso di "multivariabili", come psFlagChanJoinBeep si useranno in questo modo: $psFlagChanJoinBeep[0] e $psFlagChanJoinBeep[1]. Gli attributi sono simili alle variabili, ma sono associati ad un nickname tramite la sintassi nickname.attributo; in pratica lo script andrà a cercare l'attributo specificato associato al relativo nickname. Gli attributi disponibili sono:
  • hostname, rappresenta l'indirizzo dell'utente (username@dominio.it).
  • realname, rappresenta la stringa di identificazione usata dall'utente.
  • servername, rappresenta il server al quale è collegato l'utente.
  • lasttalk, valore numerico che stabilisce quando l'utente relativo ha scritto l'ultima volta (valore espresso in secondi dall'Epoch Time Unix).
  • mode, un carattere che rappresenta la modalità associata all'utente ('~', '&', '@', '%', '+' e 'u' che rappresentano rispettivamente: admin, co-admin, op, halfop, voice e "Unauthorized Notices").
  • away, valore numerico che rappresenta lo stato di AWAY dell'utente.
  • say, rappresenta l'ultima frase scritta dall'utente.
  • state, rappresenta un valore numerico che indica se l'utente risulta ignorato.
  • qm, rappresenta un valore numerico che indica se l'utente risulta monitorato quando scrive in privato (Query Monitoring).
  • answer, rappresenta un valore numerico che indica se l'utente ha ricevuto auto-messaggi avendo scritto quando quello locale era in stato di AWAY.
  • who, rappresenta la stringa che si ottiene eseguendo un WHO sul medesimo nickname.
  • badword, rappresenta un valore numerico che indica quante "BADWORD" o "BADNICK" il sistema ha intercettato.
  • exist, verifica se l'utente esiste nella sessione corrente; ritorna 1 se esiste, altrimenti 0.
Volendo eseguire il confronto tra un comando del sistema operativo e un'espressione, bisogna utilizzare la sintassi $(<comando>), nella <expr1>; il risultato del comano sarà anche disponibile attraverso la variabile $output.
Nel caso in cui si voglia eseguire un confronto tra espressioni utilizzando le Espressioni Regolari POSIX è necessario mettere la regexp in <expr2>; anteponendo il carattere '/' (ex: /budus if "$(uname -a)" = "/[Gg]entoo" /ECHO Stai usando un sistema Gentoo ($output) e usando l'operatore '=' o '!' (gli altri non sono ammessi).
Esempi:
/budus if $nickname.mode = @ /ECHO L'utente locale è un OP

/budus if pluto.exist = 0 /ECHO L'utente pluto non esiste nella sessione corrente.

/budus if $iFlagAdvancedLog = 0 /ECHO La modalità di LOG avanzata è disattivata.

/budus if "$(uname -a)" = "/[Gg]entoo" /ECHO Stai usando un sistema Gentoo ($output)

/budus if pluto.say : linux /ECHO L'utente pluto ha scritto una frase contenente Linux.

/budus if $nickname ! mio_solito_nickname /budus macro autoidentificazione

I "Comandi Decisionali" (oltre a "if" c'è anche "else", "else if" e "cmd") offrono inoltre la possibilità di utilizzare delle "Funzioni Avanzate" che consentono di accedere a dati di XChat. E' possibile usare più funzioni contemporaneamente, anche annidandole una dentro l'altra (salvo la funzione exec( ... ). Bisogna porre estrema attenzione a rispettare lo spazio che va messo prima e dopo l'eventuale parametro/i fornito/i (vedere gli esempi). La funzioni disponibili sono:
  • exec( filter,command ), restituisce il numero di volte che "command" è stato eseguito per ogni utente presente nel canale presente che ha superato l'eventuale "filter" specificato, altrimenti 0. Il parametro "filter" è una sequenza di caratteri che specificano le modalità che si desidera cercare (o che si desidera siano escluse); ogni utente presente nel canale ha infatti associata una o più modalità rappresentate dai caratteri '*' (IRCOP), '~' (FOUNDER), '&' (Super OP), '@' (OP), '%' (Half OP), '+' (Voice), 'a' (Away), 'm' (Me, utente locale) ed 's' (Selected, utente selezionato nella lista utenti). Anteponendo a questi caratteri il '-' si ottiene l'esclusione. Ad esempio il filtro che voglia ottenere tutti gli utenti OP e Half OP del canale, ad esclusione di quelli Away e selezionati dall'utente locale deve essere @%-a-s (OP + Half OP - Away - Selected). Il parametro "command" (che vuole sempre preceduto dalla ',' anche se viene omesso "filter") può contenere delle variabili locali (cioè che vengono risolte solo dalla funzione exec( ... )) che sono risolte per ogni utente che ha superato il filtro e sono: $execnick, $exechostname, $execrealname, $execservername, $execlasttalk, $execprefix.
  • connected( server ), restituisce 1 se il "server" specificato risulta collegato, altrimenti 0.
  • connected( network ), restituisce 1 se il "network" specificato risulta collegato, altrimenti 0.
  • end(), termina l'esecuzione di una MACRO; l'uso di questa funzione va generalmente abbinato alla direttiva "#exec:" delle MACRO.
  • end( message ), termina l'esecuzione di una MACRO e restituisce il "message" specificato (da utilizzare come motivo per la terminazione); l'uso di questa funzione va generalmente abbinato alla direttiva "#exec:" delle MACRO.
  • escape( string ), restituisce "string" dopo aver protetto i caratteri speciali utilizzati dalle Espressioni Regolari ("\.?*[](){}^$|"), anteponendo un backslash ("\").
  • filter( +regexp,string ), cerca all'interno di "string" una corrispondeza di "regexp" (che è un Espressione Regolare) e restituisce il pattern corrispondente.
  • filter( -regexp,string ), cerca all'interno di "string" una corrispondeza di "regexp" (che è un Espressione Regolare) e restituisce "string" dopo aver eliminato la corrispondenza individuata.
  • finduser( server,nickname ), restituisce 1 se trova il "nickname" sul "server" specificato, altrimenti 0.
  • finduser( network,nickname ), restituisce 1 se trova il "nickname" sul "network" specificato, altrimenti 0.
  • ignore_list( filename ), salva su "filename" la lista delle maschere di ignore attive nel client; per ogni riga sarà presente una maschera, seguita da un carattere di tabulazione e un numero intero che rappresenta la tipoliga di "ignoramento" (dipende dalla versione di XChat).
  • ignore_mask( mask ), restituisce 1 se la maschera "mask" risulta tra quelle ignorate, altrimenti 0.
  • init( variable,value ), inizializza la "variable" al "value" fornito, se non esiste, altrimenti la lascia invariata; in entrambi i casi ritorna il valore corrente di "variable" (specificarla con il carattere "$").
  • int( float_value ), converte il numero in virgola "float_value" in numero intero, approssimandolo per eccesso.
  • lenght( string ), Restituisce la lunghezza di "string".
  • math( #+-*/%^v# ), Restituisce il risultato dell'operazione matematica specificata, dove "#" sono i due numeri interi usati come operatori e '+', '-', '*', '/', '%' (resto), '^' (elevamento a potenza) e 'v' (radice quadra) sono le operazioni disponibili.
  • mathf( #,#+-*/%^v#,# ), Restituisce il risultato dell'operazione matematica specificata, dove "#,#" sono i due numeri in virgola mobile usati come operatori e '+', '-', '*', '/', '%' (resto), '^' (elevamento a potenza) e 'v' (radice quadra) sono le operazioni disponibili.
  • match( nickname,address,mask ), dati un "nickname" e un "address", verifica se soddisfano la "mask" (che deve avere il formato "nick!host@domain") specificata, ritornando ques'ultima se è soddisfatta e 0 se non lo è.
  • network( server ), restituisce il nome del "network" corrispondente al "server" specificato.
  • pos( pattern,string ), restituisce la posizione - in numero di caratteri - della prima eventuale di "pattern" eventualmente trovata in "string".
  • replace( >regexp,replace,string ), data una "string", utilizza "regexp" come espressione regolare di ricerca e sostituisce ogni corrispondenza intercettata con "replace", restituendo la stringa risultante.
  • replace( +regexp,replace,string ), data una "string", utilizza "regexp" come espressione regolare di ricerca e sostituisce la prima corrispondenza intercettata con "replace", restituendo la stringa risultante.
  • replace( -pattern,replace,string ), data una "string", utilizza "pattern" per la ricerca e sostituisce ogni corrispondenza intercettata con "replace", restituendo la stringa risultante.
  • removecolors( string ), restituisce "string" dopo aver rimosso tutti i codici colore.
  • search( pattern,string ), restituisce la restante porzione di "string" partendo della prima occorrenza di "pattern" eventualmente trovata in "string".
  • server( network ), restituisce il nome del "server" corrispondente al "network" specificato.
  • session( session ), restituisce 1 se trova la "session" specificata.
  • session( server,session ), restituisce 1 se trova la "session" specificata sul "server".
  • session( network,session ), restituisce 1 se trova la "session" specificata sul "network".
  • stat( server,session filter ) o stat( network,session filter ), restituisce il numero di utenti presenti nel canale "session" specificato; se viene fornito "server" o "network", il canale "session" sarà cercato di conseguenza. Il parametro "filter" è facoltativo e funziona in modo identico a quello della funzione exec( ... ) (vedi sopra).
  • strip( string ), data una stringa "string", elimina i caratteri spazio in testa e in coda.
  • substr( start,lenght,string ), data una stringa "string", ritorna i caratteri a partire da "start" e per "lenght" lunghezza (se quest'ultima vale 0, viene ritornato tutto il resto di "string").
  • tab(), restituisce il nome della sessione corrente.
  • tab( s ), restituisce il nome del server della sessione corrente.
  • tab( n ), restituisce il nome del network della sessione corrente.
  • time(), restituisce un valore numerico che corrisponde al numero di secondi trascorsi dal 1 gennaio 1970.
  • tolower( string ), restituisce "string" convertita in minuscolo.
  • token( token,field,string ), suddivide "string" utilizzando "field" come separatore e, indicizzando ogni suddivisione, ne ritorna la "token" istanza.
  • token( >token,field,string ), suddivide "string" utilizzando "field" come separatore e, indicizzando ogni suddivisione, ne ritorna la "token" istanza e tutto quello che ne segue.
  • toupper( string ), restituisce "string" convertita in MAIUSCOLO.
  • xchatvar( variable ), restituisce il valore di "variable", che rappresenta il nome di una variabile di XChat; la lista delle variabili è ottenibile con il comando "/SET".
  • Esempi (consiglio di capire come funzionano facendone un semplice copia/incolla in XChat):
    /budus cmd /SAY Nel canale tab() il int( mathf( mathf( stat( tab( n ),tab() *~&@% )/stat( tab( n ),tab() ) )*100 ) )% degli utenti ha funzione di operatore; ti elenco i exec( *~&@%,/budus cmd /SAY $execnick ($execprefix) [substr( 1,math( pos( @,$exechostname )-1 ),$exechostname )] ) operatori:

    /budus if "connected( tab( s ) )" = 1 /ECHO L'utente $nickname è collegato al server tab( s ) e la tabella corrente è tab()

    /budus if "finduser( tab( s ),$nickname )" = 1 /ECHO L'utente $nickname è collegato al network tab( n )

    /budus if "ignore_mask( *!*@irc.budus.net )" = 1 /ECHO Salvo la lista delle meschere su file (risultato = ignore_list( ignore.txt ))


    hello <nome> Disegna una decorazione per dare il Benvenuto/a al <nome> specificato (impiega ~4 sec.). 
    Ex: /budus hello Fiorellina

    help <comando> 
    <variabile> 
    <guida speciale>
    Stampa nella finestra corrente la guida breve del Comando/Variabile/Guida_Speciale passata come parametro. 
    Ex: /budus help away

    ignore [+][nome] [\] [-] Serve per ignorare completamente il Dominio appartenente al [nome] specificato (se viene omesso, il plugin utilizza il nome della QUERY eventualmente attiva) comunicandolo a tutto il Canale corrente (o comunque nella finestra corrente). Se il [nome] viene preceduto da un '+', l'ignore sarà salvato e quindi reso permanente (è possibile gestire le maschere di ignore tramite il menu: "Finestra -> Lista Utenti Ignorati ..."). 
    Ex: /budus ignore rompiballe
    Ex: /budus ignore rompiballe -
    Ex: /budus ignore rompiballe \


    ATTENZIONE: la sintassi utilizzata nella seconda riga di esempio serve per evitare che il plugin emetta dei messaggi (ACTION) nella finestra corrente che specificano l'azione intrapresa. Per togliere l'ignore e' necessario utilizzare la sintassi riportata nella terza riga dell'esempio; in tutti i casi, se il comando viene usato in QUERY non e' necessario specificare il parametro [nome] .

    image <file> Questo comando permette di stampare un'Immagine utilizzando il carattere "O" opportunamente colorato in base ai colori del Bitmap specificato in <file>; l'immagine deve essere in formato XPM (la si puo' creare con Gimp o con altri programmi di fotoritocco UNIX), deve avere un massimo di 16 colori (indexed) e trovarsi nella directory HOME dell'utente (salvo non si specifichi il percorso completo). 
    E' ovvio che e' assolutamente da evitare l'uso di immagini troppo grandi; oltre il 40x40 risultano fastidiose (occorre anche troppo tempo per stamparle). 
    Ex: /budus image .xchat/buduscript/cuore


    ATTENZIONE: non bisogna specificare l'Estensione .XPM; il plugin la da per scontata. 


    ATTENZIONE: l'attuale algoritmo di conversione non tiene conto dei colori originali del bitmap.

    join [canale] Monitorizza tutti gli utenti che entrano nel canale impostato come primo parametro (facoltativo - se omesso, viene preso di default il nome del Canale Corrente) emettendo un segnale acustico , oltre che testuale (se necessario). 
    Serve per sapere quando, in un canale poco frequentato, entra qualcuno. 
    Ex: /budus join
    Ex: /budus join nickname
    Ex: /budus join \
    La sintassi sopra (con \ come parametro) serve per disabilitare il monitoraggio. 


    ATTENZIONE: e' possibile monitorare un solo canale alla volta; se si usa il comando piu' volte, l'ultimo canale impostato ha la prevalenza su quelli precedenti.

    list <\> Stampa la lista di tutti gli utenti memorizzati nel database del plugin. Il comando permette di scoprire "utenti in incognito" (ovvero persone conosciute/note ma che usano un nick diverso dal solito) tramite la verifica del Dominio di provenienza. 
    Perche' cio' sia possibile e' necessario creare un file di testo ASCII (con qualsiasi editor, VI, Emacs, ecc...) contenente la lista degli utenti "piu' conosciuti" (o che comunque si vuole avere la possibilita' di riconoscere) con una formattazione del tipo: 
    Dominio Nickname Nome Citta' Eta' Tel Ecc...
    Come ad esempio: 
    @190.191.192 AnonimoVeneziano Venezia 23
    La cosa importante e' che la prima "parola" (delimitata da uno spazio o da una tabulazione) sia il Dominio che si vuole controllare e la seconda sia il Nickname utilizzato (il resto della riga e' arbitrario). Il campo Dominio puo' anche essere una Espressione Regolare POSIX (vedere: man 7 regex). 
    Il file lista citato si deve trovare nella directory $HOME/.xchat/buduscript in un file avente il medesimo nome del server IRC nel quale (o ai quali, dato che vengono gestiti piu' files lista contemporaneamente) viene lanciato il comando,  come ad esempio irc.mioserver.it (per verificare il Nome del Server attivo utilizzare il comando /budus var). 


    Utilizzando il parametro \ viene tentato il riconoscimento in base al Nickname (il quale deve essere contenuto nella lista del file ~/.xchat/buduscript/budus.nik). 


    N.B.: Il medesimo file descritto sopra ($HOME/.xchat/buduscript/nomeserver) e' anche utilizzato per avvisare l'utente quando vengono intercettati (e cio' avviene quando l'utente locale entra in un canale o quando lo fa un utente remoto, compreso il cambiamento di nick) degli utenti che hanno il Dominio di provenienza corrispondente a quello/i elencato/i in suddetto file prima che venga incontrata una riga contenente il carattere #
    Cio' risulta utile affinche' sia possibile controllare in modo particolare solo una parte dei domini registrati nel file perche', nel caso in cui quest'ultimo sia composto da molte righe, e' possibile che avvengano dei forti rallentamenti nell'ipotesi che l'utente locale entri in un canale nel quale siano presenti molti utenti remoti. 
    La formattazione di questa particolare sezione del file deve essere: 
    Dominio Dati
    come ad esempio: 
    @213.213.211.    Milano


    ATTENZIONE: se si scarica il plugin dalla memoria gli utenti memorizzati nel database vengono eliminati; cio' significa che se si ricarica il plugin il database non sara' piu' disponibile e ne consegue che anche le funzioni citate sopra (non tutte, in genere solo quelle del Clone Detecting) potrebbero non funzionare correttamente; le ultime versioni del plugin, pero', sono abbastanza "intelligenti" da aggiornarsi quando realizzano che il database non e' allineato alla situazione

    macro <file> [parametri...] Permette di eseguire i comandi presenti all'interno di un file salvato nella directory ~/.xchat/buduscript ed avente come estensione .mcr . E' sufficiente invocare il nome del file senza l'estensione; se non viene specificato nessun file, il comando tenta di eseguire la macro precedente. Il <file>.mcr deve essere semplicemente una lista di comandi IRC; i comandi verranno inviati al Canale Corrente e possono contenere anche delle Variabili; queste variabili vengono sostituite, a seconda della loro natura, dai parametri passati dall'utente e dalle variabili generiche della sessione che ha lanciato la macro. Ecco l'elenco delle possibili variabili e il relativo significato:
    • $0 : Intera riga di comando, compreso il nome della macro.
    • $1 : Primo parametro
    • $1- : Primo e successivi parametri
    • $2 : Secondo parametro
    • $2- : Secondo e successivi parametri
    • $3 : Terzo parametro
    • $3- : Terzo e successivi parametri
    • $4 : Quarto parametro
    • $4- : Quarto e successivi parametri
    • $5 : Quinto parametro
    • $5- : Quinto e successivi parametri
    • $6 : Sesto parametro
    • $6- : Sesto e successivi parametri
    • $7 : Settimo parametro
    • $7- : Settimo e successivi parametri
    • $8 : Ottavo parametro
    • $8- : Ottavo e successivi parametri
    • $9 : Nono parametro
    • $9- : Nono e successivi parametri
    • $mchannel : Nome del canale corrente
    • $mhostname : Hostname del server corrente
    • $mservername : Nome del server corrente
    • $mpassword : Password di identificazione dell'utente al server
    • $mnick_prefixes : Prefisso del nickname (@, %, +)
    • $mnick_modes : Modalita' dell'utente locale (aoq ...)
    • $mnick_host : Host dell'utente locale
    • $mnick : Nickname dell'utente locale
    • $mlast_away_reason : Ultimo motivo utilizzato per l'AWAY
    • $mxchat_path : Path di xchat (.xchat o .xchat2)
    Tutte queste variabili possono essere utilizzate all'interno dei files .mcr; se una variabile e' nulla e' come se non esistesse. 
    Ex: /budus macro chnick
    Il comando di esempio sopra prevede che esista un file ~/.xchat/buduscript/chnick.mcr che potrebbe essere come il seguente: 
    /nick mioNuovoNick
    /msg nickserv miapassword_di_identificazione

    mare <testo> Stampa il <testo> (cioe' quello che viene passato come parametro) inserendolo tra una decorazione "ondulata" che cambia colore di volta in volta in modo casuale. 
    Ex: /budus mare Parolona

    mod [canale] Monitorizza quando nel canale impostato come primo parametro (facoltativo - se omesso, viene preso di default  il nome del Canale Corrente) viene scritto qualcosa emettendo un segnale acustico, oltre che testuale (se necessario). 
    Praticamente serve per sapere quando, in un canale "dormitorio", qualcuno da un segno di vita. 
    Ex: /budus mod
    Ex: /budus mod nick
    Ex: /budus mod \
    La sintassi sopra (con \ come parametro) serve per disabilitare il monitoraggio. 


    ATTENZIONE: e' possibile monitorare un solo canale alla volta; se si usa il comando piu' volte, l'ultimo canale impostato ha il sopravvento su quelli precedenti. 
    Se viene impostato il nome di un utente, viene monitorato solo quest'ultimo (cioe' quando scrive qualcosa in un canale o in privato); se il nome dell'utente corrisponde a quello "locale" viene emesso segnale acustico quando quest'ultimo viene contattato in Privato (/QUERY) (cosa che comunque avviene quando la QUERY viene aperta per la prima volta).

    msg <testo> Stampa il <testo> (cioe' quello che viene passato come parametro) colorandolo con la Palette 1 (provare per vedere !). 
    Ex: /budus msg Un testo di prova

    msg2 <testo> Stampa il <testo> (cioe' quello che viene passato come parametro) colorandolo con la Palette 2 (provare per vedere !). 
    Ex: /budus msg Un testo di prova

    msg3 <testo> Stampa il <testo> (cioe' quello che viene passato come parametro) colorandolo con la Palette 3 (provare per vedere !). 
    Ex: /budus msg Un testo di prova

    mynick Elenca tutte le volte che il proprio nickname è stato invocato nella sessione corrente. 
    Ex: /budus mynick

    names Stampa una lista di tutti gli utenti memorizzati nel database del plugin presenti nel Canale Corrente


    ATTENZIONE: se si scarica il plugin gli utenti memorizzati nel database vengono eliminati; cio' significa che se si ricarica il plugin il database non sara' piu' disponibile e ne consegue che anche le funzioni citate sopra (non tutte, in genere solo quelle del Clone Detecting) potrebbero non funzionare correttamente.

    natale <nome> "Augura" Buon natale al <nome> specificato. 
    Ex: /budus natale Fiorellina

    part [reason] Esce dal canale corrente dando, come ragione, l'eventuale parametro [reason] e chiude la finestra.

    pipe <comando> Esegue il <comando> specificato alla shell del sistema operativo, ne cattura l'output e, per ogni riga letta, esegue il comando specificato nella variabile psPipeCommand
    Ex: /budus pipe grep -h budus .xchat/buduscript/*.log
    Ex: /budus pipe ls -l .xchat/buduscript/ | grep budus
    Se l'output del processo eseguito e' gia' di per se' stesso un "comando IRC/BuDuScRiPt" e si desidera che venga direttamente eseguito dal client, e' possibile utilizzare il comando pipe_script al posto di pipe. In modo analogo è possibile usare pipe_script_silent se l'output del plugin, che mostra quale comando ha effettivamente eseguito, risulta fastidioso e lo si vuole evitare.

    Il comando può contenere queste variabili:

    • $pnick: Nickname dell'utente locale
    • $paddress: Indirizzo dell'utente locale (host@domain)
    • $phostname: Nome del Network IRC
    • $database: Percorso al file del Database del plugin, dove sono contenuti i dati relativi a canali e utenti
    • $dcc_database: Percorso al file del Database delle connessioni DCC.
    In alcuni casi può essere utile eseguire l'escape del carattere ' (virgoletta semplice); per farlo è necessario anteporre '\(' e postporre '\)'.
    Ex: /budus pipe find ${HOME} -iname '*.sh'
    Ex: /budus pipe echo \(All'apice della gloria si puo' solo cadere in basso !\)


    qm Attiva il monitoraggio dei cambiamenti effettuati in una sessione QUERY aperta, in modo da avvisare l'utente con dei segnali acustici (e testuali, se necessario) delle eventuali modifiche. Se non si attiva questa funzione all'interno della QUERY stessa, il plugin si limita ad emettere segnalazione solo in corrispondenza dell'apertura. 

    ATTENZIONE: il comando funziona solo ed esclusivamente all'interno di una QUERY, si resetta nel momento in cui l'altro utente si disconnette e puo' essere disabilitato tramite la sintassi: 
    /budus qm \
    sempre all'interno della QUERY desiderata.

    read [file] Carica il valore delle Variabili Globali piu' importanti dal file ~/.xchat/buduscript/budusrc - salvo non venga specificato [file] - e le rende correnti.

    rand <nome> Disegna, scegliendo casualmente, una decorazione presa tra quelle disponibili nella sua libreria interna, ma sempre utilizzando come "obiettivo" il <nome> specificato. 
    L'algoritmo e' fatto in modo che le decorazioni piu' lunghe da disegnare vengano stampate piu' raramente delle altre piu' semplici (all'utente viene anche detto quale disegno e' stato scelto). 
    Ex: /budus rand Fiorellina

    rose <nome> "Regala" un mazzo di Rose rosse (un po' appassite !) al <nome> specificato, modificando quest'ultimo con lo stile MSG4. 
    Ex: /budus rose Fiorellina

    save [file] Salva il valore delle Variabili Globali piu' importanti nel file ~/.xchat/buduscript/budusrc - salvo non venga specificato [file] - in modo da non essere piu' necessario impostarle ad ogni avvio del programma.

    set [variabile] [valore] Consente di associare ad una [variabile] un [valore]. La variabile cosi' definita, sara' disponibile attraverso l'uso del comando /budus if o /budus else anteponendo '$' a [variable]. Se non viene specificato un valore, il comando cerca la variabile e ne mostra il valore. Se non viene specificato il nome, il comando mostra tutte le variabili utente. I nomi di variabili possono contenere qualsiasi carattere tranne lo spazio e il "$" e sono case sensitive ($mia_variabile è diversa da $Mia_Variabile). Se una variabile esiste gia' le viene cambiato il valore - specificando [valore] - ma, se si tratta di una "variabile base" (ex: $output, $nick o le variabili di BuDuScRiPt), comunque quest'ultime saranno sostituite per prime. Non e' possibile cancellare una variabile una volta definita ma, non essendo permanenti, comunque saranno tutte eliminate alla chiusura dello script. Se non si desidera il messaggio emesso quando una variabile viene inizializzata/modificata è possibile usare il comando /budus seth, che funziona nello stesso modo ma non emette output.

    search [text] Permette di eseguire una ricerca, nel database del plugin, degli utenti  che, in qualche modo, soddisfano la stringa [text]; l'algoritmo non e' case-sensitive e ricerca la stringa desiderata nel "Server di Appartenenza", nel "Nick", nell' "Indirizzo" (Host@Dominio) e nei "Dati" di ogni utente. Se la la stringa [text] e' composta da piu' parole (ogni parola e' separata da uno spazio) sara' necessario che ogni parola venga soddisfatta.
    Se non viene specificata l'opzione [text], il comando cerca, a seconda se viene usato in un canale o in una query, rispettivamente tutti gli utenti appartenenti al canale stesso (identificandoli) o il nickname dell'utente (identificandolo).
    Allo stesso modo della funzione list, viene anche verificata la possibilita' che gli utenti soddisfacenti alla ricerca eseguita possano essere delle persone conosciute in "incognito" (vedere sopra per ulteriori informazioni).

    sendsess <sessione> <comando> Invia alla <sessione> specificata il <comando> desiderato. La sessione può essere specificata sia come nome dell'etichetta (quindi, nome del canale o dell'utente relativo alla finestra) o con la sintassi "server/etichetta" (nel caso, ad esempio, di canali con il medesimo nome ma su servers diversi), oppure, con il carattere '*' per specificare "tutte le sessioni"; tramite '*#' vengono prese in esame solo le sessioni di tipo "canale" mentre con "*!" solo la prima sessione individuata. Per spedire alla sessione corrente di XChat (che non è necessariamente quella visualizzata dall'utente) usare la variabile $current_tab mentre, per spedire in quella attiva (visualizzata dall'utente), usare la variabile $focus_tab
    Ex: /budus sendsess #buduscript /SAY Ciao BuDuS
    Ex: /budus sendsess miaquery /SAY Ciao miaquery
    Ex: /budus sendsess mioserver/#miocanale /SAY Ciao a tutti
    Ex: /budus sendsess * /SAY Me ne vado, ciao
    Ex: /budus sendsess $current_tab /ECHO E' successo qualcosa, controlla

    var [reset] Stampa (solo all'utente) tutte le Variabili di BuDuScRiPt e relativi valori. Se viene specificato anche il parametro [reset], le variabili vengono azzerate ai valori di default

    vbanner <testo> Stampa il <testo> (cioe' quello che viene passato come parametro) utilizzando dei font "enormi" ... come un Banner Verticale! 
    Ex: /budus vbanner BuDuScRiPt !

    ver Stampa nel canale corrente la Versione del plugin (serve quando qualcuno chiede quale script si sta usando).

    word [parola] [*] Monitora il canale corrente emettendo un segnale acustico (e testuale, se necessario) nel caso in cui un utente scriva la parola [parola] specificata (mettendo un asterisco '*' dopo la parola [parola] verranno monitorati tutti i canali di tutti i servers); se viene omessa ([parola]) verra' utilizzato il Nickname corrente. Utilizzando, al posto di [parola], il parametro '\' si disabilita il monitoraggio.

    C o m a n d i A v a n z a t i
    Parola Chiave
    Parametro
    Descrizione

    database BuDuScRiPt gestisce un database proprio e parallelo a quello di XChat contenente tutti i dati relativi agli utenti presenti nelle varie sessioni (siano esse canali o finestre private); la stragrande maggioranza delle features realizzate nello script (clone scanning, monitoring, Events Manager, ecc...) si appoggia a questo database per funzionare. Il comando "/budus database" permette di disabilitare questo database, ma ciò chiaramente comporta che ampie porzioni del plugin saranno inibite e quindi drasticamente ridotte le funzionalità disponibili. 

    dccsave Esegue il salvataggio su disco, in un semplice file di testo, del database relativo alle connessioni DCC di XChat. Il file viene salvato nella cartella /tmp del sistema e avrà un nome simile a buduscript_dcc_database_XXXXX.dat dove XXXXX rappresenta un valore numerico relativo al PID (Process ID, cioè il numero identificativo che il sistema operativo associa ad ogni programma) di XChat. Tramite questo file è possibile, per una procedura esterna, conoscere esattamente le connessioni in coda, attive, abortite, ecc... . Il file ha una formattazione di questo tipo:
    ADDRESS32 ? CPS ? DESTFILE ? FILE ? NICK ? PORT ? POS ? RESUME ? SIZE ? SIZEHIGH ? STATUS ? TYPE
    Il significato di questi parametri è disponibile nella documentazione di XChat, relativamente alla Lista dei trasferimenti DCC ("list of DCC file transfers"), direttamente sul sito del client Ogni parametro è separato da un carattere di tabulazione (?), così che sia più semplice eseguire elaborazioni separando i dati; ad ogni riga del file corrisponde un record che ha sempre le medesime "colonne" (appunto, separate da tabulazione). 

    dbupdate Inibisce l'aggiornamento automatico del database. Può essere utile disabilitarlo nel caso in cui si manifestino gravi anomalie e il plugin segnali in continuazione problemi nell'all'ineamento del database interno. Salvo uso di Server IRC particolari è molto improbabile che si possa verificare una simile evenienza su un server IRC standard. 

    dbcheck Effettua un controllo di allineamento tra il database interno del plugin e quello di XChat, per verificare non sussistano discrepanze; nel caso in cui vengano individuate anomalie, il comando provvede anche ad allineare il database. Situazioni anomale si possono verificare nel momento in cui si carica il plugin ad XChat già avviato, quindi in una "situazione anomala", nella quale non può chiaramente essere al corrente dello stato delle cose. 

    dbsave Esegue il salvataggio su disco, in un semplice file di testo, del database interno del plugin. Il file viene salvato nella cartella /tmp del sistema e avrà un nome simile a buduscript_database_XXXXX.dat dove XXXXX rappresenta un valore numerico relativo al PID (Process ID, cioè il numero identificativo che il sistema operativo associa ad ogni programma) di XChat. Tramite questo file è possibile per una procedura esterna, ad esempio, conoscere esattamente quali utenti sono memorizzati nel database e soprattutto gestire i relativi parametri. Il file ha una formattazione di questo tipo:
    nome_server ? nome_canale ? utente_nickname ? utente_indirizzo ? utente_host ? utente_dominio ? utente_dati ? utente_contatore_badword ? utente_stato_ignore ? utente_flag_locale
    Dunque abbiamo:
    • nome_server: E' il nome del server sul quale risiede l'utente.
    • nome_canale: E' il nome del canale sul quale risiede l'utente.
    • utente_nickname: E' il nickname identificativo dell'utente.
    • utente_indirizzo: E' l'indirizzo dell'utente nella forma host@domain
    • utente_host: E' l'host dell'utente (parte a sinistra della @ nell'indirizzo)
    • utente_domain: E' il dominio dell'utente (parte a destra della @ nell'indirizzo)
    • utente_dati: E' una parte divisa in 3 sottoparti:
      • Modalità dell'utente
      • Numero di links di distanza del server al quale è collegato rispetto a quello dell'utente locale
      • Dati Identificativi (nome reale ... o comunque quello che l'utente stesso ha configurato)
    • utente_contatore_badword: Contatore che tiene traccia di quante "parole proibite" l'utente ha scritto.
    • utente_stato_ignore: Valore numerico (0 = non ignorato, 1 = ignorato) che identifica se l'utente è ignorato (vedi maschere di ignore su IRC/XChat).
    • utente_flag_locale: Valore numerico (0 = remoto, 1 = locale) che identifica se l'utente è remoto (utente normale) o locale (utente speciale).
    • utente_timer: Valore numerico espresso in secondi che identifica quando l'utente ha scritto l'ultima volta.
    • utente_say: L'ultima frase scritta dall'utente.
    Ogni parametro è separato da un carattere di tabulazione (?), così che sia più semplice eseguire elaborazioni separando i dati; ad ogni riga del file corrisponde un record che ha sempre le medesime "colonne" (appunto, separate da tabulazione). 

    debugfnc Attivando questa modalità il plugin va a creare un file di nome ${HOME}/.xchat2/buduscript/budus.fnc all'interno del quale salverà tutte le chiamate a funzione interne del plugin stesso. In caso in cui si verifichino anomalie (ad esempio un crash), tramite questo file è possibile risalire alla causa del problema. 

    userflush Svuota il database completamente; nel momento in cui il plugin riesce ad accorgersi che il database non è più allineato (salvo non sia stato inibito), provvederà ad eseguire l'aggiornamento automatico. 

    userupdate Aggiorna il database in base agli utenti presenti nel canale corrente. 

    ExecCommandInQueue() BuDuScRiPt ha un sistema interno opportunamente studiato per gestire l'esecuzione in serie dei comandi, senza superare i limiti anti-flood eventualmente attivati e senza bloccare il client (XChat), si chiama: Command's Queue. Si tratta di una coda a priorità variabile che può essere obbligata ad eseguire i comandi eventualmente presenti nella stessa, tramite appunto questo comando. 
    Ex: /budus ExecCommandInQueue()

    FlushCommandInQueue() Può capitare di creare script o macro che, non ancora perfettamente funzionanti, vadano a riempire la command's queue, attraverso dei "loop di comandi" (cioè vengono inseriti in coda dei comandi, con un ciclo senza fine, causando un "flood" di comandi verso il server). Questo comando serve per svuotare completamente la coda dei comandi (senza eseguirli) e il buffer di XChat dei comandi rimasti in sospeso (anche XChat ha una propria gestione dei comandi da inviare al server IRC, anche se non è sofisticata come quella del plugin). 
    Ex: /budus FlushCommandInQueue()

    InsertCommandInQueue() <command> Il plugin consente di inserire dei comandi nella command's queue anche manualmente. 
    Ex: /budus InsertCommandInQueue() /ECHO prova

    InsertCommandInQueueTimed() <second> <command> E' possibile inserire nella command's queue un comando <command> facendo in modo che non venga eseguito prima di <second> secondi. Da sottolineare che l'esecuzione temporizzata non è precisa, semplicemente è da intendersi come "non eseguire il comando prima che siano trascorsi N secondi". 
    Ex: /budus InsertCommandInQueueTimed() 10 /ECHO prova

    DeleteCommandInQueue() <item> Consente di eliminare, in base al numero (item) specificato, un comando presente nella "Coda dei Comandi". 
    Ex: /budus DeleteCommandInQueue() 3

    DeleteCommandInQueue() <pattern> Consente di eliminare, in base ad una stringa (pattern) specificata, un comando presente nella "Coda dei Comandi". Il parametro "pattern" non è case sensitive. 
    Ex: /budus DeleteCommandInQueue() /ECHO

    ListCommandInQueue() Consente di ottenere la lista dei comandi eventualmente presenti in coda, in attesa di essere eseguiti; per quelli temporizzati, vengono mostrati anche i secondi mancanti. 
    Ex: /budus ListCommandInQueue()

    keepcmdqueue In alcuni contesti è necessario inibire l'eliminazione di quei comandi, presenti nella Command's Queue, che fanno riferimento a sessioni non più valide (ad esempio dopo una ri-connessione al server IRC). Questo comando agisce sulla variabile che inibisce l'eliminazione dei comandi, che invece vengono associati alla sessione corrente. 
    Ex: /budus keepcmdqueue

    shbm Il sistema SHBM (Signal Handler Backtrace Module) è il sistema con il quale il plugin intercetta un crash del client ed emette dei messaggi, relativi alle chiamate a funzione interne del software, il cui scopo è quello di facilitare il debug. Tuttavia questo comporta che il software deve mantenere in memoria questi messaggi e gestirli in tempo reale, con un carico direttamente proporzionale a quello cui è sottoposto XChat (quanti più utenti deve gestire, quanto più il carico sarà elevato); su sistemi lenti questo può comportare un sensibile calo delle prestazioni e, se non si accusano problemi di stabilità, può essere opportuno disabilitare il SHBM. 
    Ex: /budus shbm

    CloseWindow() Chiude la finestra della sessione corrente di XChat. 
    Ex: /budus CloseWindow()

    NewWindow() Apre una nuova finestra in XChat e la rende corrente. 
    Ex: /budus NewWindow()

    OpenServerList() Apre la finestra dei network di XChat. 
    Ex: /budus OpenServerList()

    PlaySound() <d/m/w/e/a> Emette un avvertimento acustico; il plugin offre:
  • d: Default (suono normale)
  • m: Message (suono breve)
  • w: Warning (suono di avvertimento)
  • e: Error (suono di errore)
  • a: Alert (suono di allerta)
  • Ex: /budus PlaySound() d

    InsertInBuffer() <string> BuDuScRiPt è probabilmente l'unico plugin/script disponibile per XChat con la capacità di inserire una stringa di testo definita nell'utente direttamente nel prompt dei comandi di XChat stesso. Ciò è dovuto al fatto che fa accesso a funzioni interne del client che non sono raggiungibili dagli altri script (fatti in PERL, TCL, ecc....). Questa funzione consente all'untente di farsi inserire direttamente nella riga dei comandi qualsiasi cosa, ad esempio anche il risultato di un'elaborazione da parte di uno script esterno o quant'altro. Non è da confondere con il fatto che "uno script simula ciò che potrebbe digitare un utente", dato che questo tipo di cosa lo fanno tutti gli script ed è un qualcosa che non richiede la conferma da parte dell'utente; la funzione in questione va ad inserire ciò che si vuole proprio come fosse l'utente a scriverla, ma senza però premere INVIO per spedirla al server. Ciò significa che si ha possibilità di modificarla o non inviarla proprio se non lo si ritiene opportuno (cosa impossibile con l'altra tipologia di invio normalmente adottata, che è automatica e non richiede conferma). 
    Ex: /budus InsertInBuffer() /ECHO test

    ExecUserInput() [string] Il funzionamento è analogo a quello della funzione avanzata InsertInBuffer() ma, in questo caso, il comando "string" viene anche eseguito. Questa funzione è stata introdotta per offrire all'utente la possibilità di utilizzare quei comandi che funzionano solo se digitati dall'utente, direttamente al prompt dei comandi (si conosce solo il comando "/MENU", nel caso specifico di quando si cerca di aggiungere elementi nella sezione $URL, $NICK, $TAB e similari, vedere XChat 2.0 Plugin Interface). Si suppone che questo sia un bug di XChat ed infatti non sono attualmente conosciuti degli script/plugin in grado di manipolare in modo autonomo i "menu speciali" di XChat. Questa funzione può essere usata anche senza parametri ed equivale alla pressione del tasto INVIO da parte dell'utente (se quindi al prompt era stato scritto un comando, questo verrà eseguito). 
    Ex: /budus ExecUserCommand() /MENU ADD "$URL/My Browser" "EXEC firefox %s"

    xchat_exit() Esce da XChat. 
    Ex: /budus xchat_exit()

    parser [n] Questo comando permette di inibire una o più parti del parser del plugin, cioè tutta quella zona dedicata alla gestione dei messaggi inviati dal server IRC necessari per comunicare ad XChat le attività svolte (utente che entra in un canale, quello che viene scritto, ecc..., tutto quanto ciò che accade su IRC viene comunicato attraverso messaggi che il client XChat deve interpretare e lo stesso lo fa anche BuDuScRiPt in modo parallelo e separato). Può capitare che il plugin manifesti probemi di funzionamento o stabilità. In questo caso può essere opportuno disabilitare una o più parti del programma al fine di individuare quale è la causa del problema. 
    Ex: /budus parser

    freemem Nel momento in cui, dopo un lungo ed intenso utilizzo di XChat, si verifichi un eccessivo consumo di memoria RAM, può essere d'aiuto liberare la memoria occupata dai dati del plugin, costringendolo a ripristinare solo il minimo indispensabile. Liberare la memoria, tra le altre cose, comporta il reset del database interno e quindi, se esso è attivo, sarà automaticamente ripristinato in base alla situazione corrente (questo può comportare numerosi messaggi d'errore per via della situazione anomala). 

    load_killed_user_file() Ricarica il database contenente la lista degli utenti da Abilitare/Ignorare in automatico alla ricezione di un messaggio privato (QUERY, NOTICE, INVITE) 

    add_killed_user() <nickname> [0 | 1] Aggiunge alla lista degli utenti da Abilitare/Ignorare in automatico alla ricezione di un messaggio privato (QUERY, NOTICE, INVITE) il nickname passato come parametro. E' opzionalmente possibile specificare (per default è 0) se inibire (0) o abilitare (1) in automatico i messaggi aggiungendo il parametro numerico. Gli utenti aggiunti con questa funzione sono temporanei, ricaricando il database (vedi load_killed_user_file()), la lista viene ripristinata in modo conforme al file su disco (private_killer.txt). 

    del_killed_user() <nickname> Elimina dalla lista degli utenti da Abilitare/Ignorare in automatico alla ricezione di un messaggio privato (QUERY, NOTICE, INVITE) il nickname passato come parametro. Gli utenti eliminati con questa funzione sono temporanei, ricaricando il database (vedi load_killed_user_file()), la lista viene ripristinata in modo conforme al file su disco (private_killer.txt). 

    print_killed_user_list() Elenca la lista degli utenti Abilitati/Ignorati in automatico alla ricezione di un messaggio privato (QUERY, NOTICE, INVITE). 

    flush_killed_user_list() Svuota la lista degli utenti Abilitati/Ignorati in automatico alla ricezione di un messaggio privato (QUERY, NOTICE, INVITE); l'operazione viene eseguita solo in memoria, il database su disco non viene alterato. 

    E v e n t s M a n a g e r
    Parola Chiave
    Parametro
    Descrizione

    add <ripetizioni> <evento> <condizione> <azione> Il comando permette di aggiungere una Sentinella.
    Ad ogni operazione di IRC (utente che entra nel canale, che cambia nickname, che scrive qualcosa, che viene kickato, ecc...) corrisponde un Evento che viene generato da BuDuScRiPt e che porta con se alcuni dati caratteristici:
  • nickname di chi ha generato l'evento
  • chi ha subito l'evento
  • indirizzo (host@domain) di appartenenza di chi ha subito l'evento
  • canale dove si è verificato l'evento
  • nome del server
  • dati associati all'evento (ad esempio il testo che un utente remoto ha scritto, la ragione per la quale è stato kickato, ecc.... - ed, infine, una serie di dati aggiuntivi come il numero della sentinella che ha reagito, il nickname dell'utente locale, il suo indirizzo, il percorso al file che contiene il database con tutti gli utenti presenti in tutti i canali di tutti i servers connessi)


  • Le Sentinelle reagiscono ad un determinato Evento in base a:
  • Numero di Ripetizioni (<ripetizioni>): Può essere un numero che va da 0 (zero) a N (1, 2, 3, ecc... il limite ` molto elevato !) e che rappresenta il numero di volte che la sentinella dovrà reagire se la sua condizione viene soddisfatta. Il numero 0 viene interpretato come "sempre", cioè una sentinella che ha 0 come numero di ripetizioni andrà a verificare sempre la sua condizione, mentre ad esempio con 2 lo farà, appunto, due volte e poi sarà come "morta" (anche se rimane in memoria e, chiedendo la lista delle sentinelle, sarà regolarmente elencata, anche se il suo contatore segnalerà che è esaurita).
    Usando ? (punto esclamativo) la sentinella verrą presa in considerazione fino a quando non verrà soddisfatta la sua condizione (quando ciò avviene la conseguenza è l'esecuzione della relativa azione), dopodichè, verrà automaticamente eliminata.
  • Nome Evento (<evento>): E' una parola chiave che determina a quale tipo di evento deve reagire la sentinella.
    Ad esempio se l'evento è text la sentinella verrà presa in considerazione solo per ciò che gli altri utenti scrivono nel canale o privatamente; allo stesso modo l'evento jchannel viene generato quando un utente - sia locale che remoto - entra in un canale.
    Per una lista completa degli eventi disponibili usare il comando /event help sentinels.
  • Condizione di verifica (<condizione>): La sintassi della condizione è:
    costante=variabile
    per la versione di equivalenza, oppure:
    costante!variabile
    per quella di disuguaglianza. Nel caso in cui si desideri una "condizione sempre vera" (praticamente è come se non ci fosse) si può utilizzare il semplice carattere '*' (ex: /event add 0 text * /ECHO $data). I due operatori del confronto sono:
    • costante rappresenta la parte di riferimento della condizione, ad esempio il nickname o il nome del canale che si vuole individuare
    • variabile rappresenta la parte di confronto della condizione, cioè i dati caratteristici che hanno generato l'evento
    NB: Il confronto non avviene per vera uguaglianza; la sentinella verifica semplicemente che la costante sia contenuta nella variabile. E' fondamentale porre attenzione a questa peculiarità per evitare di ottenere comportamenti non previsti.
    NB: Sia la costante che la variabile possono contenere variabili, cioè parole chiave che vengono sostituite, in fase di elaborazione, con un "valore" (i valori sono proprio i "dati caratteristici" descritti sopra); questa sostituzione avviene chiaramente prima di eseguire il confronto.
    Per una lista completa delle variabili disponibili ed il relativo significato usare il comando /event help sentinels. Ad esempio:
    'BuDuS:#buduscript'='$ru:$channel'
    La condizione deve verificare che il nickname dell'utente che ha subito l'evento e il canale dove quest'ultimo si è verificato sia rispettivamente BuDuS e #buduscript; si può notare l'uso delle variabili $ru (RemoteUser, Utente Remoto) e $channel (Canale).
    'ciao$_a$_tutti:#buduscript'='$data:$channel'
    La condizione deve verificare che sia stato scritto "ciao a tutti" nel canale #buduscript; dato che nè la costante nè la variabile può contenere spazi è necessario usare la variabile speciale $_.
    'pinkopallino:#xchat:irc.mioserver.net'='$ru:$channel:$server'
    Se pinkopallino è entrato nel canale #xchat del server irc.mioserver.net la condizione risulterà soddisfatta.
    Normalmente vengono utilizzati gli apici (') per evitare che la costante venga interpretata come Espressione Regolare POSIX e comunque per impedire risultati anomali, diversi da ciò che ci si aspetterebbe, infatti:
    BuDuS:#buduscript=$ru:$channel
    La condizione sarebbe verificata anche nel caso in cui il nickname dell'utente remoto risultasse una cosa come "BiBuDuS" e il nome del canale fosse "#buduscripter"; infatti lo script verifica che la costante sia contenuta, in qualsiasi posizione, nella variabile, quindi se sostituissimo la variabile con i dati di esempio otterremmo:
    BuDuS:#buduscript=BiBuDuS:#buduscripter
    Se la costante inizia con un apice (') e non è presente quello alla fine, questi viene automaticamente eliminato e la condizione viene valutata senza interpretare la costante come un'Espressione Regolare POSIX. Per evitare che l'apice venga eliminato ma che comunque la costante non sia interpretata come una Espressione Regolare POSIX, usare \'.
    Le Espressioni Regolari POSIX sono un sistema per definire un "insieme di stringhe". Tramite questo sistema è possibile realizzare condizioni piuttosto complesse, che consentono con una sola sentinella di ottenere lo stesso risultato altrimenti possibile (e non è scontato) con ben più di una.
    Fare riferimento alla documentazione fornita con il software per un uso avanzato delle sentinelle con regexp o visitare il Forum.
    Per una lista completa delle variabili disponibili usare il comando /event help sentinels.
  • Azione da eseguire (<azione>): Rappresenta ciò che la sentinella deve fare se la condizione per l'evento monitorato viene soddisfatta (chiaramente le ripetizioni non devono già essere esaurite). Può essere un comando IRC e/o BuDuScRiPt, ad esempio:
  • /budus allsess /ECHO %C4,1Nel canale $channel è stata scritta la frase $data.
    Viene inviata in tutte le sessioni aperte il comando /ECHO ..., con la peculiarità che le variabili $channel e $data saranno opportunamente sostituite, prima di eseguire il comando (rispettivamente con il nome del canale e ciò che è stato scritto).
    /ECHO comando 1\;/ECHO comando 2\;/ECHO comando 3
    Utilizzando il separatore \; è possibile fare in modo che vengano eseguite più azioni, una di seguito all'altra.
    /ECHO eseguo il comando 1\;/event event spcl_miasentinella $lu $ru $rhost $channel $server $data
    Dopo aver eseguito un primo comando, viene invocata la generazione di un evento speciale (gli eventi speciali sono generati dall'utente e hanno la peculiarità di avere dei "nomi dinamici"; una sentinella, come azione, può avere il compito di creare un'altra sentinella, magari darle un "nome speciale", ad esempio sfruttando le variabili come: spcl_miasentinella_$ru_$channel).
    E' possibile separare più azioni tramite l'utilizzo della sequenza \; e, nel caso in cui l'azione sia costituita da un comando che, a sua volta, deve creare una sentinella che dovrà contenere comandi multipli, quest'ultimi potranno essere separati dalla speciale parola chiave _BUDUS_SEPARATOR_, come ad esempio:
    /event add 0 jchannel 'amico'='$ru' /ECHO Inserisco un'azione\;/event add 0 text 'prova'='$data' /ECHO Comando1_BUDUS_SEPARATOR_/ECHO Comando2\;/ECHO Ho inserito un'azione multipla
    Si crea una sentinella che risponde all'evento jchannel che, quando soddisfatta, ne crea un'altra contenente a sua volta 2 comandi; da notare che il comando "/ECHO Ho inserito un'azione multipla" appartiene alla sentinella principale, non a quella che reagisce all'evento text.
    Ex: /event add 0 jchannel '#miocanale'='$channel'/SAY Ciao $ru, sei il benvenuto in $channel\;/VOICE $ru
    Ex: /event add 0 jchannel 'nickname:#miocanale'='$ru:$channel'/SAY Mi dispiace $ru, non sei il benvenuto in $channel !\;/KICK $ru
    Ex: /event add 0 text ^(Giorno|Salve|Ciao)[$_]*$nick([$_,]|$)='$data' /SAY Ciao $ru

    mod <numero_sentinella> <ripetizioni> <evento> <condizione> <azione> Consente di modificare una "Sentinella"; a differenza del comando add, bisogna prevedere QUALE sentinella modificare specificandone il NUMERO. Il numero di sentinella lo si ottiene chiedendo la lista di quelle inserite con /event list
    Ex: /event mod 1 0 text ^(Giorno|Salve|Ciao)[$_]*$nick([$_,]|$)='$data' /SAY Ciao $ru

    del <numero_sentinella> Consente di eliminare una "Sentinella" specificandone il NUMERO; Il numero di sentinella lo si ottiene chiedendo la lista di quelle inserite con /event list
    Ex: /event del 1

    lastdel Cancella l'ultima "Sentinella" inserita. 
    Ex: /event lastdel

    flush Cancella TUTTE le sentinelle inserite. 
    Ex: /event flush

    chk <ripetizioni> <evento> <condizione> <azione> Consente di verificare se una "Sentinella" e' stata costruita sintatticamente in modo corretto e se l'eventuale espressione regolare presente nella condizione e' accettabile prima di utilizzare il comando add
    Ex: /event chk 0 text ^(Giorno|Salve|Ciao)[$_]*$nick([$_,]|$)='$data' /SAY Ciao $ru

    reset <numero_sentinella> Le "sentinelle" che hanno un valore di "Ripetizione" maggiore o uguale a 1 e che sono gia' state eseguite (una cosa e' "valutarle" un'altra e' "eseguirle"; una sentinella e' "eseguita" quando la sua "Azione" viene attivata) possono essere "riattivate" usando questo comando. 
    Ex: /event reset 1

    list [keyword] [-] Elenca le "sentinelle" inserite. Se viene specificata anche la [keyword], elenca solo quelle che la contengono; specificando, oltre alla [keyword], anche il carattere '-', tutte le sentinelle che contengono la parola cercata vengono automaticamente eliminate. 
    Ex: /event list
    Ex: /event list spcl_myevent
    Ex: /event list spcl_myevent -

    read [file] Carica le "sentinelle" salvate su disco. 
    Ex: /event read

    save [file] Salva le "sentinelle" inserite (presenti solo in memoria) su disco. 
    Ex: /event *esempio*

    event <evento> <lu> <ru> <rhost> <channel> <server> <data> Consente di generare un "Evento BuDuScRiPt" (vedi "/event help sentinels") o un "Evento Speciale" (cioè creato dall'utente). L'utente ha possibilità di inserire "sentinelle" che rispondo a "Eventi Speciali" (il cui nome viene determinato all'atto della creazione della sentinella che dovrà reagire al medesimo) e di generare il corrispondente evento tramite questo comando. Cio' consente di creare "concatenazioni di eventi" o comunque realizzare sentinelle che, avendo un "nome di evento personalizzato in base ad una variabile" (si possono infatti usare le variabili $lu, $ru, $rhost, $channel, $server e $data, come ad esempio: spcl_$ru), verranno valutate solo in determinate condizioni, a seconda di come sono realizzate. 
    Ex: /event event spcl_esempio $lu $ru $rhost $channel $server $data
    Ex: /event event spcl_esempio $event_params
    Affinchè il comando funzioni è necessario specificare i 6 parametri che rispettivamente prevedono il nickname dell'utente locale, il nickname dell'utente remoto, l'hostname dell'utente remoto, il nome del canale, il nome del server e il dato caratteristico dell'utente (ad esempio per un evento di tipo text il dato caratteristico è ciò che viene scritto, per un mode e la lettera corrispondente alla modalità e così via). Al posto di "$lu $ru $rhost $channel $server $data" è possibile usare la variabile $event_params, ma questa sarà risolta solo se usata con i comandi "/event add" ed "/event mod". Da notare che le variabili vengono risolte solo quando il comando "/event event" viene eseguito come azione di un'altra sentinella; in altri termini, lanciando manualmente il comando, nessuna variabile viene risolta. Nel caso in cui si abbia la necessità di generare un evento dove compaia il nome del network anzichè quello del server è possibile usare la variabile $hostname al posto di $server.

     
      Ritorna alla pagina principale