lunedì 12 maggio - 04:17
Google
 
Menù
  Home
  Come nasce IRC-Zone
  Glossario Informatico
  Servizio FreeBot
  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

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!

Credits


Statistiche
Ip: 38.103.63.16
Downloads: 246934 files
Totale: 287836 MB




Art of Scripting Vol. 3 - Eventi e popup

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

Start:

In questo tutorial parleremo degli eventi e faremo qualche accenno ai pop-up.

Gli Eventi:

In poche parole impareremo ad automatizzare le azioni del nostro KVIrc, in modo da fargli tenere certi comportamenti, al verificarsi di certe condizioni, in modo automatico.
Il mondo di IRC è costellato di eventi, gli eventi sono delle situazioni che possono verificarsi, come nel mondo reale del resto. Ad esempio quando qualcuno ci dà lo stato di operatore su un canale (la chiocciolina per intenderci @) è educazione ringraziare, tutti abbiamo risposto (reazione all'evento che si è verificato , cioè "sono diventato op")in modo quasi istintivo ringraziando con un "tnx" oppure con un "grazie dell'op =)".
Adesso vediamo come far si che il nostro KVIrc lo faccia in modo automatico (=D ...bello vero?).
Una nota: su molti canali gli script automatici, non sono visti di buon occhio quindi se qualcuno vi dirà "togli sto saluto automatico!" non preoccupatevi noi impareremo anche ad evitare che il nostro script possa dare fastidio sul canale di quel tizio antipatico e schizzinoso =P.
Cominciamo ad aprire il nostro event-editor (mostrate la barra dello scripting da Impostazioni->Barre degli strumenti->Mostra Scripting e dopo cliccate sul pulsante con la “e” blu) e vediamo cosa ci troviamo davanti.
Sulla sinistra abbiamo un elenco con tutti quelli che sono gli eventi a cui il KVIrc reagisce, e sulla destra troviamo una finestra nera nella quale ci viene detto il valore che $0, $1, $2 etc…etc… assumono al verificarsi di quell’evento.
Vediamo di capire tutto buttando giù un po’ di codice, quindi andiamo al primo degli eventi:

OnAccelKeyPressed

L’evento si verifica ogni qualvolta viene premuto un "AccelKey", i tasti veloci che il KVIrc conosce attualmente sono:
Da F2 a F12, da F1 a F12 con il tasto SHIFT premuto e da 0 a 9 con il tasto CTRL premuto.
Come possiamo vedere qui $0 corrisponde al tasto premuto.

Proviamo a mettere in azione la fantasia:

Tasto destro sull’evento OnAccelKeyPressed e creiamo un “Nuovo Gestore”, cambiamogli il nome di “predefinito” in qualche cosa di più carino e poi cominciamo a scrivere dentro la finestra nera (come abbiamo fatto per gli alias).

If($0=="F2") { echo Tasto F2 premuto;};
If($0=="F3") { echo Tasto F3 premuto;};
If($0=="F4") { echo Tasto F4 premuto;};

oppure, come abbiamo visto per gli alias, possiamo dare il comando /event(OnAccelKeyPressed,eventoMio1){ If($0=="F2") { echo Tasto F2 premuto;};}

e come vedrete avremo aggiunto all’evento OnAccelKeyPressed, il gestore eventoMio1 che contiene il nostro codice senza dover aprire l'event editor (la sintassi del comando è event(,{codice;};) questo comando come vedremo può essere molto comodo in certi casi.

Mettiamo il caso che, volessimo ringraziare quando su un canale un nostro amico ci dà lo stato di voice, o di halfop o di op.
Sfogliamo la lista degli eventi fino ad imbatterci in :

OnMeHalfOp
OnMeOp
OnMeVoice

Evidenziamo il primo e, dopo aver notato che $0=nick che ci halfoppa, $1=username di chi ci ha halfoppato e $2= host di chi ci ha halfoppato, aggiungiamo un gestore (tasto destro->nuovo gestore)e chiamiamolo ad esempio “tnxFor”.
Adesso mettiamo dentro il gestore che abbiamo creato il codice che dovrà essere eseguito al verificarsi dell'evento stesso:

msg $target \[ $0 \]tnx for the halfop on $target

la funzione $target ci restituisce il destinatario (nick o nome del canale a seconda che sia una query o una finestra di canale) della finestra corrente, quindi, nel nostro caso, il nome del canale (avremmo potuto usare anche la funzione $chan.name).
Vi consiglio di andarvi a guardare le funzioni sul manuale ufficiale, quelle utilissime sono tante oltre $target, $me e $chan.name.
Se volessimo farlo più simpatico potremmo anche fare un messaggio pseudo-casuale, con un codice del genere:

