Untitled Document
mIRC in Italiano - Script - Forum - Imposta come Home Page - Aggiungi ai Preferiti - Home - Chat
Utenti connessi: - Visitatori oggi: - Visitatori totali: - Pagine viste oggi:


NewsLetter


localmirc
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----

-
----
-
-
-
-
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----

----
Sockets
I sockets sono un supporto che ci permettono di creare connessioni in grado di ricevere ed inviare dati.

IDENTIFICATORI

$sock(nome/N)
Restituisce informazioni riguardo la connessione socket.
NOME è il nome attribuito al socket
N puo' essere un asterisco o un numero ed è opzionale, se non viene specificato il suo valore è 1.

Proprietà:
name, ip, port, status, sent, rcvd, sq, rq, ls, lr, mark, type, saddr, sport, to, wserr, wsmsg, bindip, bindport

.name è il nome della connessione socket
.sent e .rcvd restituiscono rispettivamente il numero di byte inviati e ricevuti
.sq e .rq restituiscono i byte in coda nei buffer di invio e ricezione
.ls e .lr restituiscono i secondi dalle ultime informazioni di invio e ricezione
.mark è un'area di memoria utilizzabile dall'utente di max 512 byte
.type restituisce il tipo di socket, TCP o UDP
.saddr e .sport restituiscono l'indirizzo e la porta dell'ultimo pacchetto UDP ricevuto
.to restituisce i secondi in cui il socket è rimasto aperto
.wserr restituisce il numero dell'ultimo errore winsock del socket
.wsmsg restituisce l'ultimo messaggio d'errore winsock


$sockname
è il nome attribuito alla connessione

$sockerr
Un identificatore molto importante che gestisce eventuali errori del socket.
Lo si usa generalmente all'inizio di ogni evento per controllare se si sono verificati errori.

$sockbr
è il numero di byte letti dal comando /sockread.

$portfree(N)
Restituisce $true se la porta specificata non è in uso, diversamente $false.


COMANDI ED EVENTI

/socklisten [nome] [port]
mette in ascolto la porta specificata.

on 1:socklisten:name:commands
Questo evento si attiva quando qualcuno cerca di connettersi alla porta messa in ascolto.
Per accettare la connessione si usa il comando /sockaccept.

/sockaccept [nome]
accetta la connessione attuale alla propria porta in ascolto e le assegna un nome per identificarla.

/sockrename [nome] [nuovonome]
assegna un nuovo nome alla connessione specificata.

/sockopen [nome] [address] [port]
prova ad aprire una connessione con l'indirizzo (ip o host) e la porta specificata.

on 1:sockopen:name:commands
Questo evento si attiva all'apertura di un socket.

/sockclose [nome]
Chiude la connessione o LE connessioni specificate (si puo' usare anche l'asterisco nel nome)

on 1:sockclose:name:commands
Si attiva quando la connessione viene chiusa da remoto e non dal proprio pc.


INVIARE INFORMAZIONI

/sockwrite [-tnb] [nome] [numbytes] [text|%var|&binvar]
Serve a spedire informazioni al socket.

Specificando:
La flag -t Tutte le parole che iniziano con & vengono spedite come testo e non come variabili binarie.
La flag -n Se non presente aggiunge un CRLF alla fine della stringa da inviare.
La flag -b indica che si sta specificando il valore di numbytes, ovvero il numero di byte da inviare.


on 1:sockwrite:nome:commands
L'evento sockwrite si attiva quando mIRC termina di inviare tutte le informazioni messe in coda.
Il mIRC dispone di un buffer di uscita pari a 8192 byte, se l'aggiunta delle informazione supera questo limite
si genera un messaggio di errore; è in questo caso che torna utile l'indentificatore sock().sq in grado di
restituire il numero di byte presenti nella coda di invio.


LEGGERE INFORMAZIONI

on 1:sockread:nome:commands
Questo evento si attiva quando ci sono informazioni in attesa di essere lette sulla connessione specificata.
Le informazioni vengono lette con il comando /sockread.

