Показать сообщение отдельно

  #2  
Старый 29.03.2007, 15:41
InferNo23
Участник форума
Регистрация: 05.09.2006
Сообщений: 187
Провел на форуме:
6860213

Репутация: 378
По умолчанию

добавь в код строку
PHP код:
set_time_limit(0); 
PHP код:
<?
set_time_limit
(0);
// === Определение функций =================================
// функция выбирает кто куда вышел или пришел =)
// $resp - HTML-код в котором будет производиться поиск (ответ сервера)
// &$who - кто вошел/вышел (арг. по ссылке)
// &$action - комментарий на действие (арг. по ссылке)
// &$code - код действия (арг. по ссылке)
function ComeLeft($resp, &$who, &$action, &$code){ // определить кто
$code = -1// значение (-1) если ни кто не входил и не выходил
if (strpos($resp"top.pu(")){
$action 'приперся к нам )))';
$code 1// значение (1) - обнаружен вход чатланина
}
if (
strpos($resp"top.du(")){
$action 'Ушол эх ну и ладно !';
$code 2// значение (2) - зфиксирован выход чатланина
}
if (
$code==or $code==2){
preg_match("/\('([^']+)/",$resp,$tmp); // определение ника
$who $tmp[1]; // вынуть ник из массива
}
// конец функции ComeLeft

// функция выбирает кто что кому и куда сказал =)
// $resp - HTML-код в котором будет производиться поиск (ответ сервера)
// &$who - кто сказал (арг. по ссылке)
// &$to - кому сказал (арг. по ссылке)
// &$mes - что сказал (арг. по ссылке)
// &$code - код действия (арг. по ссылке)
function GetSpeak($resp, &$who, &$to, &$mes, &$code){
// кто сказал
$code = -1// значение (-1) если ни кто не говорил
// каму сказал и куда
preg_match_all("/\,'([^',]+)/",$resp,$tmp,PREG_PATTERN_ORDER);
// если сказал в общую комнату
if (strlen($tmp[1][1])==0){
$nm $tmp[1][0];
$pos strpos($nm':');
// если сказал просто так без адресата
if (!$pos) { 
$to '';
$mes $nm;
$code 1// значение (1) - сказано в общую комнату без адресата
}
else { 
// если сказал кому-то конкретно
$to substr($nm,0,$pos);
$mes substr($nm$pos+2strlen($nm));
$code 2// значение (2) - сказано в общую комнату кому то конкретно
}
}
else{ 
// если сказал в приват
$to $tmp[1][0];
$mes $tmp[1][1];
$code 3// значение (3) - сказано в приват
}
if (
$code==or $code==or $code==3){
preg_match("/\ms\('([^']+)/",$resp,$tmp); // определение ника
$who $tmp[1]; // вынуть ник из массива
}
// конец функции GetSpeak

// функция отправки POST- и GET-запросов --------------------------------------------
// $method - метод POST или GET (строковая перем.)
// $link - должна содержать полную ссылку (важно для прокси)
// $header - массив строк полей заголовка
// $rdata - строка запроса(Content) для POST-запроса
// $view - true/false - разрешить/запретить вывод запроса и ответа на страницу (не выводить по умолч.)
// $sresp - true/false - получить/игнорировать ответ сервера (получать по умолч.)
// $proxy - true/false - использовать/неисп. прокси (не использовать по умолч.)
// $phost - хост/ip прокси (локалхост по умолч.)
// $pport - порт прокси (81 по умолч.)
function PostGet($nick,$method,$link,$header,$rdata,$view=f alse,$sresp=true,$proxy=false,$phost="127.0.0.1",$pport=81) {
// перевод в верхний регистр аргумента $method (POST или GET)
$method strtoupper($method); 
// разбивка $link на протокол, хост и скрипт => $array
/* $array[0] => http://moders.ucoz.ru/search.htm?query=Клуб модераторов 
[1] => http:// 
[2] => www.moders.ucoz.ru 
[3] => /search.htm?query=Клуб модераторов */
preg_match("/(http:\\/\\/)?([^\\/\r\n]+)([^\r\n]+)/"$link$array);
// если использовать прокси, то полная ссылка, нет - только скрипт
if ($proxy)
$link $array[0]; // полная ссылка
else
$link $array[3]; // только скрипт
// первая строка запроса вида: 'POST/GET $link HTTP /1.0'
$req $method." ".$link." HTTP/1.0\r\n";
// объединение строк массива $header в одну строку через '\r\n'
$req.= implode("\r\n",$header)."\r\n";
// поле Host
$req.= "Host: ".$array[2]."\r\n";
// если Post-запрос, то вычислить длину запроса(Content) и добавить его,
// в противном случае (Get-запрос) - добавить к заголовку перевод строки '\r\n'
if ($method == "POST") {
$req.= "Content-Length: ".strlen($rdata)."\r\n"// длина Content
$req.= "\r\n".$rdata."\r\n\r\n"// добавить Content
}
else
$req.= "\r\n"// при GET добавить перенос
// если использовать прокси, то применить настроки прокси,
// в противном случае - выделенный из $link хост и 80 порт
if ($proxy){
$h $phost// для прокси
$p $pport;
}
else {
$h $array[2]; // без прокси
$p 80;
}

// создание сокета
$sock fsockopen ($h,$p,$errno,$errstr);
// режим сокета: блокирующий - если получать ответ сервера
// неблокирующий - если игнорировать ответ сервера
socket_set_blocking($sock$sresp);
// отправка запроса и получение ответа
if (!$sock) { // если ошибка
echo "$errstr ($errno)"// вывести ошибку
echo $sock// вывести дискриптор сокета
fclose($sock); // закрыть сокет
exit; // конец
}
else { 
// без ошибок
fputs($sock$req); // отправка запроса
if ($sresp// если получать ответ сервера
while (!feof($sock)) // до конца
$response.= fgets($sock); // читать ответ
else { // без ответа (пятый запрос на IRC)
// --- действия в чате ------
//$enter = file('enter.txt'); // сообщения на вход
//$exit = file('выход.lst'); // и выход
//$hi = file('приветствие.lst'); // приветствие

$list file('file.txt'); // чтение из файла в массив (используемые сообщения)

//sleep(rand(10,20)); // задержка 7 секунд
SendMessage($to/* $hi[rand(0,count($hi)-1)] */ 'Всем привет '$header[2], $array[2]); // приветствие

while (true == true){ // бесконечный цикл
usleep(100000);
$response fgets($sock); // читать ответ
if (strlen($response)>0){
// --- реакция на разговор ------
GetSpeak($response$who$to$mes$Scode); // определит
if ($Scode==or $Scode==3){
if ((
time()-$u)>=7) {
if (
$to==$nick){ // обращение ко мне
$n rand(0,count($list)-1); // выбрать случайную фразу
$ms str_replace(" ","+",$list[$n]); // поменять в сообщении все пробелы на '+'
sleep(rand(7,10)); // задержка 7-10 секунд
if ($Scode==2SendMessage(''$who.': '.$ms$header[2], $array[2]); // в общую комнату
if ($Scode==3SendMessage($who$ms$header[2], $array[2]); // в личку
$u time();
}
}
}
// --- реакция на вход или выход ------
ComeLeft($response$who$action$Lcode); // определить
if ($Lcode==1){ // вход
// if ((time()-$u)>=7) {
sleep(rand(3,10));
SendMessage(''$who.': '.$action/* $enter[rand(0,count($enter)-1)] */$header[2], $array[2]); 
// $u = time(); }
}
if (
$Lcode==2){ // выход
// if ((time()-$u)>=7) {
sleep(rand(3,10));
SendMessage(''$who.': '.$action/* $exit[rand(0,count($exit)-1)] */$header[2], $array[2]); 
// $u = time(); }
}


// --- действия в чате ------
}
fclose($sock); // закрыть сокет
}

// вывод запроса и ответа на страницу
/* if ($view) {
echo "<b><<--- $method-запрос -----------</b><br>";
echo str_replace("\r\n","<br>",$req);
echo "<b>>>--- ответ сервера --------</b><br>";
echo str_replace("\r\n","<br>",$response)."<br>"; 
} */
return $response;
}; 
// конец функции PostGet

// функция возвращает значение поля Location ----------------------------------------
function GetLocation ($response$view=false) {
// поиск поля Location
preg_match("/\bLocation:\s[^\r]*/"$response$temp); 
$location str_replace('Location: ''',$temp[0]); 
// if ($view) echo '<b>-> Location</b><br>'.$location.'<br><br>'; // вывод на страницу
return $location;
}

// функция возвращает найденые поля Set-Cookie одной строкой ------------------------
function GetCookie ($response$view=false) {
// поиск полей Set-Cookie
preg_match_all('/Set-Cookie:\s([^;]+)/',$response,$temp,PREG_PATTERN_ORDER); 
// объединение куков в одну строку, через точку с запятой с пробелом
$i implode("; ",$temp[1]);
// if ($view) echo '<b>-> Cookie</b><br>'.$i.'<br><br>'; // вывод на страницу
return $i
}

// функция возвращает список юзеров ----------------------------------------
// $co - поле 'Cookie: ' с куками MRCU и TICKET
// $host - хост без 'http://'
function ListNick($co$host){
// составление HTTP заголовка запроса
$req "GET /cgi-xml/list HTTP/1.0\r\n";
$header $req."Content-Type: text/html\r\n";
$header.= $co."\r\n";
$header.= "Proxy-Connection: keep-alive\r\n";
$header.= "Host: ".$host."\r\n";
$header.= "Accept: text/html, */*\r\n";
$header.= "Referer: http://chat.mail.ru/cgi-xml/chat\r\n";
$header.= "User-Agent: Mozilla/3.0 (compatible; Indy Library)\r\n\r\n";
// вывод запроса и ответа на страницу
// echo "<b>--- GET-запрос на список юзеров ----------></b><br>";
// echo str_replace("\r\n","<br>",$header)."<br><br>";
// создание сокета
$sockMS fsockopen ($host,80,$errno,$errstr);
socket_set_blocking($sockMStrue); // блокирующий режим
// отправка запроса и получение ответа
if (!$sockMS) { // если ошибка
echo "$errstr ($errno)<br/>\n"
echo 
$sockMS;
fclose($sockMS);
exit;
}
else { 
// без ошибок
fputs($sockMS$header); // отправить запрос
$response ''// читать ответ
while (!feof($sockMS)) // до конца
$response.= fgets($sockMS); // читать ответ
fclose($sockMS);

// поиск чатлан в ответе сервера и запись их в массив(двухмерный)
preg_match_all("/top.au\('([^']+)/",$response,$tmp,PREG_PATTERN_ORDER); // поиск ников
return $tmp[1]; // возвращает массив юзеров
// конец функции ListNick

// функция отправки сообщения (можно процедуру) ------------------------------------
function SendMessage($to$mes$co$host){
// составление контента запроса
$rdata "to=".$to."&message=".$mes."\r\n";
// составление HTTP заголовка запроса
$req "POST /cgi-xml/post HTTP/1.0\r\n";
$header $req."Content-Type: application/x-www-form-urlencoded\r\n";
$header.= "Content-Length: ".strlen($rdata)."\r\n";
$header.= $co."\r\n";
$header.= "Proxy-Connection: keep-alive\r\n";
$header.= "Host: ".$host."\r\n";
$header.= "Accept: text/html, */*\r\n";
$header.= "Referer: http://chat.mail.ru/data-xml/keyboard.html\r\n";
$header.= "User-Agent: Mozilla/3.0 (compatible; Indy Library)\r\n";
$header.= "\r\n".$rdata;
// вывод запроса и ответа на страницу
// echo "<b>--- POST-запрос отправки мессаги ----------></b><br>";
// echo str_replace("\r\n","<br>",$header)."<br><br>";
// создание сокета
$sockMS fsockopen ($host,80,$errno,$errstr);
socket_set_blocking($sockMSfalse); // неблокирующий режим
// отправка запроса без получение ответа
if (!$sockMS) {
echo 
"$errstr ($errno)<br/>\n";
echo 
$sockMS;
fclose($sockMS);
exit;
}
else {
fputs($sockMS$header);
fclose($sockMS);

// конец функции SendMessage

// функция составления ника случайным образом -----------------------------
function GenerateNick() {
// гласные буквы
$Galf[1] = 'а'$Galf[2] = 'е'$Galf[3] = 'ё'$Galf[4] = 'и'$Galf[5] = 'о'$Galf[6] = 'у'
$Galf[7] = 'ы'$Galf[8] = 'э'$Galf[9] = 'ю'$Galf[10] = 'я';
// согласные буквы (не все  )
$Salf[1] = 'б'$Salf[2] = 'в'$Salf[3] = 'г'$Salf[4] = 'д'$Salf[5] = 'ж'$Salf[6] = 'з'$Salf[7] = 'й'
$Salf[8] = 'к'$Salf[9] = 'л'$Salf[10] = 'м'$Salf[11] = 'н'$Salf[12] = 'п'$Salf[13] = 'р'$Salf[14] = 'с'
$Salf[15] = 'т'$Salf[16] = 'ф'$Salf[17] = 'х'$Salf[18] = 'ц'$Salf[19] = 'ч'$Salf[20] = 'ш'$Salf[21] = 'щ'
$Salf[22] = 'ь'
// подборка букв
for ($i 1$i <= rand(114); $i++) {
$registr rand(0,1); // регистр буквы
$glas abs($glas-1); // чередование '1/0'
// выбор буквы
if ($glas)
$bukv $Galf[rand(1,10)];
else
$bukv $Salf[rand(1,22)];
// выбор регистра буквы
if ($registr)
$bukv strtoupper($bukv);
else
$bukv strtolower($bukv);
$name.= $bukv;
}
return 
$name// возвращет сгенерированный ник
// конец функции GenerateNick

// функция авторизации (5 запросов) -------------------------------------------------
function Auth ($login$pas$nick='terminator'$nroom='1:1'$domain='mail.ru') {

// --- Первый POST-запрос -----------------------------------------------------------
// составление контента запроса
$room substr($nroom,2,strlen($nroom)-2);
$rdata "page=http://".$nroom[0].".chat.mail.ru/".
"&FailPage=http://chat.mail.ru/data-xml/erlogin.html".
"&enter=1812".
"&mra=".
"&mra_status=".
"&Login=".$login.
"&Domain=".$domain.
"&Password=".$pas.
"&nick=".$nick.
"&nickcolor=".rand(0,12).
"&textcolor=".rand(0,12).
"&roomleft=".
"&room=".$room;
// составление куков
$cookie "Login=".$login."; ".
"Domain=".$domain."; ".
"nick=".$nick."; ".
"nickcolor=0; ".
"textcolor=0; ".
"room=".$room."; ".
"silent=0; ".
"signore=0";
// составление HTTP заголовка запроса
$header[1]= "Content-Type: application/x-www-form-urlencoded";
$header[2]= "Cookie: ".$cookie;
$header[3]= "Proxy-Connection: keep-alive";
$header[5]= "Accept: text/html, */*";
$header[6]= "Referer: my.chat.mail.ru";
$header[7]= "User-Agent: Mozilla/3.0 (compatible; Indy Library)";
// отправка запроса
$response PostGet($nick"post""http://my.chat.mail.ru/cgi-bin/auth"$header$rdatatrue);

// --- Второй GET-запрос ------------------------------------------------------------
// редактирование полей HTTP заголовка
$header[1]= "Content-Type: text/html";
$cookie2 GetCookie($response,true);
$header[2].= "; ".$cookie2;
// отправка запроса
$response PostGet($nick"get"GetLocation($response,true), $header""true);

// --- Третий GET-запрос ------------------------------------------------------------
// отправка запроса
$response PostGet($nick"get"GetLocation($response,true), $header""true);

// --- Четвертый GET-запрос ---------------------------------------------------------
// добавление новых куков MRCU и TICKET
$cookie3 GetCookie($response,true);
$header[2]= "Cookie: ".$cookie3;
$header[6]= "Referer: chat.mail.ru";
// отправка запроса
$response PostGet($nick"get""http://".$nroom[0].".chat.mail.ru/cgi-xml/chat"$header""true);

// --- Пятый GET-запрос -------------------------------------------------------------
// добавление новых куков MRCU и TICKET
$header[2]= "Cookie: ".$cookie3;
$header[6]= "Referer: ".$nroom[0].".chat.mail.ru";
// отправка запроса
$response PostGet($nick"get""http://".$nroom[0].".chat.mail.ru/cgi-xml/irc"$header""truefalse);
return 
$header[2];
}

// ================================================
// --- Данные для авторизации -------------------------------------------------------
$login 'abcrew';
$pas '*****';
$domain 'mail.ru';
$nick 'КОЛЯ_СЕКСИ';
$nroom '1:1432504'// Эротика"

// авторизация (возвращает куки последнего запроса - могут пригодится)
$hs auth($login$pas/*GenerateNick()*/$nick$nroom$domain);

?>