Autore |
Messaggio |
Enrico204
Utente appena iscritto
Registrato: 17/11/05 14:31 Messaggi: 5 Residenza: Latina |
|
Bot in PHP dal Web |
|
Salve a tutti,
la mia non ? una richiesta di aiuto ma un pezzo di codice da usare per tutti quelli che vogliono fare un bel bot con PHP (in altre parti del sito non lo avevo trovato allora l'ho postato qui ;) ). Incollo qui il codice anche se ? un po lunghetto.
| |
<?
error_reporting(E_ALL);
set_time_limit(0);
ignore_user_abort(true);
/* DA CONFIGURARE */
$server = "irc.server.it";
$porta = 6667;
$nick = "nickbot";
$channel = "#canale_di_esempio";
$nickserv = false; # impostare come true se si vuole l'autenticazione con nickserv
$nickserv_passwd = "password"; # password nickserv (usata solo se ? abilitata quella sopra)
$exit_password = "CAMBIALA" # password per chiudere il bot (il cmd ? la password, es: se la password ? ciao il cmd sar? !ciao) si pu? inviare anke in pvt
/* FINE CONFIGURAZIONE */
$chann = $channel;
$canale = $channel;
$fp = fsockopen($server, $porta, $errno, $errstr, 30);
if (!$fp) {
echo "Bot: Errore durante la connessione";
} else {
fwrite($fp, "NICK $nick\n");
fwrite($fp, "USER $nick 0 * :$nick\n");
if($nickserv) {
fwrite($fp, "PRIMSG NickServ IDENTIFY $nickserv_passwd\n");
}
fwrite($fp, "JOIN $channel\n");
for(;;)
{
$buffer = fgets($fp,1000);
/*******************************************************
fgets legge i dati inviati dal server e con eregi li parsa
con i comandi che abbiamo registrato.
Questa ? la routine di reazione al PING da parte del server
*******************************************************/
if(eregi("PING",$buffer)) {
$culos = substr($buffer,5);
fwrite($fp, "PONG $culos\n");
}
$buffer = substr($buffer,1);
if(eregi("PRIVMSG",$buffer)) {
$mar = strlen(strtok($buffer," PRIVMSG "));
$lenchan = $mar + strlen(" PRIVMSG ");
$canal = substr($buffer,$lenchan);
$canale = strtok($canal,":");
$msgl = strtok($buffer,":");
$messlen = strlen($msgl);
$messaggio = substr($buffer,$messlen+1);
$agente = strtok($buffer,"!");
$one = strtok($messaggio," ");
$onelenght = strlen($one);
$onerest = substr($messaggio,$onelenght);
$two = strtok($onerest," ");
$twolenght = strlen($two);
$tworest = substr($onerest,$twolenght+1);
$three = strtok($tworest," ");
$threelenght = strlen($three);
$threerest = substr($tworest,$threelenght+1);
// Se il canale di comunicazione ? una query privata
// Il canale diventa l'agente
if(!eregi("#",$canale)) {
$canale=$agente;
}
// Se il messaggio ? stato inviato dal bot
// Il canale diventa l'agente del messaggio
if(strcasecmp($canale,$nick)==0) {
$canale=$agente;
}
if(eregi("!$password",$one)) {
exit;
die();
}
/* 2?da Parte da editare ------------- */
if(eregi("!prova_comando",$one)) {
fwrite($fp, "PRIVMSG #treknology :Prova Risposta\n"); # AL POSTO DI PRIVMSG etc. POTETE METTERE UN COMANDO RAW DEL SERVER (SEMPRE SEGUITO DA \n)
}
}
}
}
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento senza titolo</title>
</head>
<body>
</body>
</html>
|
L'ultima modifica di Enrico204 il Sab Ago 19, 2006 10:17 am, modificato 1 volta |
|
Mer Nov 23, 2005 7:54 pm |
|
|
Guerrjero
Staff
Registrato: 10/11/02 11:53 Messaggi: 684 Residenza: Roma |
|
|
|
Aggiungo una cosuccia...
Per usarlo in remoto lo script va messo su un hosting che supporti php, oltre a questo pero' ? necessario che le connessioni sockets su porte diverse alla 80 siano abilitate (per esempio aruba non lo permette).
Cmq enrico grazie per la segnalazione, se vuoi puoi spedire l'articolo ad attila e lo mettiamo on line
_________________ Staff TuttoIRC.it |
|
Gio Dic 01, 2005 2:18 pm |
|
|
Delpho
Utente Esperto
Registrato: 10/11/02 13:38 Messaggi: 213 Residenza: The Wired |
|
|
|
volevo dire che oltre a "Bot: Errore durante la connessione" quando la socket non riesce ad aprirla esce anche il tipico waring di php, c'? la possibilit? di disabilitarlo in modo che esca solo l'echo?
Mi interessa sapere come fare su server linux/webserver apache2
P.S. quando la socket la apre non c'? problema ovviamente
_________________ delpho[at]tuttoirc.it
wwy[at]azzurra.org
zoher[at]equilibrium-mud.org
|
|
Ven Dic 02, 2005 1:11 pm |
|
|
Delpho
Utente Esperto
Registrato: 10/11/02 13:38 Messaggi: 213 Residenza: The Wired |
|
|
|
ok scoperto da solo, basta settare error_reporting(E_ALL); a error_reporting(0);
_________________ delpho[at]tuttoirc.it
wwy[at]azzurra.org
zoher[at]equilibrium-mud.org
|
|
Ven Dic 02, 2005 1:35 pm |
|
|
Guerrjero
Staff
Registrato: 10/11/02 11:53 Messaggi: 684 Residenza: Roma |
|
|
|
Si puo' anche mettere la @ davanti al comando ed evitare la stampa dell'errore.
Per esempio:
$fp = @fsockopen($server, $porta, $errno, $errstr, 30);
if (!$fp) {
echo "Bot: Errore durante la connessione";
} else {
echo "Bot: Connessione riuscita";
}
Chiss? se stiamo andando OT
_________________ Staff TuttoIRC.it |
|
Mar Dic 20, 2005 2:32 pm |
|
|
valyus
Utente appena iscritto
Registrato: 04/04/06 21:40 Messaggi: 2 Residenza: Reggio Calabria |
|
|
|
A me non da alcun errore da nessuna parte, ma questo script come si dovrebbe avviare?
Io ho uppato il file ma non va, e non da errore :\
_________________ Admin: http://www.crocieristi.it |
|
Mar Apr 04, 2006 10:16 pm |
|
|
lollo.r0x
Veterano
Registrato: 15/06/06 14:14 Messaggi: 138 Residenza: Roma |
|
|
|
Scusate l'ignoranza, ma per inserire i vari codici per aggiungere funzioni al bot (quelle che per esempio nel mIrc mettiamo nei remotes...), come si fa?
Thx
|
|
Dom Ago 06, 2006 2:10 pm |
|
|
Remotes
Staff
Registrato: 12/11/05 19:32 Messaggi: 851 Residenza: Brusnengo (BI) |
|
|
|
/* 2?da Parte da editare ------------- */
if(eregi("!prova_comando",$one)) {
fwrite($fp, "PRIVMSG #treknology :Prova Risposta\n"); # AL POSTO DI PRIVMSG etc. POTETE METTERE UN COMANDO RAW DEL SERVER (SEMPRE SEGUITO DA \n)
vedi quella scritta?
? quella che devi editare
_________________ Linux Registered User n? #449257
|
|
Dom Ago 06, 2006 4:14 pm |
|
|
lollo.r0x
Veterano
Registrato: 15/06/06 14:14 Messaggi: 138 Residenza: Roma |
|
|
|
AH ok...
bene questa cosa mi interessa ma...quali sono esattamente le RAW da inserire (mi basterebbero le principali...)?
E poi, una volta che io salvo il codice sul mio file *.php e lo carico sul server, dovrebbe collegarsi in automatico?
Altervista ? supportato?
E con questo penso di avere esaurito il pacchetto domande
|
|
Dom Ago 06, 2006 6:44 pm |
|
|
Remotes
Staff
Registrato: 12/11/05 19:32 Messaggi: 851 Residenza: Brusnengo (BI) |
|
|
|
uhm... non saprei aiutarti x i raw...
ci sono due errorini di php nel codice, per il resto una volta uppato sul server bisogna aprire la pagina dal browser...
altervista non lo supporta...
_________________ Linux Registered User n? #449257
|
|
Dom Ago 06, 2006 8:39 pm |
|
|
elegos
Livello intermedio
Registrato: 19/03/06 16:29 Messaggi: 44
|
|
|
|
potrei postare una versione 'rivista & corretta' del codice se volete... per? ho un problema: come faccio a mandare messaggi di pi? di una parola?
per ora ho provato:
MSG #canale testo di un messaggio <-- non mi visualizza nulla
/msg #canale testo di un messaggio <-- non mi visualizza nulla
PRIVMSG #canale testo di un messaggio <-- mi visualizza solo la prima parola
come faccio? Aiuto!
Inoltre: quali sono gli altri possibili comandi?
Grazie
|
|
Dom Mar 11, 2007 11:44 pm |
|
|
Remotes
Staff
Registrato: 12/11/05 19:32 Messaggi: 851 Residenza: Brusnengo (BI) |
|
|
|
privmsg #canale :testo del messaggio
devi mettere : attaccato alla prima parola
_________________ Linux Registered User n? #449257
|
|
Lun Mar 12, 2007 5:57 am |
|
|
elegos
Livello intermedio
Registrato: 19/03/06 16:29 Messaggi: 44
|
|
|
|
grazie
ora lavoro su una versione PHP+MySQL e posto anche la v.PHP corretta (una volta ripuliita del mio codice )
cmq la sintassi ? PRIVMSG CANALE :TESTO, non ci vuole # prima del canale
|
|
Ven Mar 16, 2007 8:39 am |
|
|
elegos
Livello intermedio
Registrato: 19/03/06 16:29 Messaggi: 44
|
|
|
Ven Mar 16, 2007 11:30 pm |
|
|
^DaNGeR^
Staff
Registrato: 13/12/05 00:59 Messaggi: 184
|
|
|
|
Comunque quando si utilizza una variabile in PHP all'interno di una stringa tra apici doppi " " ? sempre meglio definire l'inizio e la fine della stessa usando le parentesi graffe come ad esempio:
| | <?
$nome = "Utente";
echo "Benvenuto {$nome} su TuttoIRC.it";
?> |
Questo per ovviare eventualmente a problemi derivati da parole senza spazi tipo con la variabile $nome che diventa $nomeNovizio (errato). Se si desidera unire UtenteNovizio bisogna usare la sintassi {$nome}Novizio con il risultato appunto UtenteNovizio.
_________________
|
|
Gio Gen 24, 2008 6:13 pm |
|
|
|
|
Non puoi inserire nuovi argomenti Non puoi rispondere a nessun argomento Non puoi modificare i tuoi messaggi Non puoi cancellare i tuoi messaggi Non puoi votare nei sondaggi
|
|
|