/sockread [-fn] [numbytes] [%var|&binvar]

Se si usa una variabile di tipo %var il CRLF non viene considerato, quindi nel caso una stringa in ricezione sia composta soltanto da CRLF la variabile avrà valore $null.

Utilizzando una &binvar le informazioni lette corrispondo al numero di byte specificati (numbytes). Se questo non viene specificato il suo valore sarà 4096 byte.

Se viene specificata la flag -f con una variabile %var, mIRC tenterà di inserire all'interno di questa qualsiasi testo presente nel buffer di ricezione, anche se non termina con un carattere CRLF.

La flag -n permette di leggere una linea che termina con un CRLF all'interno di una &binvar.
Se la linea in arrivo non contiene un CRLF, non verrà letto nessun byte, a meno che non venga usata anche la flag -f, che ne forza la lettura.

Nota:
un singolo /sockread potrebbe non riuscure a leggere l'intero buffer.
la lettura dovrebbe essere attiva finchè $sockbr (byte letti) non è pari a zero.


MARCARE UN SOCKET

/sockmark [name] [text]
Specifica un attributo di massino 512 byte per la connessione specificata; per leggere questo valore all'interno di uno script si usa $sock().mark.

Socket UDP
Il protocollo UDP è diverso dal TCP: infatti per mandare informazioni non serve che la connessione venga prima accettata;
inoltre non ci sono certezze che tutti i dati vengono spediti correttamente e completamente.

/sockudp [-bntk] [name] [port] [ipaddress] [port] [numbytes] [text|%var|&binvar]

Le flag -n e -t sono le stesse spiegare precedentemente per il protocollo TCP (/sockwrite).

La flag -b indica che si sta specificando il valore di numbytes.
La flag -k forza il socket a stare aperto, quindi è in grado di ricevere informazioni mandate alla porta in ascolto.
Se -k non viene specificato, il socket viene aperto, le informazioni inviate, e poi chiuso.

Se viene specificato un socket che non esiste, verrà creato. Se esiste, viene usato per inviare le informazioni.
E' possibile specificare la porta locale che si vuole utilizzare. Diversamente mIRC ne sceglie una a caso.
ipaddress e port specificano l'indirizzo di destinazione al quale si vogliono inviare informazioni. Si possono utilizzare soltanto indirizzi IP.

In caso di errore
se un /sockudp fallisce, in $sock().wserr viene settato il valore dell'errore, avviato l'evento on sockwrite con $sockerr settato.

on 1:udpread:name:commands
L'evento udpread viene avviato quando c'è un'informazione in attesa di essere lette in un socket UDP.
Le informazioni si leggono con il comando /sockread.


ESEMPIO

Finita l'infarinata di teoria passiamo ora all'aspetto pratico, nel quale andremo a creare un semplice bot composto da due funzioni:
- Mantenere il limite del canale ad un valore di +5 rispetto agli utenti presenti
- Ridarci lo stato di OPeratore ogni qual volta veniamo DEOPpati :)

;--------- INIZIO CODICE ---------

;il seguente alias controlla se il sockets sockbot è attivo oppure no, se lo è stampa nella pagina attiva BOT GIA ATTIVO
;diversamente apre una connessione con il nome di sockbot specificando come indirizzo il server al quale siamo connessi
;e come porta la porta alla quale siamo connessi. Naturalmente mIRC deve essere connesso ad un server,
;diversamente lo script non funzionerà. %cbot è la finestra attiva, ossia il canale dove far entrare il bot.
alias sbot {
if ($sock(sockbot)) echo 4 -a BOT GIA ATTIVO
else { sockopen sockbot $server $port | %cbot = $active }
}

;un semplice alias che cancella la variabile %nbot e chiude la connessione sockbot
alias dbot unset %nbot | sockclose sockbot

;questo evento riguarda noi e non il bot. Praticamente se siamo operatori del canale dove il bot entrerà
;gli daremo in automatico lo stato di operatore.
on @*:join:%cbot:if ($nick == %nbot) mode # +o $nick

