sabato 31 luglio - 02:48
Google
 
Menù
  Home
  Come nasce IRC-Zone
  Glossario Informatico
  News
  I nostri progetti
  I nostri servizi
  Partners
  Diventa un Partner

IRC
  Cos'è IRC
  Storia di IRC
  Netiquette su IRC
  Emoticons
  Gergo della chat
  Lista Servers
  RFC 1459
  Shell Hosting

mIRC
  Cos'è il mIRC
  FAQ mIRC
  Configurazione mIRC
  Download mIRC
  Novità
  Script Stranieri
  Script Italiani
  MTS
  MTS Engine

mIRC Addon
  mIRC addon Audio
  mIRC addon SMS
  mIRC addon Grafica
  mIRC addon Utility
  mIRC addon Uso Bot

Client IRC
  Client IRC Linux
  Client IRC Mac
  Client IRC Win

XChat
  Cos'è XChat
  XChat per Win
  XChat per Unix

KVirc
  Cos'è KVirc
  FAQ KVirc
  Installazione su Linux
  KVirc Scripting
  KVirc per Mac
  KVirc per Win
  KVirc per Unix
  KVirc addon

Irssi
  Cos'è Irssi
  Download Irssi
  Download Moduli

Eggdrop/Windrop
  Cos'è un Eggdrop
  Download Eggdrop
  Configurazione Eggdrop
  Download Windrop
  Installazione Windrop

Tcl
  Download TCL
  Tutorial TCL scripting
  Documenti/Guide

BNC
  Cos'è un psyBNC
  Download psyBNC
  Configurazione psyBNC
  Download sBNC
  Configurazione sBNC

Linkaci!
footer

Credits
Somerights

Donazione con Paypal
footer

Statistiche
Ip: 38.107.191.107
Download: 486119 file
Totale: 654577 MB

footer



Art of Scripting Vol. 1 - Cicli, condizioni e alias

Autore: GrifisxData: 2005-11-17
Modificato: 2005-12-17 Letture: 1084
Torna indietroStampa articoloInvia ad un amico

Start:

A cosa serve fare uno script? La risposta è semplice, serve a facilitarsi la vita in chat, a trasformare il nostro client IRC nell'ambiente che vogliamo sia perfetto per noi, con le nostre comodità, i nostri pulsantini… insomma tipo la nostra camera per intenderci.
Premesso questo, andiamo subito al dunque, poche parole e molto codice, ovviamente opportunamente spiegato.
Suppongo abbiate il vostro client KVIrc lì vicino, scaricate l'ultima versione, se siete utenti linux compilate la versione cvs o prendete una snapshot già impacchettata, se siete utenti Windows scaricate l'ultima SNAPSHOT (non la stabile).
Troverete la snapshot più aggiornata qui.

Adesso per iniziare andiamo ad attivare la barra che ci permetterà di poter creare i nostri script.
Dal KVIrc:
Impostazioni-->Barre degli strumenti-->Mostra scripting.
Vedrete apparire la barra con i pulsanti che permetteranno di rendere il KVIrc ancora più accogliente e soprattutto personalizzarlo come più piace.
In questo volume parlerò degli alias e di come usarli.
Gli alias sono dei comandi, in poche parole possiamo aggiungere comandi nostri, personalizzati, a quelli che già esistono sul client.
Per farlo dobbiamo, per prima cosa, aprire l’editor degli alias usando il pulsantino con lo [/a] verde che appare nella barra dello scripting, e crearci un nuovo comando (o alias come preferite):
fate tasto destro sulla lista di comandi che vedrete alla vostra sinistra e createne uno, apparirà col nome "alias", nome che provvederemo a cambiare portandoci sulla riga bianca che appare sopra la finestra nera di destra e cambiando la scritta alias con, ad esempio,"ciao".
Adesso metteremo del codice dentro l’alias appena creato, il codice dell'esempio farà in modo di salutare tutti quelli che ci sono su un canale fermandosi comunque a 6 utenti (magari può sembrare inutile, ma ci serve per capire alcune cose, e poi... niente è veramente completamente inutile).
Il codice lo spiegherò molto approfonditamente quindi niente paura =).

