01 Primi passi con il mIRC Scripting


Introduzione e sintassi

Questa guida è dedicata a coloro che hanno appena iniziato ad avventurarsi nel meraviglioso mondo del mIRC Scripting, nel quale vivo giorno e notte (o quasi) 😛
In questo documento userò spesso degli esempi per illustrare al meglio ciò che voglio dire, perciò è meglio usare un metodo chiaro e comprensibile anche da voi. I comandi sono contrassegnati dalle parentesi graffe { } alle loro estremità oppure dalla slash all’inizio (ad es. { comando } è la stessa cosa di /comando). I parametri del comando sono simboleggiati dai caratteri maggiore e minore > < quando sono obbligatori, mentre quando non lo sono ci saranno pure le parentesi quadre [ ] (ad es.  /comando <parametro obbligatorio> [<parametro non obbligatorio>]. Quindi, descrivendo il comando /kick, scriverò: /kick <canale> <nick> [<motivo>].
Premetto che non sempre includerò nella sintassi dei comandi tutti i parametri, in quanto diverrebbe per voi troppo difficile comprendere al meglio le funzionalità che io vorrò descrivervi.

mIRC Editor

Innanzitutto vediamo cosa si può fare con questo mIRC: apriamo quindi il mIRC Editor, un’utilità di mIRC che ci permette di aggiungere funzionalità al nostro futuro script. Per farlo premiamo contemporaneamente i tasti Alt e r.
Si presenta una finestra con dei tab (le linguette Aliases, Popups,… per intenderci) e un grande spazio vuoto nel quale possiamo sbizzarrirci a creare ciò che più ci piace.

Gli Aliases

Prendiamo ora in considerazione la prima di queste 5 linguette, quella dedicata agli Aliases. In questa sezione possiamo creare dei comandi che ne richiamino degli altri; mi spiego meglio con un esempio presente anche nel vostro mIRC (se leggete alla prima riga del file aliases.ini):
/op /mode # +ooo $$1 $2 $3 che significa che quando digiterete /op <nick> , verrà richiamato il comando citato sopra, che consiste nell’impostare la modalità +o nel canale attivo sui 3 nick – o meno – che citerete nel comando. Gli identificatori (tutte le parole precedute da $) $$1 $2 $3 stanno a rappresentare rispettivamente il primo il secondo e il terzo nick digitati dopo il comando, perciò scrivendo /op SkY otto nel canale #mIRCMania, direte al vostro script di oppare in #mIRCMania SkY e otto.
Potete sbizzarrirvi nella creazione di aliases, che possono incrementare la rapidità del vostro script (anche se oggi, data la potenza dei processori, non conta più molto) e che vi permettono di svolgere un’azione in un modo molto più veloce.

I popups

La seconda linguetta dà la possibilità di personalizzare i menu cosiddetti a tendina che compaiono quando si clicca:
– sulla scritta Commands nella barra dei menu
– col tasto destro nella lista dei nick (di default si trova sulla destra in un canale)
– col tasto destro nella finestra di status (l’unica aperta all’avvio)
– col tasto destro in un canale
– col tasto dentro in una finestra di query

La struttura dei menu è così:

Menu 1
.Sotto menu 1:/comando1
.-
.Sotto menu 2:/comando2
.Sotto menu 3:/comando3
-
Menu 2:/comando4
Menu 3
.Sotto menu 1
..Sotto sotto menu 1:/comando5
.-
.Sotto menu 2:/comando6

Ma ora spieghiamo nei dettagli i caratteri necessari per la creazione dei menu:
Рil carattere . serve a indicare che il menu in questione ̬ un sottomenu.
– il carattere : serve a separare la parte visibile, la voce del menu, dalla parte che svolge i comandi descritti quando il menu viene selezionato.
– il carattere – inserisce nel menu una linea orizzontale

I remote

Questa è senz’altro la linguetta principale del mIRC, nella quale vi è la possibilità di svolgere una miriade di cose: dalla definizione di aliases e popups alla creazione di finestre personalizzate, dall’esecuzione di comandi in seguito a certi eventi alla lettura di pagine internet e molto altro ancora.
In questo documento tratteremo solamente alcune delle molte possibilità di uso dei Remote.

La definizione degli Aliases

Molto semplice, tramite il prefisso alias. Sintassi: alias <nomealias> <comando>

La definizione dei Popups

Anche qui la storia non è difficile, grazie al prefisso menu. Sintassi: menu <Status|Channel|Query|Nicklist|Menubar> { e poi, andando a capo, la stessa struttura che abbiamo visto nel capitolo precedente, conclusa dal carattere }

Gli eventi

In questo capitolo vedremo in che modo far eseguire allo script dei comandi soltanto quando si verificano determinati eventi. La sintassi generica degli eventi è ON <livello>:<evento>:<parametri_dell_evento>:{ comando }.
Prendiamo ora in considerazione ciascuno degli elementi sopra citati:
<livello> rappresenta il numero assegnato ad un utente (l’argomento verrà aprrofondito nel prossimo capitolo). Il carattere * include tutti i livelli.
<evento> Ã¨ il tipo di evento che deve avvenire, ad esempio TEXT rappresenta l’azione che avviene ogniqualvolta un utente scriva un testo.
<parametri_dell_evento> sono i parametri – che sono diversi per ogni tipo di evento – aggiuntivi, ma che possono comunque essere sostituiti dal carattere *. Ad esempio, i parametri dell’evento TEXT, sono <testo> e <luogo_dove_si_verifica_l’evento>.
In definitiva, la sintassi dell’evento TEXT è: ON <livello>:TEXT:<testo>:<*|?|#>.

Gli user

In questa linguetta si possono definire dei livelli per un certo indirizzo. Quello che abbiamo visto nei Remote, quando un certo evento, per poter essere “innescato”, doveva essere compiuto da un dato livello di utente, ora lo possiamo mettere in pratica con gli User. Analizziamo l’esempio seguente:

Questo esempio ci fa capire che, quando un utente di livello 5 o 7 (ON 5/ON 7) scrive un testo (TEXT) contenente ciao e il mio nick (*ciao $me*) in un qualsiasi canale (#), lo script scriverà in quel canale il messaggio Ciao con il nome del nick (msg $chan Ciao $nick) e poi, se il livello dell’user è 5, scriverà vecchio amico!; se invece si tratterà di un utente con il livello 7, scriverà quand’è che ci si vede?.

ON 5:TEXT:*ciao $me*:#:{ msg $chan Ciao $nick $+ , vecchio amico! }
ON 7:TEXT:*ciao $me*:#:{ msg $chan Ciao $nick $+ , quand'è che ci si vede? }

Nota relativa a Ciao $nick $+ ,: ho dovuto inserire l’identificatore $+ al fine di poter visualizzare la virgola attaccata al nick dell’utente, senza lo spazio. Se scrivessi $nick,, lo script lancerebbe il messaggio Ciao $nick, senza sostituire $nick con il nick dell’utente; altrimenti se scrivessi Ciao $nick ,, verrebbe visualizzato Ciao nickname_dell’utente , (notare lo spazio).

Per aggiungere un user ci sono 2 modi: il primo è il più semplice, basta aggiungerlo manualmente nel mIRC Editor, con la seguente sintassi: <livello>:<indirizzo>.
Il secondo metodo invece consiste nello scrivere un comando direttamente nell’editbox di una qualsiasi finestra (la casella di testo dove scrivete abitualmente i vostri messaggi di chat), con la seguente sintassi: /auser [-a] <livello> <indirizzo>.
Nota: <indirizzo> dev’essere strutturato così: nick!mask@host.dominio. Tutt’e quattro possono essere costituiti o contenere il carattere * che rappresenta la parola “qualsiasi”. *!*@* rappresenta tutti gli utenti.
Per rimuovere è la stessa cosa: manualmente si cancella tutta la riga, mentre da editbox, il comando è /ruser [<livello>] <indirizzo>.

Le variabili

Le variabili sono degli elementi che possiamo includere in un comando e che possono appunto variare a dipendenza delle esigenze dell’utente.
Come per gli user, anche per le variabili ci sono due tipi di settaggio: quello manuale consiste nello scrivere %<nomevariabile> <contenuto>, mentre quello “automatico”, consiste nel comando /set [-u#] %<nomevariabile> <contenuto>. La flag -u dice allo script di eliminare la varabile dopo i secondi #. Per settare una variabile temporanea, che viene automaticamente eliminata alla fine del comando si usa /var %<nomevariabile> <contenuto>. Per eliminare manualmente una variabile si cancella la riga di testo contenente la variabile in questione, altrimenti si usa il comando /unset <variabile>.

Appendice 1 – Le variabili e gli identificatori nei Remote (il comando if-then-else)

Analizziamo questo codice:

ON *:OP:#:{ if ($opnick == $me) { msg $chan Grazie mille $nick per avermi oppato } }

La prima parte (ON *:OP:#) la conosciamo bene: è la struttura dell’evento OP, ma la seconda parte – quella del comando – è una novità. La parola if, dall’inglese se, significa che il comando specificato in seguito è da eseguire soltanto se la o le condizioni indicate tra parentesi tonde () sono soddisfatte. In questo caso la condizione è ($opnick == $me), che significa che il nick oppato devo essere io. Se è vero, lo script scriverà nel canale in questione il messaggio Grazie mille nick_che_mi_ha_oppato per avermi oppato.
Ma vediamo invece questo codice più sviluppato del precedente:

ON *:KICK:#:{
if ($knick == $me) { msg $nick Molto gentile, grazie! }
else if ($knick != $me) && ($nick == $me) { 
if (%kcounter) { msg $knick Ciao ciao | inc %kcounter }
else { msg $nick Sei il primo utente che kicko, wow! | inc %kcounter }
}
}

Spaventati? Nessun problema, ecco la traslazione dal mIRC Scripting all’italiano:
Quando qualcuno viene kickato, se questo qualcuno sono io, dico in query all’autore del kick Molto gentile, grazie!, altrimenti, se non sono io la vittima, bensì sono l’autore del kick:
– se la variabile %kcounter esiste ((%kcounter) equivale a (%kcounter != $null)), dico alla vittima (sempre in query) Ciao ciao e aumento la variabile %kcounter di 1
– se invece non esiste, dico alla vittima Sei il primo utente che kicko, wow! e aumento la variabile %kcounter che diventerà 1.

Appendice 2 – Esercizi

1. Se mi danno il voice dico nel canale Grazie nick_che_mi_ha_voicato! (senza spazio tra “voicato” e “!”). L’identificatore del nick voicato è $vnick
2. Creare nei Remote il comando /script che scriva nel canale attivo (rappresentato da $active) il nome del mio script
3. Aggiungere la voce “Miei documenti” nella menubar che apra la mia cartella di documenti (comando /run <file | cartella>)

Autore: Sky













Soluzioni:
1. ON *:VOICE:#:{ if ($vnick == $me) { msg # Grazie $nick $+ ! }
2. (con il nome dello script TropiC) alias /script /msg $active TropiC
3. (con i miei documenti in C:\SkY`\) menu Menubar {
Miei documenti:/run C:\SkY`\
}