;Quando il socket viene aperto... Controlliamo prima di tutto che non ci siano errori.
;Se non ci sono errori settiamo la variabile %nbot con un nick generato, subito dopo
;andremo a spedire le informazioni per la connessione ad IRC secondo quanto richiesto
;dal protocollo IRC.
on *:SOCKOPEN:sockbot:{
if ($sockerr > 0) { unset %nbot | echo 4 -a Connessione fallita | return }
else {
%nbot = sBot_ $+ $r(0,9) $+ $r(0,9) $+ $r(0,9) $+ $r(0,9) $+ $r(0,9)
sockwrite -n sockbot NICK %nbot
sockwrite -n sockbot USER sBot $ip $server $fullname
sockwrite -n sockbot JOIN %cbot
}
}

;Dopo aver controllato la presenza di eventuali errori e se questi non ce ne sono, andiamo a gestire
;i dati che arrivano sul nostro socket.
on *:SOCKREAD:sockbot:{
if ($sockerr > 0) { unset %nbot | echo 4 -a Connessione fallita | return }
else {
if ($me ison %cbot) {

;Salviamo i dati nella variabile %data e li dividiamo con il comando tokenize la var %dati ottenendo $1 $2 etc
sockread -f %data
tokenize 32 %data

;Se $1 è uguale a ping vuole dire che il server al quale siamo connessi sta controllando se siamo collegati o no
;Se non rispondiamo il server ci disconnetterà dopo pochi minuti. Ma noi rispondiamo :)
if ($1 == PING) sockwrite -n sockbot PONG $2-

;Andiamo ora ad inserire le due funzioni del bot. $2 in questo caso è di solito "l'azione", quindi potrebbe essere
;un JOIN, un PART, un PRIVMSG, e via dicendo. Noi andiamo ad analizzare proprio se l'azione è un qualcosa che
;ci interessa. Nel caso si tratti di un join o di un part impostiamo il limite del canale come voluto. Mentre se
;notiamo un DEOP (MODE # -o nick) ed il nick deoppato siamo noi, ci facciamo ridare dal bot lo stato di operatore.
if (%nbot isop %cbot) {
if ($2 isin JOINPART) sockwrite -n sockbot MODE %cbot +l $calc($nick(%cbot,0) + 5)
elseif (($2 == MODE) && ($4 == -o) && ($5 == $me)) sockwrite -n sockbot MODE %cbot +o $me
}
}
}
}

;infine creiamo un popups nelle finestre dei canali per velocizzare la connessione e la disconnessione del bot...
menu channel {
$iif($sock(sockbot),Disconnetti sockBot ( $+ %cbot $+ ),Connetti sockBot):$iif($sock(sockbot,0),dbot,sbot)
}

;--------- FINE CODICE ----------


Ricordate che il sockbot è solo un esempio di un tutorial e va preso come tale. :)

Guerrjero
www.tuttoirc.it




  Ultime dal forum mIRC Scripting

Vai al forum
Ultimi script e addon inseriti
Diablo III (14624)
Fancazzista Scr... (18764)
Sensuality scri... (7622)
Grand Theft Aut... (5154)
Stealth Script ... (8382)
-SagittarioScri... (18835)
Paradise Script (13753)
Trivia Game 200... (11882)
Ircap Script 8.... (5191)
RawScript 2.0 (8481)


 

 



Cerca nel sito

Le ultime news:

Ultimi commenti
1
1
1


Sondaggio
Cosa vorresti di nuovo?

Risultati | Archivi

Statistiche Download
Database:
283 Files
241 Mb
Scaricati:
2659868 Files
Totale: 5615348Mb

Upload
Hai realizzato uno Script? Una addon? Una tcl? Un articolo? Qualsiasi cosa? Mandacelo ora! Utilizza il form upload per inviarci il tuo materiale e se lo riteniamo idoneo lo vedrai pubblicato nel portale!
[ Upload ]

Chat
Inserisci il tuo nick:



| Contattaci | Pubblicità | Staff |
Il presente materiale è Copyright TuttoIRC.it 2005. Leggi il Disclaimer