Hey, i found something like this.
<?
error_reporting(E_ALL^E_NOTICE);
set_time_limit(0);
define ('CRLF', "\n"); // coby bylo latwiej jak serwer wymaga \r\n
$nick = 'BTM||';
$username = 'BTM||';
$localhost = 'btm-comp.toya.net.pl';
$remotehost = 'poznan.irc.pl';
$realname = 'BTMs Little Thingy';
$channel = '#emu-pl'; //
$_ADMIN[]='yeah-right@btm-comp.toya.net.pl';
$_ADMIN[]='~btm@lac.pl';
$ignore_event=array(001,002,003,004,251,252,253,254,255,256,265,266,374,375,372,376,353,366); // eventy do ignorowania, MOTD i info o przylaczaniu
// otwieramy rure
$fp = fsockopen($remotehost,6666, &$err_num, &$err_msg, 30);
if(!$fp)
{
echo 'Podany serwer zdaje sie nie odpowiadac :/!';
exit;
}
// polaczenie, umnie wymagalo takze PASS, moze byc dowolny, jak masz ident server to moze nie wymagac
$Header .= 'PASS ' . 'bbb' . CRLF;
$Header .= 'NICK ' . $nick . CRLF;
$Header .= 'USER ' . $username . ' ' . $localhost . ' ' . $remotehost . ' :' . $realname . CRLF;
fputs($fp, $Header);
// odbieramy dane
$response = '';
while (!feof($fp))
{ // w petli zeby nam sie nie zakonczyl proces
$response .= fgets($fp, 1024);
while (substr_count($response,CRLF) != 0)
{
$offset = strpos($response, CRLF);
$data = substr($response,0,$offset); // bierzemy jedna linijke
$response = substr($response,$offset+2);
if ( substr($data,0,1) == ':' )
{ // jezeli pierwszy znak to : ( info o zdazeniu )
// format
// :sender command :text
$offsetA = strpos($data, ' '); // szukamy pierwszej spacji
$dFrom = substr($data,1,$offsetA-1); // $dFrom - nadawca
$dFromHost=explode('!',$dFrom);
$offsetB = strpos($data, ' :'); // szukamy pierwszego :
$dCommand = substr($data,$offsetA+1,$offsetB-$offsetA-1); // $dCommand - komenda
$dText = substr($data,$offsetB+2); // $dText tresc
if($dFrom == $remotehost)
// &&!in_array(substr($dCommand,0,3),$ignore_event)
{
// fputs($fp,'PRIVMSG |BTM| :event : ' .$data . CRLF);
if(strstr($data,'= '))
{
$ile = explode(' :',$data);
$ile = explode(' ',$ile[1]);
$ile = count($ile);
echo 'Na kanale '.$channel.' znajduje(j¹) sie aktualnie '.($ile-2).' osób(osoby) !';
fputs($fp,'QUIT '. CRLF);
fclose($fp);
die();
}
}
if ( substr($dCommand,0,3) == '004' ) // jezeli wlasnie zakonczylismy logowanie
{
fputs($fp,'JOIN ' . $channel . CRLF); // Join $channel
fputs($fp,'NAMES ' .$channel .CRLF); // names chanel
}
}
elseif ( substr($data,0,4) == 'PING' ) // jezeli widzimy ping
{
// odpowiadamy na ping serwera
fputs($fp,'PONG ' . substr($data,5) . CRLF);
}
}
}
// koniec polaczenia, zamknij rure ;]
fclose ($fp);
?>
Comments are in polish 🙂.