%tmp=$rand(3)
if(%tmp==0){msg $target \[ $0 \]tnx for the halfop on $target ;}
if(%tmp==1){msg $target Tnx $0 ^_^ ;}
if(%tmp==2){msg $target grazie :* ;}
if(%tmp==3){msg $target ..ohoho I'm an halfop ^_^ tnx ;}

Se invece il fondatore del canale #0antipatici_456YK(il numero finale è stato aggiunto per evitare di nominare un canale esistente), non ama queste cose e non vuole che sul suo canale si ringrazi in modo automatico, basta che facciamo un:

if($chan.name!=”#0antipatici_456YK”){
%tmp=$rand(3)
if(%tmp==0){msg $target \[ $0 \]tnx for the halfop on $target }
if(%tmp==1){msg $target Tnx $0 ^_^ }
if(%tmp==2){msg $target grazie :* }
if(%tmp==3){msg $target I'm an halfop ^_^ tnx to $0}
}

e risolveremo il problema =D poiché con la condizione precedente (cioè a dire if($chan.name!=”#0antipatici_456YK”)) abbiamo fatto in modo che ringrazi solo nel caso in cui il canale sia diverso da #0antipatici_456YK.
Ovviamente una cosa del genere possiamo farla per tutti gli eventi che vogliamo, come ad esempio OnMeBan, OnMeOp etc.. etc..
Adesso mettiamo il caso che volessimo scrivere alternando i colori delle lettere invece del solito color nero, per far ciò portiamoci all’evento:

OnTextInput

Questo evento si verifica quando diamo l’invio e “mandiamo” il testo che abbiamo scritto.
Ora dobbiamo far in modo che il nostro script vada a modificare la nostra scrittura normale per trasformarla, in modo automatico in una scritta colorata, senza essere costretti a fare per ogni lettera CTRL+K e colore.
In realtà se avete letto i tutorial precedenti avevamo già scritto un codice del genere e l’avevamo messo in un alias (ricordate lo script che salutava? Ricordate che i nick li avevamo fatti apparire tipo arcobaleno? Bene usiamo lo stesso procedimento), riprendiamo il codice e lo mettiamo dentro quest’evento, tenendo in considerazione che $0, così come leggiamo nella finestra a destra dell’evento, contiene la frase che abbiamo scritto :

%szFrase=$0
%idx=1
while(%idx!=($str.len(%szFrase)+1))
{
%sztmp = $str.section(%szFrase,"",%idx,%idx)
%szFraseColorata=%szFraseColorata$k($rand(15))%sztmp
%idx++;
}
say %szFraseColorata ;
halt;

Adesso clicchiamo sul pulsante “applica”, e poi proviamo a scrivere in un qualsiasi canale, o query di un amico o anche a noi stessi( che forse è meglio =P).
Come vedete le scritte sono tutte colorate (questo script non lo spiego, perché l’ho già fatto nel tutorial precedente).
Per disabilitarlo e far tornare tutto come prima, facciamo tasto destro sul gestore e poi facciamo “Disabilita Gestore” (oppure elimina se volete toglierlo).
Potremmo fare la stessa cosa se ad esempio volessimo scrivere tipo specchio, cioè al contrario, eccovi un piccolo codice da testare:

%szFrase=$0
%idx=$($str.len(%szFrase)+1)
while(%idx!=0)
{
%sztmp = $str.section(%szFrase,"",%idx,%idx)
%szFraseColorata=%szFraseColorata%sztmp;
%idx--;
}
say %szFraseColorata ;
halt;


In pratica, come vedete ricompongo la frase al contrario, partendo dall’ultima lettera e risalendo, infatti %idx è uguale alla lunghezza della frase+1, quindi al primo giro %idx sarà uguale alla posizione dell’ultima lettera della frase, cosi con la funzione $str.section() prendo proprio quest’ultima, al secondo giro invece sarà uguale alla penultima e così via(infatti come vedete diminuisco con %idx--, al contrario dell’esempio precedente in cui aumentavo).
Per capirlo un po’ meglio seguiamo passo passo cosa succede ad esempio con la frase “ciao Grifisx”

%szFrase=”ciao Grifisx”
%idx=$($str.len(%szFrase)+1)

In questo modo assegno ad %idx il valore di 12 infatti $str.len(“ciao Grifisx”)+1) poiché la fase è composta da 12 lettere ma l’indice parte da 0 quindi dobbiamo fare il +1);
while(%idx!=0)
fino a quando %idx è diverso da 0
{
%sztmp = $str.section(%szFrase,"",%idx,%idx)

Al primo giro %sztmp sarà uguale a $str.section(“ciao Grifisx”,"",12,12) cioè a dire ad “x”
%szFraseColorata=%szFraseColorata%sztmp;
Al primo giro avremo che %szFraseColorata=”””x”;
Diminuiamo l’indice;
%idx--;
Si ricomincia il giro, al secondo giro avremo che %sztmp sarà uguale a $str.section(“ciao Grifisx”,"",11,11) cioè a dire ad “s” e poi %szFraseColorata=”x””s”
Al terzo giro $str.section(“ciao Grifisx”,"",10,10) cioè a dire ad is” e poi %szFraseColorata=”xs””i”
e cosi via fino alla fine quando avremo %szFraseColorata=”xsifirg oaic”
}
say %szFraseColorata ;
halt
;

Se non siete riusciti a capire bene fermatevi, e rileggete tutto con calma e fate delle prove. Dovrete avere i concetti visti fino ad ora ben chiari altrimenti il prossimo script non sarà cosi facile da capire.
Creiamo l’alias lolwritecolor e mettiamo dentro questo codice:

class(lolwritecolor,object)
{
rainbow()
{
event(OnTextInput,msgTextColor)
{
%szFrase=$0
%idx=1
while(%idx!=($str.len(%szFrase)+1))
{
%sztmp = $str.section(%szFrase,"",%idx,%idx)
%szFraseColorata=%szFraseColorata$k($rand(15))%sztmp
%idx++;
}
say %szFraseColorata ;
halt;
}
}
mirror()
{
event(OnTextInput,msgTextColor)
{
%szFrase=$0
%idx=$($str.len(%szFrase)+1)
while(%idx!=0)
{
%sztmp = $str.section(%szFrase,"",%idx,%idx)
%szFraseColorata=%szFraseColorata%sztmp;
%idx--;
}
say %szFraseColorata ;
halt;
}
}
disable()
{
event(OnTextInput,msgTextColor){}
}
}
switch($0){
case("d")
{
%tmp=$new(lolwritecolor);
%tmp->$disable();
break;
}
case("r")
{
%tmp=$new(lolwritecolor);
%tmp->$rainbow();
break;
}
case("m")
{
%tmp=$new(lolwritecolor);
%tmp->$mirror();
break;
}

default{
echo $k(5) $u() "Usage:"
echo $k(5) \[ $k(10) $u()"Rainbow mode"$u() $k(5) \]$o - /lolwritecolor r
echo $k(5) \[ $k(10) $u()"Mirror mode"$u() $k(5) \]$o - /lolwritecolor m
echo $k(5) \[ $k(10) $u()"Disable script"$u() $k(5) \]$o - /lolwritecolor d
break;
}
}

Come possiamo vedere esaminando il nostro alias “lolwritecolor” per prima cosa creiamo una classe con 3 funzioni, le tre funzioni servono in pratica per “impiantare” (le prime 2) e rimuovere (l’ultima) l’evento, vediamolo da vicino senza il codice:

class(lolwritecolor,object)
{
rainbow()
{
event(OnTextInput,msgTextColor)
{
CODICE
}
}
mirror()
{
event(OnTextInput,msgTextColor)
{
CODICE
}
}
disable()

{
event(OnTextInput,msgTextColor){}
}
}

Come potete osservare le funzioni usano per l’installazione e la rimozione del codice il comando
event(,){ ;}
Come vi avevo detto è molto comodo perché cosi possiamo, sfruttando in modo incrociato alias ed eventi, disinstallare ed installare gli eventi con l’esecuzione di un semplice comando.
Per scegliere, comunque, la funzione da eseguire, utilizziamo il costrutto switch\case che ci permetterà di esaminare il parametro che passiamo all’alias, infatti, ad esempio, quando passiamo “r” viene creato un nuovo oggetto tramite la nostra classe %tmp=$new(lolwritecolor); e viene chiamata poi la funzione $raibow()(%tmp->$rainbow();) che, come sappiamo, installerà nell’evento OnTextInput, il nostro codice per scrivere arcobaleno.
Avremmo

if(%ModoColore==”mirror”)
{
CODICE
}
if(%ModoColore==”rainbow”)
{
CODICE
}

La variabile %ModoColore poi avremmo potuto settarla tramite un semplice alias, ovviamente non sarebbe stato necessario il “disabled” poiché nel caso in cui la variabile non fosse stata settata (sarebbe bastato svuotarla), dai due casi sopra visti (mirror e rainbow) nell'evento le condizioni non si sarebbero verificate e quindi non sarebbe successo niente.
Ma tutto questo significava sprecare controlli (perché mettendo l'evento il client dovrebbe comunque controllare il valore di quella variabile ad ogni input) e comunque sarebbe stato troppo elementare, ed a noi piacciono le cose complicate :D.

Qualche cenno sui Popup:

Adesso però dobbiamo accennare alla possibilità di godere dell'utilità dei menù a tendina che appaiono quando clicchiamo col tasto destro su una finestra del KVIrc (o sulla lista dei nick o sui nick).
Riguardando lo script di sopra ci accorgiamo che effettivamente è un po' scomodo dover digitare, ad esempio, “/lolwritecolor r” per scrivere arcobaleno e poi “/lolwritecolor d” per disabilitarlo. Sarebbe più comodo, senza dubbio, fare tasto destro sulla finestra del canale e avere un nostro menù a tendina dove poter scegliere se scrivere colorato, a specchio, o disabilitare lo script.
Clicchiamo sul tasto con la p sulla barra di scripting in modo da aprire il popup editor; adesso andiamo a crearci quello che sarà il nostro menù, tasto destro in uno spazio vuoto sulla lista dei popup a sinistra e creiamo un nuovo pop-up e cambiamogli il nome dallo standard “senza nome” a “wColor” (o a quello che più preferite).
Una volta fatto questo andiamo a creare tre elementi all'interno del pop-up nel modo seguente: dopo aver selezionato il nostro nuovo pop-up facciamo tasto destro nel riquadro bianco a destra della lista dei pop-up e creiamo “Nuovo elemento sotto”, evidenziamoli e chiamiamoli (Scrivendo nella riga bianca accanto all'etichetta “Testo:”) “Scrivi Arcobaleno”, “Scrivi rovesciato” e “Disabilita”, volendo possiamo scegliere anche 3 icone (per vedere tutte le icone disponibili fate :Strumenti-->Mostra tabella delle icone) e metterne il numero identificativo (o il percorso) nell'apposito spazio “Icona:”.
Una volta fatto ciò andiamo a scrivere il codice che dovrà essere eseguito quando selezioneremo un elemento del nostro menù.
Portiamoci nel box nero che appare quando selezioniamo uno degli elementi che abbiamo creato, ad esempio selezioniamo “Scrivi arcobaleno” e poi sotto, nel box nero che appare, mettiamo il codice che eseguirà l'alias per scrivere arcobaleno, cioè a dire:

echo Modalita' Raibow attiva.
lolwritecolor r
Stessa cosa facciamo per “Scrivi rovesciato” e disabilita, ovviamente qui metteremo
echo Modalita' Mirror attiva.
lolwritecolor m
e
echo Write Color Disattivato.
lolwritecolor d

In pratica come vedete i pop-up funzionano come gli alias, possono ospitare qualsiasi codice, solo che il vantaggio è che il codice verrà eseguito nel momento in cui selezioneremo la voce del menù e non sarà necessario richiamarlo scrivendo manualmente /nomealias.
Adesso però dobbiamo fare in modo che questo menù che abbiamo creato appaia quando facciamo tasto destro sulle finestre dei canali accanto alle altre voci del menù di default che ha KVIrc.
Portiamoci sul popup
channeltextview
e alla fine, sotto tutti gli altri elementi, creiamo un “Nuovo Separatore” e dopo, sotto il separatore, creiamo un “Nuovo menù esterno” chiamiamolo “Write color” ( scrivendolo in “Testo:”) e associamogli il menù esterno che abbiamo creato, scrivendo, alla voce “Menù Esterno:”, il nome del menù che abbiamo creato poco prima (nel nostro esempio wColor), volendo possiamo associargli anche un id (scrivendo un numero casuale tipo 1006969001 alla voce “Id elemento:”) che ci servirà se un giorno volessimo distribuire il nostro script come se fosse un addon con la possibilità di installazione e rimozione dello stesso...ma questa e un'altra storia.
Adesso portiamoci sulla finestra di un canale e facciamo tasto destro e... godiamoci il nostro nuovo menù a tendina =D.
E anche questa avventura è finita ...adesso digitiamo pure....
/ECHO STOP





Links utili

Newsletter
Iscriviti
Cancellati

Ci sono 57 iscritti

In rilievo..
  JackSMS v3
  Venom Script Lite

Documenti/Guide
  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
Linux

Sponsor
Eushells.net
TradeShell.it
EasyShell.org



©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.022 sec con 26 queries