Un esempio di come si possa integrare uno script IRC con un linguaggio di programmazione per il web (PHP, in questo caso).
Premetto che di IRC, di BOT e dei suoi script non ne capisco molto, ma una volta mi è capitato di dover rendere disponibile uno script che:
- Eseguisse il login in una pagina web.
- Cercasse tra le pagine alcuni dati che rispondessero a dei parametri impostati di volta in volta dall’utente.
- Restituisse il risultato.
Tutto questo accessibile dal canale di una chat IRC.
Dato che a farlo con il linguaggio di scripting di IRC non avrei saputo da dove iniziare e dato che una operazione del genere avrebbe bloccato il mio vecchio PC per tutta la durata dello script, ho optato per il metodo descritto in questo articolo e cioè far eseguire la maggior parte dell’elaborazione ad uno script PHP creato ad hoc ed utilizzare lo scripting IRC solo per interfacciare utente e script PHP, ovvero per ricevere la richiesta dall’utente, trasmetterla allo script PHP, ricevere i risultati da quest’ultimo e finalmente restituirli.
Per meglio comprendere questo articolo potete leggere:
Il codice IRC per l’interfaccia.
Se utilizzate lo script editor di mIRC inserite questo codice nella scheda “Remote”:
on 1:TEXT:!php*:#:{
if (%url != $null) {
notice $nick Script in uso, riprova tra qualche secondo.
halt
}
else {
sockclose miasocket | sockopen miasocket localhost 80
set %url /directory/pagina.php? $+ $2 $+ &nick= $+ $nick
}
}
on *:Sockopen:miasocket:{
sockwrite -n miasocket GET %url HTTP/1.1
sockwrite -n miasocket Host: host80.net
sockwrite -n miasocket
}
on *:Sockread:miasocket:{
sockread %miasocket
notice %miasocket
unset %url
}
L’evento che aziona lo script (on ^1:TEXT:!php*:#) si verifica quando un utente di livello diverso dal livello 1 scrive in un qualsiasi canale la stringa “!php” seguita da qualsiasi altro carattere, se ne vogliamo limitare l’esecuzione ad un solo canale dobbiamo sostituire “#” con “#nome_del_canale”, oppure inserire più canali separati da una virgola.
Una volta avviato verifica che la variabile url non sia nulla (in questo caso lo script sarebbe giÃ? in uso) e, nel caso, avverte l’utente di riprovare tra qualche secondo. Altrimenti:
- Chiude e riapre la connessione di nome miasocket (creando l’evento
on *:Sockopen:miasocket). Localhost e 80 indicano rispettivamente l’indirizzo dell’host a cui connettersi e la porta da utilizzare per la connessione. - Assegna alla variabile url il percorso dello script PHP, di cui una parte è fissa (directory e file.php?) da personalizzare manualmente a seconda delle esigenze, ed una parte dinamica (le variabili GET da inviare allo script). Per inserire correttamente la parte dinamica, lo script va lanciato con un comando del genere:
!php var1=valore1&var2=valore2&varN=valore_N, in$1è contenuta la parte di stringa compresa tra l’inizio della stringa ed il primo spazio (“!php”) mentre in$2la parte di stringa compresa tra il primo spazio ed il secondo (quindi l’insieme di variabili da inviare allo script). Gli$+in questo caso vengono utilizzati per concatenare la variabile$2e$nickalle parti di stringa predefinite. L’ultima variabile (nick = $+ $nick) viene inserita automaticamente: in$nickè contenuto il nickname di chi ha attivato l’evento che ha azionato lo script, ci servirÃ? in seguito per fornirgli i risultati. Settando un valore alla variabile url rendiamo momentaneamente inutilizzabile lo script ad altri utenti. - L’evento verificatosi al punto 1 apre la pagina PHP salvata nella variabile url, creando cosÃ?¬ il terzo ed ultimo evento (
on *:Sockread:miasocket). - All’evento di cui sopra, il codice legge i risultati della pagina PHP.
- Cerca di notificarli.
- Svuota la variabile url, rendendo lo script nuovamente utilizzabile.
Se volete utilizzare questo script per aprire più pagine vi basterÃ? copiare il codice e rinominare il nome della socket miasocket in ogni parte della copia. Nella copia dovrete anche modificare il comando di attivazione (da !php a !php2, per esempio).
La parte di codice IRC è pronta.
Ricezione e risposta in PHP.
Secondo quanto abbiamo specificato, dovremmo inserire lo script PHP nel file “pagina.php” collocato in “directory” del nostro host locale.
I codice minimo dello script in questo caso è:
<?
# Prende il valore delle variabili inviate da IRC
$var1 = $_GET[’var1′];
$var2 = $_GET[’var2′];
$var3 = $_GET[’varN’];
$nick = $_GET[’nick’];
# Restituisce l’output
echo “$nick Ciao $nick, i valori da te inseriti sono:n”;
echo “$nick $var1, $var2, $var3”;
?>
È importante che ogni riga dell’output inizi con il nick di chi ha fatto la richiesta, dato che per restituire il risultato abbiamo utilizzato il comando IRC notice, la cui sintassi è: /notice [nick|#canale] testo, che notifica ad un nickname o in un canale il valore di “testo”. Quindi se al posto di $nick = $_GET['nick'], scrivessimo $nick = "#nome_del_canale", il risultato dell’elaborazione sarebbe notificato in quel canale e pertanto visibile a tutti.
post correlati:
- L'architettura a plugin di WordPress
- Trovare la definizione di una funzione in PHP
- Una API per Google Maps in stile jQuery
- Escape completo di una stringa ASCII con Javascript o PHP
- Integrare video nel proprio sito con le API di YouTube
- Sui feed RSS e le date
- Feed completi con il tag more in WordPress
Commenti.
Scrivi un commento