# code n1
%idx=6;
foreach(%i,$chan.users){
if(%idx==0) {
say Azzo siete moltissimi =D ciaO a Tutti AlloRA!;
break;
}
say ciao %i;
%idx--;
}
# end code

Cominciamo subito col dire che non vi spiegherò la sintassi di tutti i comandi del KVIrc, dato che dovrete imparare a convivere con il manuale del KVIrc: infatti basta fare Aiuto-->Browser help.. e vi apparirà il manuale che sarà il vostro fido compagno.
Esaminiamo il codice sopra incollato:

# code n1

Questo è un semplice commento: i commenti in kvs (kvs = KVIrc scripting) si fanno facendo precedere la riga dal simbolo del cancelletto "#"

%idx=6;

Qui invece sto inizializzando la variabile %idx, in kvs le variabili si fanno precedere dal simbolo di percentuale. Inoltre è differente scrivere %Idx e %idx, poiché le variabili con nome che cominciano per una lettera maiuscola, sono variabili che il KVIrc considererà globali, ciò comporta che non si distruggono da sole ma è necessario che l'utente le cancelli appositamente assegnandogli un valore nullo (nel nostro esempio potremmo fare %Idx=""), e possono essere, inoltre, viste anche da altri script del nostro client; mentre quelle che iniziano per lettera minuscola avranno la stessa durata dell’esecuzione del comando o della funzione in cui esse si trovano dopodiché si autodistruggeranno.

Per capire meglio, andiamo nella riga di input di una qualsiasi finestra e digitiamo:

/%prova =3

e dopo

/echo %prova

come vedrete il risultato è ...niente, non c'è risultato, poiché la vita di %prova è durata solo per l'esecuzione del comando /%prova =3 dopodiché è andata distrutta.

Se, invece, scriviamo:

/%Prova =3

/echo %Prova

Possiamo vedere che il risultato è 3, quindi con la lettera maiuscola la variabile ha continuato a vivere anche dopo l'esecuzione del primo comando.
Nel nostro codice inizializziamo la variabile a 6 (il numero massimo di persone che voglio salutare, per evitare di fare troppi "ciao nick" in un canale con moltissimi utenti).

foreach(%i,$chan.users){
codice
}

Qui uso il comando foreach; la sintassi del comando potrete vederla nella guida del KVIrc mentre il $chan.users è una funzione del KVIrc, che restituisce, in un array (considerate un array come una lista) tutti i nick delle persone presenti sul canale (per vedere le altre funzioni vi rimando sempre al solito help).

Per rendercene conto in modo pratico andiamo sul un canale qualsiasi e proviamo a scrivere:

/echo $chan.users

Da me il risultato è:

[09:31:00] Grifisx_away,morfeux,AM1C0H4CK3R,Cif,franzi_,MysteryBETA,nonno_rik,ohi[gentoo],ohiahiohi,redsend,Scorp[ZzZ],zerymo.

Quel %i, che troviamo nel foreach invece indica, secondo la sintassi del comando, un elemento (quello attuale) dell' array.
Pertanto il codice che abbiamo scritto significa, "per ciascun elemento(foreach) presente nell’array $chan.users esegui questo codice { codice da eseguire }" ed adesso andiamo a vedere il codice che gli faremo eseguire.

if(%idx==0) {
say Azzo siete moltissimi =D ciaO a Tutti AlloRA!;
break;
}

Qui facciamo un piccolo controllo che ci eviterà di salutare tutti sul canale, e limiterà il saluto a solo 6 persone.
Se (la variabile %idx è = a zero) esegui questo codice { codice }
say è un comando di KVIrc che serve per scrivere del testo in una particolare finestra.
break invece serve per interrompere un ciclo, in questo caso interromperà il ciclo foreach.
Quindi qui viene detta(say) la frase "siete moltissimi =D ciaO a Tutti AlloRA!" dopodiché il ciclo si interrompe.
Ma vediamo cosa succede se la condizione sopra (if(%idx==0)) non è vera:

