`": ""); // согласные $res=''; for($i=0;$i= " ") ? $tempStr{$j} : "."; } if (strlen($tempHex) < 48) while (strlen($tempHex) < 48) $tempHex .= " "; if (strlen($tempRaw) < 16) while (strlen($tempRaw) < 16) $tempRaw .= " "; $ret .= "$tempHex| $tempRaw |\n"; } return $ret; } function declension($int, $expressions) { settype($int, "integer"); if ($int == 0) return "ни одного {$expressions[1]}"; $count = $int % 100; if ($count >= 5 && $count <= 20) { $result = $int." ".$expressions[2]; } else { $count = $count % 10; if ($count == 1) { $result = $int." ".$expressions[0]; } elseif ($count >= 2 && $count <= 4) { $result = $int." ".$expressions[1]; } else { $result = $int." ".$expressions[2]; } } return $result; } function GetRuDate($time) { $date = gmdate("Ymd",$time); $year = substr($date, 0, 4); $month = substr($date, 4, 2); $day = substr($date, 6, 2); switch ($month) { case '01': $month = 'января' ; break; case '02': $month = 'февраля' ; break; case '03': $month = 'марта' ; break; case '04': $month = 'апреля' ; break; case '05': $month = 'мая' ; break; case '06': $month = 'июня' ; break; case '07': $month = 'июля' ; break; case '08': $month = 'августа' ; break; case '09': $month = 'сентября' ; break; case '10': $month = 'октября' ; break; case '11': $month = 'ноября' ; break; case '12': $month = 'декабря' ; break; } $date = "$day $month $year г., ".gmdate("H:i:s",$time); return $date; } $charmap = "%u0402%u0403%u201A%u0453%u201E%u2026%u2020%u2021%u20AC%u2030%u0409%u2039%u040A%u040C%u040B%u040F". "%u0452%u2018%u2019%u201C%u201D%u2022%u2013%u2014%u0000%u2122%u0459%u203A%u045A%u045C%u045B%u045F". "%u00A0%u040E%u045E%u0408%u00A4%u0490%u00A6%u00A7%u0401%u00A9%u0404%u00AB%u00AC%u00AD%u00AE%u0407". "%u00B0%u00B1%u0406%u0456%u0491%u00B5%u00B6%u00B7%u0451%u2116%u0454%u00BB%u0458%u0405%u0455%u0457"; function ucs2win($str) { global $charmap; $ret = ""; if (strlen($str) % 2 != 0) return ""; for ($i = 1; $i < strlen($str); $i++) { $first_char = ord($str{$i++}) & 0xff; $i++; $second_char = ord($str{$i++}) & 0xff; $char = ($first_char << 8) | $second_char; if (($char >= 0x0410) && ($char <= 0x044f)) { $ret .= chr($char - 0x0350); } else if ($char < 128) { $ret .= chr($char & 0x7f); } else { if (($pos = strpos($charmap, sprintf("%%u%04X", $char))) != false) { $ret .= chr(128 + ($pos / 6)); } else { $ret .= chr($char & 0xff); } } } return $ret; } function utf2ucs($utf8) { $ret = ""; for ($i = 0; $i < strlen($utf8); $i++) { $charcode = 0; $first = ord($utf8{$i}); if (($first & 0x80) == 0) { $charcode = $first; } else { if ((($first & 224) != 192) | !isset($utf8{$i++})) return false; $second = ord($utf8{$i}); if (($second & 192) != 0x80) return false; if (($first & 240) == 224) { if (!isset($utf8{$i++})) return false; $third = ord($utf8{$i}); if (($third & 192) != 0x80) return false; $charcode = (($first & 0x0F) << 12) | (($second & 0x3F) << 6) | ($third & 0x3F); } else { $charcode = ($first & 0x1F) << 6 | ($second & 0x3F); } } $ret .= pack("n", $charcode); } return $ret; } function getW($str, $pos, $le = false) { $ret = 0; if ($le) { $ret = ((ord($str{$pos + 1}) & 0xFF) << 8) | (ord($str{$pos}) & 0xFF); } else { $ret = ((ord($str{$pos}) & 0xFF) << 8) | (ord($str{$pos + 1}) & 0xFF); } return $ret; } function readLine($fh) { $curr_line = ""; while ((($current_char = fread($fh, 1)) != "\n") & !feof($fh)) $curr_line .= $current_char; return $curr_line; } function readSRV() { global $serv; $data = fread($serv,6); if (!$data) { //print "No answer from server.\n"; return ""; } if ($data{0} != "*") { print "Bad server answer:\n"; print hexDump($data); return false; } $channel_id = ord($data{1}); $seqid = getW($data, 2); $len = getW($data, 4); $content = $len > 0 ? fread($serv,$len) : ""; print hexDump($data.$content); return array( 'CHANNEL_ID' => $channel_id, 'SEQ' => $seqid, 'LENGTH' => $len, 'DATA' => $content ); } function sndFLAP($channel,$raw="") { static $id; global $serv; if (!@$id) $id = (int)rand(0,0x7fff); $to_send = "*"; $to_send .= chr($channel); $to_send .= pack("n",$id); $to_send .= pack("n",strlen($raw)); $to_send .= $raw; $id++; $id &= 0x7fff; print hexDump($to_send); return fwrite($serv,$to_send,strlen($to_send)); } function splitTLVS($raw) { $i = -1; $na = 0; $result = array(); while ($i++ < strlen($raw)) { if (!isset($raw{$i})) break; $unp = substr($raw,$i,2); $unp = unpack("n",$unp); $tlv_id = $unp[1]; $unp = substr($raw,$i+2,2); $unp = unpack("n",$unp); $tlv_len = $unp[1]; $tlv_data = substr($raw,$i+4,$tlv_len); if (isset($result[$tlv_id])) $na++; $result[isset($result[$tlv_id]) ? dechex($tlv_id)."_$na" : $tlv_id] = $tlv_data; $i += $tlv_len + 3; } return $result; } function sendMSG($to,$what="",$canBeOffline=false) { global $ads; static $cnt; $cnt++; $what = trim($what); if (($cnt % 5) == 0 && $ads) $what .= "\n\n>>> ".trim($ads[rand(0, count($ads) - 1)])." <<<"; if (strlen($what) > 2048) { while (strlen($what) > 2048) { $w2 = substr($what, 0, 2048); sendMSG($to, $w2); $what = substr($what, 2048); } if ($what != "") sendMSG($to, $what); return; } $stlv = "\x05\x01\x00\x02\x01\x01\x01\x01"; $stlv .= pack("n",strlen($what)+4); $stlv .= "\x00\x00\x00\x00"; $stlv .= $what; $return = "\x00\x04\x00\x06\x00\x00\x00\x01\x00\x06"; $return .= "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01"; $return .= chr(strlen($to)).$to."\x00\x02".pack("n",strlen($stlv)).$stlv . ($canBeOffline ? "\x00\x06\x00\x00" : ""); sndFLAP(2,$return); sleep(2); } #rem chdir('c:\AppServ\icq.php '); #rem require('icq_log.php'); #rem require('send_sms_email.php'); #rem require('get_phone_address.php'); function watchUins($uins) { if (!is_array($uins)) { $uins = array($uins); // :) } $snacCnt = ""; foreach ($uins as $uin) { $snacCnt .= chr(strlen($uin)) . $uin; } if ($snacCnt != "") { sndFLAP(2, pack("H*", "00030004000000000000") . $snacCnt); } } function recieveMSG($data) { global $sessions, $uin, $from, $antiflood_arr_2, $phrases, $mailQueue, $stats, $icbm_log_file, $kidalas, $cp_login_string, $table_mrg; if (ord($data{1}) == 4 && ord($data{3}) == 7) { $msg_channel = ord($data{19}); $msg_sender_screenname_len = ord($data{20}); $msg_sender_screenname = substr($data,21,$msg_sender_screenname_len); $msg_tlvs = splitTLVS(substr($data,25+$msg_sender_screenname_len)); $decodeUCS = false; if ($msg_channel == 1) { $msg_inttlvs = splitTLVS($msg_tlvs[2]); $tlvx101 = $msg_inttlvs[0x0101]; $charset = getW($tlvx101, 0); $msg_text = substr($tlvx101, 4); if (preg_match('#[^\x01-\x7f]#x', $msg_text)) { $utf2ucs = utf2ucs($msg_text); if ($utf2ucs != false) { $msg_text = $utf2ucs; $decodeUCS = true; $utf2ucs = null; } else { $decodeUCS = ($charset == 2); } if ($decodeUCS) $msg_text = ucs2win($msg_text); } } else if ($msg_channel == 4) { $tlv5 = $msg_tlvs[5]; if (getW($tlv5, 4) != 0x0101) return; $len = getW($tlv5, 6, true); $msg_text = substr($tlv5, 8, $len - 1); if (preg_match('#[^\x01-\x7f]#x', $msg_text)) { $utf2ucs = utf2ucs($msg_text); if ($utf2ucs != false) { $msg_text = ucs2win($utf2ucs); $utf2ucs = null; } } } else { print "Unknown MSG channel. Ignoring . . .\n\n"; return; } print "RECIEVED MESSAGE.\n"; print "MESSAGE TYPE: $msg_channel\n"; print "FROM: $msg_sender_screenname\n"; print "MESSAGE:\n"; print "$msg_text\n\n"; /*************************************/ if (isset($antiflood_arr_2[$msg_sender_screenname])) { if ($antiflood_arr_2[$msg_sender_screenname] > 150) return; if ($antiflood_arr_2[$msg_sender_screenname]++ > 150) { sendMSG($msg_sender_screenname,"Извините, Вы превысили лимит сообщений!\nПодождите ещё минут десять — тогда и продолжим :)"); return; } } else { $antiflood_arr_2[$msg_sender_screenname] = 1; } if ($msg_text == "") return; $fh = fopen($icbm_log_file, "at"); fwrite($fh, "$msg_sender_screenname;" . $msg_text . "\n"); fclose($fh); $sendto = $msg_sender_screenname; $stats['mess'.strlen($sendto).'d']++; if (!isset($stats['uins'][$msg_sender_screenname])) { $stats['uins'][$msg_sender_screenname] = time(); $stats[strlen($sendto).'d']++; } foreach ($sessions as $from => $_to) { if ($msg_sender_screenname == $_to['with']) { if (strtolower($msg_text) == '!kidala' && $from != "117886" && $from != "577388") { sendMSG($_to['with'], "Теперь всё ок! Можете пользоваться ботом!"); $send = "Доигрался ты, чувак…\nТы заработал отлучение от команды '!talk'. Администратор получил уведомление об этом. Если пользователь, с которым шёл разговор, наказал Вас несправедливо — Вы получите амнистию, а он — наказание ;) Если-же справедливо — то придётся Вам отдохнуть от команды '!talk'…"; $kidalas[$from] = true; unset($sessions[$from]); $fh = fopen("kidalas.php", "wt"); fwrite($fh, ""); fclose($fh); sendMSG("577388", "$from получил отлучение от команды '!talk' от номера $msg_sender_screenname.", true); } else { $send = $msg_text; } $sendto = $from; sendMSG($sendto,$send,true); return; } } #rem put_icq_log($msg_sender_screenname, $msg_text); if (preg_match("#^!music\s+(.{3,})\s+\*(\d{1,2})$#is", $msg_text, $process_match) || preg_match("#^!music\s+(.{3,})$#is", $msg_text, $process_match)) { $query = $process_match[1]; $page = (isset($process_match[2]) ? $process_match[2] : 1); $query = preg_replace('{[\r\n\t"\'\[\]\x00\{\}-]}xis', "", $query); if (preg_match("#[а-яА-ЯЁе]#", $query)) $query = Transliterate($query); $send = "Ваш запрос: '" . $query . "'.\n"; $gq = "/search?q=-inurl%3A%22html%22+-inurl%3A%22htm%22+-inurl%3A%22php%22+-inurl%3A" . "%22pl%22+intitle%3A%22index+of%22+mp3+%22" . urlencode($query) . "%22&start=" . (($page - 1) * 10); $httpq = "GET $gq HTTP/1.0\r\nHost: www.google.com\r\nAccept: */*\r\nUser-Agent: -\r\n\r\n"; $ch = fsockopen("google.com", "80"); if ($ch !== null) { fwrite($ch, $httpq); $data = ""; while (!feof($ch)) $data .= fread($ch, 1); fclose($ch); $flpos = strpos($data, "
"); if ($flpos === false) { $send = "Извините, по Вашему запросу ничего не нашлось."; } else { $multipage = ((strpos($data, "nav_page.gif") === false) ? false : true); $data = substr($data, $flpos + 13); $pos = 0; $i = 0; while (($pos = strpos($data, "

'); $send .= "$i. " . substr($data, 0, $epos) . "\n"; } if ($multipage && $page < 99) $send .= "\nДля получения слeдующей десятки результатов пошлите боту: '!music $query *" . ($page + 1) . "'."; if ($page > 1) $send .= "\nДля получения предыдущей десятки результатов пошлите боту: '!music $query *" . ($page - 1) . "'."; } } else { $send = "Извините, не удалось подключиться к поисковому серверу. Пожалуйста, попробуйте повторить Ваш запрос через некоторое время."; } sendMSG($sendto, $send); return; } if (isset($sessions[$msg_sender_screenname])) { if ($msg_text != '!close') { $send = $msg_text; $sendto = $sessions[$msg_sender_screenname]['with']; $sessions[$msg_sender_screenname]['lastmsg'] = time(); } else { $send = "Спасибо! Сессия с номером '{$sessions[$msg_sender_screenname]['with']}' закрыта."; unset($sessions[$msg_sender_screenname]); } } else if (preg_match("#^!talk\s+([\d-]+)#i",$msg_text,$uin_match)) { $to = preg_replace("#[^\d]#",'',$uin_match[1]); if (isset($kidalas[$msg_sender_screenname])) { $send = "Песдуй в Бабруйск жывотнае…"; } else if (!$to) { $send = "Не введён UIN."; } else if (strlen((string)$to) < 6) { $send = "Хеей! Ты не можешь говорить с пятизначками! Я не хочу, чтобы мираблы мне оторвали голову!"; } else if (strlen((string)$to) > 9) { $send = "Интересный UIN… Очень интересный… Мож пойдёшь отсюда подальше? ;)"; } else if ($to == $uin) { $send = "Хм, ты чё, хочешь сделать бесконечное зацикливание? Делай, но не у меня."; } else if ($to == $msg_sender_screenname) { $send = "У тебя раздвоение личности, да?"; } else if ($to == "744444" || $to == "64464644") { $send = "С ботами не разговариваю."; } else if ($to == "117886") { $send = "Ты на кого попёp? Стучись со своего номера!"; } else if (isset($sessions[$to])) { $send = "Занятооо :)"; } else { $send = "Спасибо! Сессия с номером '$to' открыта. Теперь Вы можете принимать и посылать сообщения. В конце разговора не забудьте закрыть сессию командой '!close'."; $sessions[$msg_sender_screenname] = array('with' => $to, 'lastmsg' => time()); } } else if (preg_match("#^!info\s+([\d-]+)#",$msg_text,$uin_match)) { $to = preg_replace("#[^\d]#",'',$uin_match[1]); if (!$to) { $send = "Не введён UIN."; } else if (strlen((string)$to) < 6) { $send = "Чего-чего? ;)"; } else if (strlen((string)$to) > 9) { $send = "Интересный UIN… Очень интересный… Мож пойдёшь отсюда подальше? ;)"; } else if ($to == $uin) { $send = "Да в онлайне я, в онлайне…"; } else { sndFLAP(2,"\x00\x02\x00\x05\x00\x00\x00\x00\x00\x05\x00\x05".chr(strlen($to)).$to); $DATA = readSRV(); $d = $DATA['DATA']; if (ord($d{1}) == 2 && ord($d{3}) == 6) { $d = substr($d,10); $uin_info_len = ord($d{0}); $uin_info = substr($d,1,$uin_info_len); $tlvs = splitTLVS(substr($d,5+$uin_info_len)); foreach ($tlvs as $tlv_id => $tlv_data) { print "\n\n"; print "TLV ID: $tlv_id\n"; print "TLV DATA:\n".hexDump($tlv_data); print "\n\n"; } $status = unpack("N",$tlvs[6]); $status = $status[1]; $send = "Номер: $uin_info\nСтатус: "._returnStatus($status); } else { $send = "А чувак не в сети :)"; } } } else if (preg_match("#^!md5\s+(.+)#is",$msg_text,$process_match)) { $what = $process_match[1]; $send = "MD5-хеш строки: ".md5($what); } else if (preg_match("#^!base64enc\s+(.+)#is",$msg_text,$process_match)) { $what = $process_match[1]; $send = "base64-представление строки:\n".chunk_split(base64_encode($what)); } else if (preg_match("#^!base64dec\s+(.+)#is",$msg_text,$process_match)) { $what = $process_match[1]; $send = "Строка (HEX-представление):\n".trim(hexDump(base64_decode(chunk_split($what)))); } else if (preg_match("#^!urlenc\s+(.+)#is",$msg_text,$process_match)) { $what = $process_match[1]; $send = "Строка в формате URL encoded:\n".urlencode($what); } else if (preg_match("#^!urldec\s+(.+)#is",$msg_text,$process_match)) { $what = $process_match[1]; $send = "Раcкодированная строка:\n".urldecode($what); } else if (preg_match("#^!makepass\s+(\d+)(d)?(u)?(s)?#i",$msg_text,$process_match)) { $len = @$process_match[1] < 5 ? 8 : $process_match[1]; $d = @$process_match[2]; $u = @$process_match[3]; $s = @$process_match[4]; if ($len < 128 && $len > 4) { $res = makePass($len,$d,$u,$s); $send = "Сгенерированный пароль (".declension($len,array("символ","символа","символов")).(!$d ? "" : ", с цифрами").($u ? ", с использованием БОЛЬШИХ букв" : "").($s ? ", с использованием \$пеци@льных си/\\/\\волов" : "")."):\n$res"; } else { $send = "Длина пароля не может быть больше 128 и меньше 5 символов!"; } } else if (preg_match("#^!c\s+(.+)#is",$msg_text,$process_match)) { $what = @$process_match[1]; if (strlen($what) < 1 || strlen($what) > 4096) { $send = "Строка пуста, либо слишком длинная."; } else { $eng = " qwertyuiop[]asdfghjkl;'zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:\"ZXCVBNM<>?@#\$%^&`~"; $rus = " йцукенгшщзхъфывапролджэячсмитьбю.ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,\"№;%:?ёЁ"; $i = -1; $send = "Преобразованная строка:\n"; while ($i++ < strlen($what)) { if (!isset($what{$i})) break; $engStringPos = strpos($eng,$what{$i}); if ($engStringPos != false) { $send .= $rus{$engStringPos}; continue; } $rusStringPos = strpos($rus,$what{$i}); if ($rusStringPos != false) { $send .= $eng{$rusStringPos}; continue; } $send .= $what{$i}; } } } else if (preg_match("#^!t\s+(.+)#is",$msg_text,$process_match)) { $send = "Транслитерированая строка:\n".Transliterate(@$process_match[1]); } elseif (preg_match("#^!email\s+([a-z0-9_\-\.]+@[a-z0-9_\-\.]+\.[a-z]{2,4})\s+(.+)#is",$msg_text,$process_match)) { if($to = check_email($process_match[1])){ if($mail_body = $process_match[2]){ if(send_sms($to, $mail_body)) $send = "Спасибо! Ваше письмо на $to отправлено.\n"; else $send = "Письмо на $to не отправлено. Попробуйте позже.\n"; }else{ $send = "Пустые письма не отправляем.\n"; } }else{ $send = "Неправильный адрес $to.\n"; } } elseif (preg_match("#^!sms\s+([0-9]{11,12})\s+(.+)#is",$msg_text,$process_match)) { $to = $process_match[1]; if($phone_address = get_phone_address($to)){ if($sms_text = $process_match[2]){ $min_sms_length = 5; if(strlen($sms_text) >= $min_sms_length){ $max_sms_length = 100; if(strlen($sms_text) < $max_sms_length){ if(send_sms($phone_address, $sms_text)){ $send = "Спасибо! Ваше SMS на номер +$to будет отправлено в течение 5 минут.\n Внимание - временно половина операторов отключена! МТС И МЕГАФОН ТОЖЕ!"; }else{ $send = "СМС на номер +$to не отправлена."; } }else{ $send = "Максимальная длинна $sms_text СМС $max_sms_length символов."; } }else{ $send = "Минимальная длинна СМС $min_sms_length символов."; } }else{ $send = "Пустые СМС не шлются."; } }else{ $send = "На этот номер телефона отправка невозможна."; } } else if (preg_match("#^!findcrack\s+(.+)#i",$msg_text,$process_match)) { $query = trim($process_match[1]); if (strlen($query) < 5) { $send = "Ивзините, в запросе не должно быть меньше пяти символов."; } else { $send = "Ваш запрос: '$query'.\n"; $post = "KW=" . urlencode($query) . "&Type=All"; $httpq = "POST /s.x HTTP/1.0\r\nHost: cracks.am\r\nAccept: */*\r\nUser-Agent: -\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: ".strlen($post)."\r\n\r\n$post\r\n"; $ch = fsockopen("cracks.am", 80); fwrite($ch, $httpq); $data = ""; while (!feof($ch)) $data .= fread($ch, 1); fclose($ch); if (!preg_match("#no\s+files\s+found#i", $data)) { if (preg_match("#ALT=next NAME=next>#i", $data)) { $send .= "Извините, по Вашему запросу очень много креков. Пожалуйста, введите больше данных в запросе."; } else { $data = substr($data, strpos($data, "

", $data); $n_data = array(); foreach ($data as $dAtA) $n_data[] = array( 'name' => preg_replace("#^(.+)$#", "\\1", $dAtA), 'link' => "http://cracks.am" . preg_replace("#^.+$#", "\\1", $dAtA) ); $send .= "В базе ".declension(count($n_data), array("крек", "крека", "креков")).":\n"; foreach ($n_data as $iD => $DtA) $send .= ($iD + 1).". {$DtA['name']} >> {$DtA['link']} <<\n"; } } else { $send .= "Извините, в базе нет креков, соответствующиx Вашему запросу."; } } } else if (preg_match("#^!whois\s+(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})#i", $msg_text, $ip) || preg_match("#^!whois\s+([a-z0-9\-\.]{1,255})\.([a-z]{2,4})#i", $msg_text, $domain)) { $s = ($ip ? "{$ip[1]}.{$ip[2]}.{$ip[3]}.{$ip[4]}" : "{$domain[1]}.{$domain[2]}"); $gq = "/tools/whois.ch?ip=" . $s . "&cache=off&email=on"; $httpq = "GET $gq HTTP/1.1\r\nHost: www.dnsstuff.com\r\nAccept: */*\r\nUser-Agent: ICQ bot 100935\r\n\r\n"; $ch = fsockopen("dnsstuff.com", "80"); if ($ch !== null) { fwrite($ch, $httpq); $data = ""; while (!feof($ch)) $data .= fread($ch, 1); fclose($ch); $tbl_begin = "
";
				$spos = strpos($data, $tbl_begin);
				$epos = strpos($data, "
"); $data = substr($data, ($spos + strlen($tbl_begin)), $epos - ($spos + strlen($tbl_begin))); $data = preg_replace("#<.+?>#", "", $data); $data = preg_replace("#%.*?(\r\n|\r|\n)#", "", $data); $data = str_replace(array('<', '>', '"', '&'), array('<', '>', '"', '&'), $data); $data = trim(preg_replace("#(\s)+#", "\\1", $data)); $send = "Информация получена с http://dnsstuff.com/\n" . ($data ? $data : "В базе нет данных об этом домене/IP-адресе."); } else { $send = "Не удалось подключиться к серверу Whois. Пожалуйста, попробуйте повторить запрос через некоторое время."; } } else if (preg_match("#^!ftp\s+(.{4,})$#is", $msg_text, $process_match)) { $query = $process_match[1]; $query = str_replace(array("\r", "\n", "\t", "\x00"), "", $query); $send = "Ваш запрос: '$query'.\n"; $gq = "/8.php3?q=" . urlencode($query); $httpq = "GET $gq HTTP/1.0\r\nHost: reliz.ru\r\nAccept: */*\r\nUser-Agent: -\r\n\r\n"; $ch = fsockopen("reliz.ru", "80"); if ($ch !== null) { fwrite($ch, $httpq); $data = ""; while (!feof($ch)) $data .= fread($ch, 1); fclose($ch); $pos = strpos($data, "
'); $rlink = trim(substr($data, 0, $epos)); if (preg_match("#^8.php3#", $rlink)) continue; $rlink = preg_replace_callback('#[\s\^\*()\[\]@]#i', create_function('$a', '{ return str_replace("+", "%20", urlencode($a[0])); }'), $rlink); $send .= "$i. " . $rlink . "\n"; } } } else { $send = "Извините, поисковый сервер сейчас недоступен. Пожалуйста, повторите свой запрос позже."; } } else if (preg_match("#^!rstart\s+([a-z0-9_\-\.]+@[a-z0-9_\-\.]+\.[a-z]{2,4})#i", $msg_text, $process_match)) { $email = $process_match[1]; /*$send = "Спасибо!\nНа адрес '$email' выслан код для активации. Чтобы переадресатор заработал, Вы должны будете отправить боту этот код до " . getRuDate(time() + (3600 * 24)) . " (по Гринвическому времени; сейчас — " . getRuDate(time()) . "). Код должен быть отправлен именно с этого icq-номера!\nКстати, в высланном письме содержится Ваш icq-номер. Так что если Вы захотите кого-либо заспамить с сотни ящиков через этот сервис — сразу говорю — не выйдет ;)";*/ /*$ssc = fsockopen("smtp.mail.ru", "25"); $err = null; if ($ssc != null) {*/ $err = null; $readdr = include "./readdr.php"; $g_eml = makepass(rand(8, 14)); foreach ($readdr as $r_item) { if ($r_item['fwd_to'] == $email) $err = "Извините, на этот адрес пересылка уже включена."; if ($r_item['owner_uin'] == $msg_sender_screenname) $err = "Извините, с этого номера уже зарегистрирован ящик '{$r_item['eml']}@kaleostra.info' (пересылка на '{$r_item['fwd_to']}')."; if ($r_item['eml'] == $g_eml) $g_eml = makepass(rand(8, 14)); } $send = "Спасибо!\nВаш почтовый ящик ('$g_eml@kaleostra.info') активирован.\nВсе письма, написанные на $g_eml@kaleostra.info, будут переадресованы на $email.\nДля удаления почтового ящика напишите боту '!rend $email'."; if ($err != null) { $send = $err; } else { $post = "email=" . urlencode($g_eml) . "&domain=kaleostra.info&forward=" . urlencode($email); $httpq = "POST /frontend/rvlightblue/mail/doaddfwd.html HTTP/1.0\r\n" . "Authorization: Basic " . base64_encode($cp_login_string) . "\r\n" . "Host: 70.84.17.229\r\nAccept: */*\r\nUser-Agent: -\r\n" . "Content-Type: application/x-www-form-urlencoded\r\nContent-Length: ".strlen($post)."\r\n\r\n$post\r\n"; $sc = fsockopen("70.84.17.229", "2082"); fwrite($sc, $httpq); $data = ""; while (!feof($sc)) $data .= fread($sc, 1); if (strpos($data, "будут переадресованы") === false) { $send = "Произошла ошибка."; } else { $readdr[] = array( "owner_uin" => $msg_sender_screenname, "fwd_to" => $email, "activation_fields" => null, "eml" => $g_eml, "valid_to" => -1 ); $dbfh = fopen("./readdr.php", "wt"); fwrite($dbfh, ""); fwrite($dbfh, ""); fclose($dbfh); } } /*if ($err != null) { $send = $err; fclose($ssc); } else { $hash = md5(time() . makepass(10) . makepass(100) . makepass(1000)); if (fread($ssc, 3) == "220") { fwrite($ssc, "helo mail.ru\r\n"); } else { $err = 1; } if (fread($ssc, 3) == "250" && $err != null) { fwrite($ssc, "auth login\r\n"); } else { $err = 2; } if (fread($ssc, 3) == "334" && $err != null) { fwrite($ssc, base64_encode("readdr-activator@mail.ru") . "\r\n"); } else { $err = 3; } if (fread($ssc, 3) == "334" && $err != null) { fwrite($ssc, base64_encode("11111") . "\r\n"); } else { $err = 4; } if (fread($ssc, 3) == "235" && $err != null) { fwrite($ssc, "mail from: readdr-activator@mail.ru\r\n"); } else { $err = 5; } if (fread($ssc, 3) == "250" && $err != null) { fwrite($ssc, "rcpt to: $email\r\n"); } else { $err = 6; } if (fread($ssc, 3) == "250" && $err != null) { fwrite($ssc, "DATA\r\n"); } else { $err = 7; } if (fread($ssc, 3) == "354" && $err != null) { $m_body = "X-Sender: readdr-activator@mail.ru\r\n"; $m_body .= "X-Receiver: $email\r\n"; $m_body .= "X-Mailer: ICQ bot 45-404-404\r\n"; $m_body .= "Return-Path: readdr-activator@mail.ru\r\n"; $m_body .= "Reply-To: readdr-activator@mail.ru\r\n"; $m_body .= "To: $email\r\n"; $m_body .= "From: readdr-activator@mail.ru\r\n"; $m_body .= "Content-Type: text/plain; charset=windows-1251\r\n"; $m_body .= "Content-Transfer-Encoding: 8bit\r\n\r\n"; $m_body .= "Здравствуйте. Вы получили это письмо, т. к. некто с icq-номером $msg_sender_screenname хочет зарегистрировать переадресацию почты на ваш ящик через icq-бота с номером 45-404-404.\r\n\r\n"; $m_body .= "Если Вы не запрашивали какую-либо регистрацию, то просто УДАЛИТЕ это письмо.\r\n\r\n"; $m_body .= "Если-же это письмо попало по адресу :) то для активации ящика напишите боту сообщение с текстом:\r\n\r\n"; $m_body .= "ack$hash\r\n\r\n"; $m_body .= "Это письмо написано роботом. Отвечать на него не нужно."; fwrite($ssc, "$m_body\r\n\r\n.\r\n"); } else { $err = 8; } if (fread($ssc, 3) == "250" && $err != null) { fwrite($ssc, "quit"); fclose($ssc); } else { $err = 9; } if ($err != null) { while (($cchar = fread($ssc, 1)) != "\n") print $cchar; print "CANNOT SEND MAIL\n"; $send = "Извините, отправка письма не удалась."; } else { $readdr[] = array( "owner_uin" => $msg_sender_screenname, "fwd_to" => $email, "activation_fields" => array(false, $hash, time()), "eml" => $g_eml, "valid_to" => -1 ); $dbfh = fopen("./readdr.php", "wt"); fwrite($dbfh, ""); fwrite($dbfh, ""); fclose($dbfh); } } } else { $send = "Извините, запрос отклонён, т. к. не удалось соединиться с SMTP-сервером."; }*/ } else if (preg_match("#^!rend\s+([a-z0-9_\-\.]+@[a-z0-9_\-\.]+\.[a-z]{2,4})#i", $msg_text, $process_match)) { $email = $process_match[1]; $err = null; $iid = null; $item = null; $readdr = include "./readdr.php"; foreach ($readdr as $id => $r_item) { if ($r_item['fwd_to'] == $email) { $item = $r_item; $iid = $id; break; } } if ($item == null) { $send = "На этот E-Mail переадресация не ведётся."; } else if ($item['owner_uin'] != $msg_sender_screenname) { $send = "Удаление разрешается производить только с того-же номера, откуда производилась регистрация."; } else { $httpq = "GET /frontend/rvblue/mail/dodelfwd.html?email=" . $item['eml'] . "%40kaleostra.info=" . urlencode($email) . " HTTP/1.0\r\n" . "Authorization: Basic " . base64_encode($cp_login_string) . "\r\n" . "Host: 70.84.17.229\r\nAccept: */*\r\nUser-Agent: -\r\n\r\n"; $sc = fsockopen("70.84.17.229", "2082"); fwrite($sc, $httpq); $data = ""; while (!feof($sc)) $data .= fread($sc, 1); if (strpos($data, "больше не переадресуется") === false) { $send = "Произошла ошибка."; } else { unset($readdr[$iid]); $dbfh = fopen("./readdr.php", "wt"); fwrite($dbfh, ""); fwrite($dbfh, ""); fclose($dbfh); $send = "Письма с {$item['eml']}@kaleostra.info больше не переадресуются на {$email}."; } } } else if (preg_match("#^!watch\s+(\d{6,9})#i", $msg_text, $process_match)) { global $uin_cnt; $wuin = $process_match[1]; $fn = "./1/$wuin.txt"; if (!file_exists($fn)) { if ($uin_cnt < 700) { $fh = fopen($fn, "at"); fwrite($fh, "Слежка ведётся начиная с " . time() . "\n" . "Слежка заказана с номера " . $msg_sender_screenname . "\n\n"); $fh = fclose($fh); $uin_cnt++; watchUins($wuin); $send = "Спасибо! Слежка за номером '$wuin' установлена. Для просмотра последних десяти изменений статуса наберите '!get $uin', чтобы увидеть полный список — посетите сайт http://kaleostra.info/ ."; } else { $send = "Извините, лимит за слежкой, равный 400 номерам, превышен."; } } else { $fh = fopen($fn, "rt"); $first_line = readLine($fh); if (preg_match("#\s+НЕ\s+ведётся#", $first_line)) { if ($uin_cnt < 400) { $uin_cnt++; $second_line = readLine($fh); $text = ""; while (!feof($fh)) $text .= readLine($fh) . "\n"; $first_line = "Слежка ведётся начиная с " . time(); $second_line = "Слежка заказана с номера " . $msg_sender_screenname; fclose($fh); $fh = fopen($fn, "wt"); fwrite($fh, $first_line . "\n" . $second_line . "\n" . $text); watchUins($wuin); $send = "Слежка за номером '$wuin' возобновлена. Для просмотра последних десяти изменений статуса наберите '!get $uin', чтобы увидеть полный список — посетите сайт http://kaleostra.info/ ."; } else { $send = "Извините, лимит за слежкой, равный 400 номерам, превышен."; } } else { $send = "Слежка за номером '$wuin' уже установлена. Для просмотра последних десяти изменений статуса наберите '!get $uin', чтобы увидеть полный список — посетите сайт http://kaleostra.info/ ."; } fclose($fh); } } else if (preg_match("#^!get\s+(\d{6,9})#i", $msg_text, $process_match)) { $wuin = $process_match[1]; $filename = "./1/$wuin.txt"; if (file_exists($filename)) { $fh = fopen($filename, "rt"); $first_line = readLine($fh); preg_match("#.+\s+(\d+)$#", $first_line, $time); $time = GetRuDate($time[1]); $first_line = preg_replace("#(\d+)$#", $time, $first_line); $second_line = readLine($fh); readLine($fh); $lines = array(); while (!feof($fh)) $lines[] = readLine($fh); $new = array(); $cnt = count($lines); if ($cnt > 10) { for ($i = $cnt - 11; $i < $cnt; $i++) { $new[] = $lines[$i]; } } else { $new = $lines; } $lines = null; $send = ($cnt > 10 ? "Здесь показаны только последние 10 изменений статуса номера '$wuin'. Для просмотра всех изменений посетите сайт http://kaleostra.info/ .\n" : "") . "Все времена и даты указаны по Гринвичскому времени!\n" . $first_line . "\n" . $second_line . "\n\n" . implode($new, "\n"); } else { $send = "Слежка за номером '$uin' не велась. Наберите '!watch $uin', чтобы начать слежку."; } } else if (preg_match("#^!readdr#i",$msg_text)) { $send = "СПРАВКА ПО ПЕРЕАДРЕСАТОРУ ПОЧТЫ\n\nПереадресатор почты создан для того, чтобы Вы могли попросить человека отправить Вам письмо на E-Mail, при этом не показывая свой реальный!\n\nВсе команды набираются без кавычек.\n\n--\n !rstart *Ваш_email* — начать переадресацию почты. При этом для Вас сгенерируется ящик вида blablabla@kaleostra.info. То, что до @, будет сгенерировано случайно. После посылки этой команды всё то, что будет послано на Ваш сгенерированный ящик — перешлётся на Ваш реальный.\n\n--\n !rend *Ваш_email* — отменить переадресацию почты. Тут, думаю, всё должно быть и так понятно :)"; } else if (preg_match("#^!strhelp#i",$msg_text)) { $send = "СПРАВКА ПО СТРОКОВЫМ ФУНКЦИЯМ БОТА\n\nВсе команды набираются без кавычек. Параметры, отделённые [квадратными скобками], не являются обязательными.\n\n--\n !md5 *строка* — сгенерировать md5-хеш строки.\n Например, '!md5 проверка!'\n--\n !base64enc *строка* — закодировать строку в base64.\n Например, '!base64enc проверка!'.\n--\n !base64dec *строка* — раскодировать строку из base64.\n Например, '!base64dec 7/Du4uXw6uAh'. Выведется HEX-представление строки.\n--\n !urlenc *строка* — закодировать строку в формат URL-encoded. Например, '!urlenc проверка!'.\n--\n !urldec *строка* — раскодировать строку из формата URL-encode. Например, '!urldec %EF%F0%EE%E2%E5%F0%EA%E0%21'.\n--\n !makepass *длина*[*параметры*] — 'продвинутый' генератор паролей. Длина пароля должна быть указана от 5 до 128.\n У команды есть три дополнительных параметра. Их следует писать, 'прижав' их к числу. Напримеp, '!makepass 8du'. Список параметров:\n * d — использовать цифры в пароле\n * u — использовать ЗАГЛАВНЫЕ БУКВЫ в пароле\n * s — использовать специальные символы типа @, ', & и т.п.\n Параметры нужно указывать именно в том порядке, в котором они написаны здесь, иначе все они будут проигнорированы.\n--\n !c *строка* — преобразовать строку из неправильной раскладки в правильную (англ. <-> рус.).\n Например: '!c \"njn ,jn yfgbcfy yf ЗРЗ/'\n--\n !t *строка* — преобразует строку на русском языке в транслит. Например, '!t Проверочная строка!'. Пока-что эта команда может транслитерировать только с русского на латинницу."; } else if (preg_match("#^!otherhelp#i",$msg_text)) { $send = "СПРАВКА ПО ДРУГИМ ФУНКЦИЯМ БОТА\n\nВсе команды набираются без кавычек.\n\n--\n !info *icq-номер* — показать подробную техническую информацию о номере, указанном вместо *icq-номер*. Например, '!info 566899'.\n--\n !watch 577388 - добавить номер на 7 дней, чтоб бот следил за его статусом!\n--\n !get 577388 посмотреть 10 последних изменений статуса \n--\n !findcrack *название_программы* — поиск крека для программы (поиск ведётся через сайт cracks.am). Например, '!findcrack mpegable broadcaster'.\n--\n !whois *ip_адрес/домен* — Whois. Позволяет узнать подробную информацию о IP-адресе или домене, указанном вместо *ip_адрес/домен*. Например, '!whois 217.118.66.232' или '!whois ya.ru'. Название домена нужно указывать БЕЗ приставки 'www'!\n--\n !music *название/исполнитель* — поиск музыки по названию или исполнителю. Например: '!music linkin park', '!music one step closer', '!music linkin park one step closer'. Русские запросы автоматически переводятся в транслит.\n--\n !ftp *маска* — ищет файлы на FTP-серверах по маске, указанной вместо *маска*.\n--\n !readdr — справка по переадресатору почты."; } else if (preg_match("#^!stats#i",$msg_text)) { $send = "СТАТИСТИКА ПО БОТУ\n\nВсе времена и даты указаны по Гринвическому времени.\n\nДата запуска бота: ".getRuDate($stats['botStartedAt'])."\nСейчас: ".getRuDate(time()). "\n\nЗа это время боту стукнули: ".declension($stats['5d'],array("пятизнак","пятизнака","пятизнаков")). ", ".declension($stats['6d'],array("шестизнак","шестизнака","шестизнаков")). ", ".declension($stats['7d'],array("семизнак","семизнака","семизнаков")). ", ".declension($stats['8d'],array("восьмизнак","восьмизнака","восьмизнаков")). " и ".declension($stats['9d'],array("девятизнак","девятизнака","девятизнаков")). ". Всего стучали с ".declension(count($stats['uins']),array("номера","номеров","номеров")). ".\n\nБот получил ".declension($stats['mess5d'],array("сообщение","сообщения","сообщений")). " от пятизнаков, ".declension($stats['mess6d'],array("сообщение","сообщения","сообщений")). " от шестизнаков, ".declension($stats['mess7d'],array("сообщение","сообщения","сообщений")). " от семизнаков, ".declension($stats['mess8d'],array("сообщение","сообщения","сообщений")). " от восьмизнаков и ".declension($stats['mess9d'],array("сообщение","сообщения","сообщений")). " от девятизнаков. Всего бот получил ". declension($stats['mess5d']+$stats['mess6d']+$stats['mess7d']+$stats['mess8d']+$stats['mess9d'], array("сообщение","сообщения","сообщений"))."."; print_r($stats['uins']); } else if (preg_match("#^!help#i",$msg_text)) { $send = "ИНСТРУКЦИИ:\n!talk *uin* (где *uin* — icq-номер человека, с которым Вы хотите говорить) — начать сессию разговора с человеком\n!close — закрыть сессию разговора с человеком.\nВНИМАНИЕ!!! Если Вам кто-то стукнул через эту команду и начинает надоедать — напишите боту '!kidala'. Тогда с человеком будет разбираться уже администратор бота.\n\n!stats — статистика по боту!\n\nБот может производить различные операции со строками. Для этого пошлите ему команду '!strhelp' (без кавычек).\nДля справки по другим функциям бота (whois, поиск креков, музыки и т. д.) пошлите боту команду '!otherhelp'.\nНа боте работает переадресатор почты! Чтобы узнать подробности, напишите боту '!readdr'.\n\nНе чаще одного сообщения в две секунды! Не больше 150 сообщений за 10 минут!"; } else if (preg_match("#^!kill#i",$msg_text)) { if (($msg_sender_screenname == "577388") | ($msg_sender_screenname == "117886")) die("bye"); } else { $phr = _get_phrase($msg_text); $send = $phr == "" ? "Помощь выдаётся командой '!help', введённой без кавычек…" : $phr; } /*************************************/ sendMSG($sendto,$send); } } function cleanupSessions() { global $sessions; foreach ($sessions as $from => $data) { if ((time() - $data['lastmsg']) > 300) { $send = "Извините, Вы не посылали сообщения уже 5 минут!\nСессия с номером '{$data['with']}' закрыта."; $sendto = $from; unset($sessions[$from]); sendMSG($sendto,$send); } } } function _get_phrase($phrase) { static $phr; if (!$phr) { $phr = array(); $fh = fopen(QA_DIRECTORY . "all.txt", "rt"); while (!feof($fh)) { if (!$phrs = trim(readLine($fh))) continue; list($phras, $count) = explode(';', $phrs); $key = crc32(strtolower(trim($phras))); $phr[$key] = array($phras, intval($count)); } fclose($fh); } $key = crc32(Transliterate(strtolower(str_replace(array('?', '/', '\\', '"'), '', trim($phrase))))); if (!isset($phr[$key])) return ""; $cnt = str_replace("
", "\n", file_get_contents(QA_DIRECTORY . $phr[$key][0] . "/" . ((int)rand(1, $phr[$key][1])) . ".txt")); //print $cnt; return $cnt; } function cleanupAntifloodArray() { global $antiflood_arr_2; static $time; if (!$time) $time = time(); if ((time() - $time) > 600) return; $time = time(); $antiflood_arr_2 = array(); } function writeStats() { global $stats; //****
++++ static $prev_time; if (!@$prev_time) $prev_time = time(); if ((time() - $prev_time) > 600) return; $prev_time = time(); $fh = fopen("./stats.txt", "wt"); $write = count($stats['uins']) . "
" . ($stats['mess5d']+$stats['mess6d']+$stats['mess7d']+$stats['mess8d']+$stats['mess9d']); fwrite($fh, ""); fwrite($fh, $write); fclose($fh); } function LogIn() { global $serv, $uin, $pass; print "Connecting . . .\n"; $serv = fsockopen("login.icq.com", "5190"); readSRV(); print "Authentication . . .\n"; sndFLAP(1,"\x00\x00\x00\x01\x00\x01\x00".chr(strlen($uin)).$uin."\x00\x02\x00".chr(strlen($pass)).$pass); print "Recieving auth data . . .\n"; if (!($data = readSRV())) { print "Connection failed.\n"; fclose($serv); print "Reconnecting after 1 sec. . .\n"; sleep(1); LogIn(); return; } $tlv = splitTLVS($data['DATA']); print "Server name: {$tlv[5]}. Disconnecting from login.icq.com . . .\n"; sndFLAP(4); fclose($serv); print "Connecting to {$tlv[5]} . . .\n"; $connect = explode(':',$tlv[5]); $serv = fsockopen($connect[0],isset($connect[1]) ? $connect[1] : "5190"); readSRV(); print "Authentication . . .\n"; sndFLAP(1,"\x00\x00\x00\x01\x00\x06".pack("n",strlen($tlv[6])).$tlv[6]); print "Sending CLI_SETUSERINFO . . .\n"; $caps = pack("H*", "0946134D4C7F11D18222444553540000"); $caps .= pack("H*", "0946134E4C7F11D18222444553540000"); sndFLAP(2,"\x00\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x05".pack("n", strlen($caps)).$caps); print "Set status to Online . . .\n"; sndFLAP(2,"\x00\x01\x00\x1e\x00\x00\x00\x00\x00\x00".implode(array( "\x00", "\x06", "\x00", "\x04", "\x10", "\x10", "\x00", "\x00", "\x00", "\x0C", "\x00", "\x25", "\x00", "\x00", "\x00", "\x00", "\x00", "\x00", "\x00", "\x00", "\x00", "\x00", "\x06", "\x00", "\x00", "\x00", "\x00", "\x00", "\x00", "\x00", "\x50", "\x00", "\x00", "\x00", "\x03", "\x35", "\x66", "\x66", "\x66", "\x00", "\x00", "\x00", "\x00", "\x00", "\x00", "\x00", "\x00", "\x00", "\x00" ))); print "Sending CLI_SETICBM packets . . .\n"; sndFLAP(2, pack("H*", "00040002000000000002") . pack("H*", "000100000001FFFF03E703E700000000")); sndFLAP(2, pack("H*", "00040002000000000002") . pack("H*", "00020000000000000000000000000000")); sndFLAP(2, pack("H*", "00040002000000000002") . pack("H*", "000400000001FFFF03E703E700000000")); print "We must to set up watchers . . .\n"; if (is_dir("./1/")) { if ($dh = opendir("./1/")) { $uins = array(); while (($file = readdir($dh)) !== false) { if (($file != ".") & ($file != "..")) { if (preg_match("#^(\d{6,9})\.txt$#i", $file, $match)) { $uin = $match[1]; $fn = "./1/$uin.txt"; $fh = fopen($fn, "rt"); $first_line = readLine($fh); if (!preg_match("#\s+НЕ\s+ведётся#", $first_line)) { preg_match("#^.+\s+(\d+)$#", $first_line, $match); $time = intval($match[1]); if (($time + (3600 * 24 * 7)) < time()) { $second_line = readLine($fh); $text = ""; while (!feof($fh)) $text .= readLine($fh) . "\n"; $first_line = "Слежка НЕ ведётся начиная с " . time(); fclose($fh); $fh = fopen($fn, "wt"); fwrite($fh, $first_line . "\n" . $second_line . "\n" . $text); } else { $uins[] = $uin; } } fclose($fh); } } } global $uin_cnt; $uin_cnt = count($uins); watchUins($uins); closedir($dh); } } print "Sending CLI_READY . . .\n"; sndFLAP(2,"\x00\x01\x00\x02\x00\x00\x00\x00\x00\x00".implode(array( "\x00", "\x01", "\x00", "\x03", "\x01", "\x10", "\x04", "\x7B", "\x00", "\x13", "\x00", "\x02", "\x01", "\x10", "\x04", "\x7B", "\x00", "\x02", "\x00", "\x01", "\x01", "\x01", "\x04", "\x7B", "\x00", "\x03", "\x00", "\x01", "\x01", "\x10", "\x04", "\x7B", "\x00", "\x15", "\x00", "\x01", "\x01", "\x10", "\x04", "\x7B", "\x00", "\x04", "\x00", "\x01", "\x01", "\x10", "\x04", "\x7B", "\x00", "\x06", "\x00", "\x01", "\x01", "\x10", "\x04", "\x7B", "\x00", "\x09", "\x00", "\x01", "\x01", "\x10", "\x04", "\x7B", "\x00", "\x0A", "\x00", "\x01", "\x01", "\x10", "\x04", "\x7B", "\x00", "\x0B", "\x00", "\x01", "\x01", "\x10", "\x04", "\x7B" ))); print "Recieving response . . .\n"; readSRV(); print "Connected.\n"; } LogIn(); $stats = array( 'botStartedAt' => time(), '5d' => 0, '6d' => 0, '7d' => 0, '8d' => 0, '9d' => 0, 'mess5d' => 0, 'mess6d' => 0, 'mess7d' => 0, 'mess8d' => 0, 'mess9d' => 0, 'uins' => array() ); while (1) { sleep(1); if ($data = readSRV()) { if ($data['CHANNEL_ID'] == 3) { fclose($serv); LogIn(); } if ($data['CHANNEL_ID'] == 2) { $data = $data['DATA']; switch (getW($data, 0)) { case 4: recieveMSG($data); break; case 3: switch (getW($data, 2)) { case 0xa: $marker = 10; while ($marker < strlen($data)) { $wuin_len = ord($data{$marker}); $marker++; $wuin = substr($data, $marker, $wuin_len); $marker += $wuin_len; $filename = "./1/$wuin.txt"; if (file_exists($filename)) { $add = GetRuDate(time()) . ": за статусом номера $wuin слежка невозможна по неизвестной причине (возможно, „вечный инвиз”?)\n"; $fh = fopen($filename, "at"); fwrite($fh, $add); fclose($fh); } else { // WTF??? sndFLAP(2, pack("H*", "00030005000000000000") . chr($wuin_len) . $wuin); } } break; case 0xb: $wuin_len = ord($data{10}); $wuin = substr($data, 11, $wuin_len); $filename = "./1/$wuin.txt"; if (file_exists($filename)) { $tlvs_bin = substr($data, $wuin_len + 15); $tlvs_arr = splitTLVS($tlvs_bin); $status = getW($tlvs_arr[6], 2); $status = _returnStatus($status); $add = GetRuDate(time()) . ": $wuin сейчас " . $status . "\n"; $fh = fopen($filename, "at"); fwrite($fh, $add); fclose($fh); } else { // WTF??? sndFLAP(2, pack("H*", "00030005000000000000") . chr($wuin_len) . $wuin); } break; case 0xc: $wuin_len = ord($data{10}); $wuin = substr($data, 11, $wuin_len); $filename = "./1/$wuin.txt"; if (file_exists($filename)) { $add = GetRuDate(time()) . ": $wuin сейчас не в сети\n"; $fh = fopen($filename, "at"); fwrite($fh, $add); fclose($fh); } else { // WTF??? sndFLAP(2, pack("H*", "00030005000000000000") . chr($wuin_len) . $wuin); } break; } break; } } } usleep(100); cleanupSessions(); usleep(100); cleanupAntifloodArray(); usleep(100); writeStats(); } ?>