say ciao %i;
%idx--;

Questo significa: dici ciao %i (%i abbiamo detto è l'elemento attuale dell' array in cui stiamo ciclando quindi il nick attuale) e diminuisci %idx.
Quindi al primo "giro" %idx è = a 6, la condizione (%idx=0) non si verifica, dice "ciao nick" diminuisce %idx, che diventa 5 e ricicla, la condizione non si verifica, dice "ciao nick" etc etc, fino a quando %idx sarà = 0, allora la condizione si verificherà, e uscirà dal ciclo foreach.
Ok, andiamo a vedere un po' prima di cominciare a rimettere mani al nostro codicillo alcuni comandi particolari di KVIrc:
Proviamo a portarci sulla linea di input del nostro canale preferito e premere:
-CTRL+B ci apparirà un simbolo, tutto quello che scriveremo dopo, gli utenti del canale lo leggeranno in grassetto (b sta per Bold);
-CTRL+U sottolineato;
-CTRL+K colorato;
gli altri comandi poi li andiamo a vedere sul manuale per adesso ci bastano questi=P.
In scripting per scrivere bold si usa $b(), per scrivere sottolineato $u(), per scrivere colorato $k(,[ numero colore sfondo])
Proviamo subito portandoci sulla nostra linea di input e digitando:
/echo $b()Ciao a tutti
Dopo di che andiamo a mettere mani al nostro codice e modifichiamolo come segue:

# code n1
%idx=6;
foreach(%i,$chan.users){
if(%idx==0) {
say Azzo siete moltissimi =D ciaO a Tutti AlloRA!;
break;
}
say Ciao $k($rand(12))%i;
%idx--;
}
# end code

La cosa che dobbiamo esaminare è solo il comando che qui appare in più, cioè $k($rand(12)), e allora qui è semplice perché $k() abbiamo visto che serve per indicare un colore, mentre $rand() se andiamo a guardare nella nostra guida (il famoso help del kvirc) vedremo che serve per avere un numero casuale nell'intervallo che noi gli andiamo a dare tra le parentesi ad esempio provate uno:
/echo $rand(12)
vedrete che il risultato sarà un valore numerico tra 0 e 12.
A questo punto qualcuno potrebbe anche volere che non vengano scelti 2 colori uguali di seguito, perché nella casualità questo potrebbe accadere, allora dobbiamo inventarci un controllo che vada a modificare il numero di colore attuale se esso risulterà, casualmente, uguale a quello precedente.
Quindi, prima cosa dobbiamo conservarci il vecchio valore, il che significa che dobbiamo creare una variabile che lo memorizzi, dopo di che dobbiamo andare a confrontare il valore nuovo con quello vecchio e se sono uguali modificare quello nuovo (ad esempio aggiungendogli 1 cosi non è uguale a quello di prima).
Trasformiamo in codice:
Creiamo la variabile %oldColor e la inizializziamo a 0;
Creiamo la variabile %newColor e la inizializziamo con $rand(12);
Creiamo il controllo, se %oldColor == %newColor allora %newColor++;
Immagazziniamo in %oldColor il valore attuale di %newColor;
In codice reale uscirà fuori:

%idx=6;
%oldColor =0;
foreach(%i,$chan.users){
%newColor=$rand(12)
if(%idx==0) {
say Azzo siete moltissimi =D ciaO a Tutti AlloRA!;
break;
}
if (%newColor==%oldColor){ %newColor++;};
say Ciao $k(%newColor)%i;
%oldColor=%newColor;
%idx--;
}

Qui le cose da notare non sono molte, per prima cosa, ovviamente, che l'inizializzazione della variabile %oldColor è al di fuori del ciclo, altrimenti si reinizializzerebbe ogni volta, il resto credo sia abbastanza chiaro.
Però... io sono poco accontentabile quindi mi piace complicarmi la vita e voglio anche che i nick me li scriva alternando una lettera maiuscola ad una lettera minuscola =D.
Prima di andare a vedere il codice seguente, vi consiglio di aprire il manuale del KVIrc alla voce funzioni e poi alla lettera s, qui vedrete che ci sono tutte le funzioni che ci permettono di modificare le stringhe; sono quelle con $str.xxxxxx, siccome a noi serve una trasformazione maiuscolo/minuscolo e viceversa, quelle più adatte come vedrete sono:
$str.upcase()
$str.lowcase()

Come al solito, per provare, andiamo alla linea di input e spariamo il comando:
/echo $str.upcase(“provaaaa”)
Dopo di che siccome non vogliamo andare a convertire tutti i nick (sarebbe stato troppo facile) ma una lettera per volta, dobbiamo andare a trovare una funzione che ci divida la stringa, funzione che io ho trovato nella
$str.section ( < stringa_da_dividere >, , , ).
Proviamo subito con l'echo
/echo $str.section( "Nome**Cognome**Nick**Telefono","**", 2, 2 );
il risultato sarà "Nick".
Inoltre mi servirò della funzione $str.len(), che mi restituisce la lunghezza della stringa.
ok... adesso vediamo il codice:

%idxN=6;
%oldColor =0;
foreach(%i,$chan.users){
%szNick=%i
%idx=1
%itmp=1
while(%idx!=($str.len(%szNick)+1))
{
if(%itmp==1)
{
%sztmp =$str.upcase($str.section(%szNick,"",%idx,%idx));
%itmp=0
}
else
{
%sztmp =$str.lowcase($str.section(%szNick,"",%idx,%idx));
%itmp=1
}
%szNickColorato=%szNickColorato%sztmp
%idx++;
}

%newColor=$rand(12)
if(%idxN==0) {
echo Azzo siete moltissimi =D ciaO a Tutti AlloRA!;
break;
}
if (%newColor==%oldColor){ %newColor++;};
say Ciao $k(%newColor)%szNickColorato;
%szNickColorato=""

%oldColor=%newColor;
%idxN--;
}

Bene, cominciamo ad esaminarlo un po', in fondo non è cosi complicato.
Ho cambiato %idx in %indxN solo per comodità, perché poi uso un'altra variabile come indice e siccome gli indici mi piace chiamarli %idx, allora per non confonderli qui ho messo la N finale.
Inizializzo le variabili necessarie e poi comincio il mio ciclo per la trasformazione.
Controlliamo prima i passaggi salienti della trasformazione e poi il motore di essa:
while(%idx!=($str.len(%szNick)+1))
Fino a quando la variabile %idx è diversa dalla lunghezza del nick + 1 (fino a quando non raggiungiamo la fine del nick;
%sztmp =$str.upcase($str.section(%szNick,"",%idx,%idx))
%sztmp è uguale alla lettera trasformata in Maiuscola, in pratica qui io seziono il nick(%szNick) in base al carattere ""(cioè a nessun carattere, significa che viene divisa lettera per lettera) a partire dall'indice attuale fino ad arrivare all'indice attuale stesso, mettiamo il caso che il nick è Grifisx
/echo $str.section("Grifisx","",1,1)
vedrete che vi darà "G".
Bene quindi fare ad esempio
/echo $str.lowcase($str.section("Grifisx","",1,1))
ci porterà come risultato "g", perché è la stessa cosa di
/echo $str.lowcase(“G”).
Dopo come vedete nel codice
setto %itmp=0 questo è un modo per far si che al prossimo giro, non entri più in questo if ma vada nell'else, %idx inoltre crescerà ad ogni giro quindi sarebbe come fare:
$str.upcase($str.section("Grifisx","",1,1))
$str.lowcase($str.section("Grifisx","",2,2))
$str.upcase($str.section("Grifisx","",3,3))
$str.lowcase($str.section("Grifisx","",4,4))

Poi come vedete faccio un %szNickColorato=%szNickColorato%sztmp questo perché %sztmp contiene la lettera attuale trasformata, nel caso di Grifisx mettiamo “g”, quindi il ragionamento è questo:
Dato che %szNickColorato è vuoto all'inizio avremo :
%szNickColorato=%szNickColorato%sztmp --> ""=""g
A questo punto %szNickColorato sarà uguale a “g”, quindi al secondo giro avremo:
%szNickColorato=%szNickColorato%sztmp --> g=gR (perché %sztmp conterrà la seconda lettera del mio nick in maiuscolo)
A questo punto %szNickColorato sarà uguale a "gR", quindi al terzo giro avremo:
%szNickColorato=%szNickColorato%sztmp --> gR=gRi
e cosi via fino a quando
while(%idx!=($str.len(%szNick)+1))
quindi fino a quando non si supera la lunghezza del mio nick di 1, (in poche parole il mio nick è finito).
Benissimo siamo a sei pagine di tutorial però, è ancora presto per dire basta, adesso vogliamo che la scritta "Azzo siete moltissimi =D ciaO a Tutti AlloRA!" sia tipo arcobaleno!
Quindi, mettiamo mano al nostro codice e inventiamoci un modo per trasformare una stringa in un arcobaleno.

%idxN=6;
%oldColor =0;
foreach(%i,$chan.users){
%szNick=%i
%idx=1
%itmp=1
while(%idx!=($str.len(%szNick)+1))
{
if(%itmp==1)
{
%sztmp =$str.upcase($str.section(%szNick,"",%idx,%idx));
%itmp=0
}
else
{
%sztmp =$str.lowcase($str.section(%szNick,"",%idx,%idx));
%itmp=1
}
%szNickColorato=%szNickColorato%sztmp
%idx++;
}
%newColor=$rand(12)
if(%idxN==0) {
%szFrase= "Azzo siete moltissimi =D ciaO a Tutti AlloRA!";
%idxW=1
while(%idxW!=($str.len(%szFrase)+1))
{
%sztmp2 = $str.section(%szFrase,"",%idxW,%idxW)
%szFraseColorata=%szFraseColorata$k($rand(15))%sztmp2
%idxW++;
}
say %szFraseColorata;

break;
}
if (%newColor==%oldColor){ %newColor++;};
say Ciao $k(%newColor)%szNickColorato;
%szNickColorato=""
%oldColor=%newColor;
%idxN--;
}

Non credo ci sia molto da spiegare, perché alla fine avete già visto un po' tutti i costrutti. Quindi credo che sia meglio finire qui.
Una raccomandazione, questo scriptino che abbiamo fatto, può risultare fastidioso in molti canali, l'unico scopo per cui l'abbiamo creato è che, come vedete, ci è servito per cominciare a capire i costrutti e i ragionamenti che, più avanti, ci porteranno alla creazione di cose molto più complesse.
Prima di salutarci però voglio chiudere il discorso sugli alias, dicendovi come si fa a passare un "argomento" ad un alias, vi faccio subito un esempio:
Mettiamo il caso che io voglia scrivere
/colora "ciao ragazzi"

e che l'alias colora, che ho creato in precedenza, mi debba colorare la scritta "ciao ragazzi", cioè a dire voglio dare io la scritta da colorare di volta in volta, benissimo passiamo al codice da inserire nell'alias:

echo $k($rand(12)) $0-

ecco.... semplicemente questo.

In pratica $0- indica tutta la frase che noi passiamo all'alias partendo dall'inizio
invece $0 (senza il -) indica il primo elemento che passiamo, $1 il secondo, $2 il terzo e cosi via (ovviamente $1- indica tutta la frase a partire dal secondo elemento, $2- tutto a partire dal 3zo elemento e cosi via)
Ultimo esempio:
nel nostro alias colora mettiamo questo

echo $k($0) $1-

e dalla nostra riga di input digitiamo:
/colora 5 scrivo a colori
come vedrete abbiamo usato il primo valore ($0) per dare il colore alla frase, e poi abbiamo usato $1- per prendere il resto della frase a partire da dopo il primo elemento ($0 è per noi il numero del colore).
Per concludere aggiungiamo una particolarità: se volessimo creare un'alias al volo, senza dover aprire l'editor, basterebbe fare:
/alias(nomealias){codice alias;}
es:
/alias(colora){echo $k($0) $1-;}
In pratica creerà l'alias "colora" e gli darà come codice echo $k($0) $1-;
Per eliminarlo, sempre direttamente dalla nostra riga di input, basterà digitare /alias(colora){}, cioè senza mettere codice tra le {}.
Inoltre considerate pure che gli alias, possono essere utilizzati, come se fossero delle funzioni, per farsi restituire dei valori tramite il comando return, ad esempio andiamo nella riga di input e digitiamo:
/alias(sum3){ return $($0 + $1 + $2); }; [INVIO]
/%Somma = $sum3(3,4,5) [INVIO]
/echo %Somma [INVIO]

Come vedete abbiamo creato l'alias sum3 (che contiene il codice $($0 + $1 + $2) considerando che $(espressione_aritmetica) serve a calcolare il valore della espressione aritmetica che contiene tra le parentesi), trattato l'alias come se fosse una funzione (notate $sum3 invece del semplice sum3) passandogli 3 numeri (3,4,5) e l'abbiamo usato per farci restituire il valore della somma dei tre numeri, che gli abbiamo passato memorizzandola nella variabile %Somma.
Con l'ultimo comando, ovviamente, ci restituisce a schermo il contenuto della variabile %Somma.
Adesso digitiamo pure..
/ECHO STOP.





Branzilla Contest Redeem

Links utili

Newsletter
Iscriviti
Cancellati

Ci sono 84 iscritti

In rilievo..
  JackSMS v3
  Venom Script Lite

Documenti/Guide
  I Social Network
  Sicurezza in rete
  Cos'è SSL
  FAQ Bot
  Documenti su IRC
  FAQ Ident
  RFC 2810
  RFC 2811
  IRCx RFC

Informatica libera
  Gli Hoaxes
  Hoaxes report
  Documenti vari
  CensorWare
  Windows
  Linux

mIRC Scripting
  Codice ASCII
  Snippet mIRC scripting
  Tutorial mIRC scripting
  Dll per mIRC
  Utilities

IRCd
  Cos'è un IRCd
  Download Unreal
  Download Hybrid 6
  Download Hybrid 7
  Download Ultimate
  Download Bahamut
  Configurazione IRCd

IRC Services
  Cosa sono i Services
  Download Anope
  Download Epona
  Ircservices 5.0
  Ircservices 5.1
  Configurazione Epona
  Configurazione Anope
  Comandi ChanServ
  Comandi NickServ
  Comandi MemoServ

NeoStats
  Cosa sono i NeoStats
  Download NeoStats
  Configurazione NeoStats
  Download Moduli

IPv6
  Cos'è IPv6
  IPv6 su Win2000
  IPv6 su WinXP
  IPv6 su Linux
  IPv6 su mIRC e Xchat

Programmazione
  Tutorial C++
  Tutorial C
  Compilatori C/C++

Altro
  Contatti
  Banners Gallery

RSS Feed




Progetti
Starlight
IRCHippo

Links amici
Eushells.net
MF's IT User Essential Security Center

Validato CSS
Sito interamente sviluppato in PHP
MySQL
©2004+ IRC-Zone | Webmaster | Sitemap
Created by Cesare 'Kaesar83' Lasorella
Designed by Manuel 'erkokki' Cabras
IRC-Zone non è responsabile del contenuto dei siti linkati
Pagina creata in: 0.034 sec con 27 queries
Spampoison
Sviluppato con Notepad++
website monitoring service