• XSS.stack #1 – первый литературный журнал от юзеров форума

p2p

Isis

RAID-массив
Пользователь
Регистрация
09.11.2006
Сообщения
97
Реакции
0
Вообщем есть такой файловый менеждер, а также в нем есть чат !!!!!!
ну вот...вообщем у меня есть скрипт бота!!Но он не совсем хорошо работает!!!!
Вот его код
Код:
#!/usr/bin/php 
<?php
error_reporting(E_ALL);
/*
	cd-bot
	(c) 2005 f3ath
	(c) lamak.ru
*/

// global settings
$verbose = 1; //0=nothing, 1=event, 2=allevents, 3=fulldump
$version = '[0.5-sql]';
$max_message_len = 512;
$codepage = 'w'; // k = koi-8, w = utf8, d = cp688
$timecorrection = 0; //60*60*4;
$helpfile = 'bothelp.txt';
$gagsfile = 'gags.txt';
$offlinemessageslifetime = 60*60*24*7; // время жизни оффлайновых сообщений = неделя
$offlinemessagesmaxlen = 10240; // макс. длина оффлайнового сообщения
$enableiplookup = false; // бот будет пробивать ипы юзеров
$enablemainlog = true;
$enablegagwatch = true;
$enablezerowarning = true; // предупреждать халявщиков
$botadmins = array();

$zero = array(); // $zero['nick'] = time // халявщики
$warnwait = 30; // сколько ждать перед предупреждением



$sql_host = 'localhost';
$sql_login = 'media';
$sql_password = 'password';
$sql_base = 'bot';
$sql_users_table = 'users';
$sql_messages_table = 'messages';
$sql_log_table = 'logs';
$sql_gags_table = 'gags';



// connection settings1
$host = '89.169.142.166';//  10.129.33.62 87.228.4.96 
$port = '411';
$timeout = 5;

// my info
$mynick = 'Test';
$mypassword = '';
$myversion = $version;
$myinterest = "Ботег <$myversion,M:P,H:0/0/1,S:6,L:35>";
$myawaystatus = chr(1); //1=online,  2=away
$myspeed = 'DSL'.$myawaystatus;
$mymail = '';
$mysharesize = '546';


// runtime vars
$hubname = '';
$hub_handle = false;
$oplist = array(); // list of opers (in_array)



function is_bot($nick) {
	$botlist = array();
	if(in_array(strtolower($nick), $botlist)) return true;
	return false;
};
	




function my_time() {
	GLOBAL $timecorrection;
	return time()+$timecorrection;
};

function ccs($str) {
	// unix/win alias of convert_cyr_string
	GLOBAL $codepage;
	return convert_cyr_string ($str,'w',$codepage);
};



function skoka($n, $end1, $end2, $end5) {
	if($n<20 and $n>10) {
  return $n.' '.$end5;
	} else {
  if(ereg("[567890]$", (string)($n))) {
  	return $n.' '.$end5;
  } else {
  	if(ereg("[1]$", (string)($n))) {
    return $n.' '.$end1;
  	} else {
    return $n.' '.$end2;
  	};
  };
	};
};

function rus_date_time($timestamp) {
	$rusmonth=array(1 => 'января','февраля','марта','апреля','мая','июня','июля','августа','сентября','октября','ноября','декабря');
	$rusweek=array(0 => 'воскресенье','понедельник','вторник','среда','четверг','пятница','суббота','воскресенье');

	$mday = (int) strftime('%d', $timestamp);
	$mon_num = (int) strftime('%m', $timestamp);
	$mon = $rusmonth[$mon_num];
	$year = strftime('%Y', $timestamp);
	$wday_num = strftime('%w', $timestamp);
	$wday = $rusweek[$wday_num];
	$hours = strftime('%H', $timestamp);
	$minutes = strftime('%M', $timestamp);

	return "$mday $mon $year ($wday) в $hours:$minutes";
};


function read_hub() {
	GLOBAL $hub_handle, $verbose;
	// reads hub until '|' or eof
	$buff = '';
	$ch = '';
	
	$timeout = 99999;
	$timer1 = time() + $timeout;
	//print($timer1."-".time()."\n");
	while ($ch!='|' AND !feof($hub_handle)) {
  $buff .= $ch;
  $ch = '';
  $ch = fread($hub_handle, 1);
  if(time() > $timer1) go_out("timeout!\n");
	};

	if($verbose > 2) print(date("d/M/y:H:i:s", my_time())." <- [HUB] ".ccs($buff)."\n");
	if (feof($hub_handle)) go_out("error reading socket [$buff]\n");
	
	return $buff;
};


function say_raw($str) {
	GLOBAL $hub_handle, $verbose;
	if($verbose > 2) print(date("d/M/y:H:i:s", my_time())." -> [HUB] ".ccs($str)."\n");
	if(!fwrite($hub_handle, $str.'|')) go_out("error writing socket [$str]\n");
};

function go_out($message) {
	die("$message\n");
};

function hub_special_chars($str) {
	$str = str_replace(chr(0), '/%DCN000%/', $str);
	$str = str_replace(chr(5), '/%DCN005%/', $str);
	$str = str_replace(chr(36), '/%DCN036%/', $str);
	$str = str_replace(chr(96), '/%DCN096%/', $str);
	$str = str_replace(chr(124), '/%DCN124%/', $str);
	$str = str_replace(chr(126), '/%DCN126%/', $str);
	return $str;
};

function say_to_all($msg) {
	GLOBAL $mynick;
	say_raw("<$mynick> $msg");
};

function say_to_nick($nick, $msg) {
	GLOBAL $mynick;
	if($mynick!=$nick) say_raw("<$mynick> $nick, $msg");
};

function say_private_to_nick($nick, $msg) {
	GLOBAL $mynick;
	if($mynick!=$nick) say_raw('$To: '.$nick.' From: '.$mynick.' $<'.$mynick.'> '.$msg);
};



function notice_user($usernick) {
	GLOBAL $verbose;
	//checking if user has unread messages
	$unreadmsgcount = sql_msg_count($usernick);
	if ($unreadmsgcount > 0) {
  say_private_to_nick($usernick, "Привет, для тебя есть ".skoka($unreadmsgcount, 'сообщение', 'сообщения', 'сообщений').". :) Чтобы прочесть, напиши мне 'read' здесь в окне привата.");
  if($verbose > 0) print(date("d/M/y:H:i:s", my_time()).ccs(" [OFLNMSGNOTICE] i've noticed $usernick about new messages\n"));
	};
};

function sql_log_add($nick, $message) {
	GLOBAL $sql_log_table;
	$nick = substr(addslashes($nick), 0, 128);
	$message = substr(addslashes($message), 0, 1024);
	$q = "INSERT INTO `$sql_log_table` (`time`, `nick`, `text`) VALUES ('".my_time()."', '$nick', '$message')";
	$r = mysql_query($q) or go_out('error insert log');
	return true;
};
	

function sql_user_get($nick, $what) {
	GLOBAL $sql_users_table;
	$nick = addslashes($nick);
	$query = "SELECT `$what` FROM `$sql_users_table` WHERE `nick`='$nick'";
	$result = @mysql_query($query) or go_out(mysql_error());
	if($row = @mysql_fetch_row($result)) {
  return $row[0];
	};
	return false;
};

function sql_user_put($nick, $what, $value) {
	GLOBAL $sql_users_table;
	$nick = addslashes($nick);
	$value = addslashes($value);
	
	$query = "SELECT count(*) FROM `$sql_users_table` WHERE `nick`='$nick'";
	$result = @mysql_query($query) or go_out(mysql_error());
	$row = @mysql_fetch_row($result);
	if($row[0]==0){ // if there is no record
  $query = "INSERT INTO `$sql_users_table` (`nick`) VALUES ('$nick')";
  $result = @mysql_query($query) or go_out(mysql_error());
	};
	
	$query = "UPDATE `$sql_users_table` SET `$what`='$value' WHERE `nick`='$nick'" or go_out(mysql_error());
	$result = @mysql_query($query) or go_out(mysql_error());

};


function sql_msg_pop($tonick) {
	// pop oldest message and delete it
	GLOBAL $sql_messages_table, $offlinemessageslifetime;
	$query = "SELECT `id`, `fromnick`, `ip`, `time`, `text` FROM `$sql_messages_table` WHERE (`tonick`='".addslashes($tonick)."') ORDER BY `time` ASC";
	$result = @mysql_query($query) or go_out('select '.mysql_error());

	if($row = @mysql_fetch_row($result)) {
  $msgid = $row[0];
  $fromnick = $row[1];
  $ip = (strlen($row[2]) > 4 ? $row[2] : 'не определен');
  $msgtime = $row[3];
  $msg = $row[4];
  @mysql_query("DELETE FROM `$sql_messages_table` WHERE (`id`='$msgid')") or go_out('delete '.mysql_error());
  return "Сообщение:\n=======\n От кого: $fromnick\n IP: $ip\n Отправлено: ".rus_date_time($msgtime)."\n=======\n$msg";
	};
	return false;
};

function sql_msg_push($fromnick, $tonick, $ip, $msgtime, $msg) {
	GLOBAL $sql_messages_table, $offlinemessageslifetime;
	// delete expired messages
	$query = "DELETE FROM `$sql_messages_table` WHERE `time`<'".(my_time()-$offlinemessageslifetime)."'";
	$result = @mysql_query($query) or go_out(mysql_error());

	$query = "INSERT INTO `$sql_messages_table`(`id`, `fromnick`, `tonick`, `ip`, `time`, `text`) VALUES ".
	"('0', ".
	"'".addslashes($fromnick)."', ".
	"'".addslashes($tonick)."', ".
	"'$ip', ".
	"'".my_time()."', ".
	"'".addslashes($msg)."')";

	$result = @mysql_query($query) or go_out(mysql_error());
	return true;
};


function sql_msg_count($tonick) {
	GLOBAL $sql_messages_table, $offlinemessageslifetime;
	// delete expired messages
	$query = "DELETE FROM `$sql_messages_table` WHERE `time`<'".(my_time()-$offlinemessageslifetime)."'";
	$result = @mysql_query($query) or go_out(mysql_error());

	// retriving count(*)new messages for user
	$query = "SELECT count(*) FROM `$sql_messages_table` WHERE (`tonick`='".addslashes($tonick)."')";
	$result = @mysql_query($query) or go_out(mysql_error());

	if($row = @mysql_fetch_row($result)) return $row[0];

	go_out(sql_error());
};


function seen_nick($usernick, $seennick) {
	GLOBAL $mynick;
	$answer = '';

	if(1 == sql_user_get($seennick, 'online')) {
  if(($usernick == $seennick) or ($mynick == $seennick)) {
  	$answer = "(_(_)";
  } else {
  	$answer = "$seennick сейчас сидит тут";
  };
	} else {
  $seenqtime = sql_user_get($seennick, 'qtime');
  $seenjtime = sql_user_get($seennick, 'jtime');
  if($seenqtime!==false) {
  	$seenip = sql_user_get($seennick, 'ip');
  	if($seenqtime < $seenjtime) {
    $answer = "$seennick ($seenip) был(а) тут ".rus_date_time($seenjtime);
  	} else {
    $answer = "$seennick ($seenip) выходил(а) отсюда ".rus_date_time($seenqtime);
  	};
  } else {
  	$answer = "не припомню, чтоб я видела кого-то с ником $seennick";
  };
	};
	return $answer;
};

//********************************************************************************************************************
function on_ip_received($nick, $ip) {
	GLOBAL $enablegagwatch, $sql_gags_table, $verbose, $mynick;
	// событие: узнали юзерский ип
	
	sql_user_put($nick, 'ip', $ip); // сохраняем его в базе
	
	if($enablegagwatch) {
  // проверяем, нет ли его среди загаганых
  $q = "SELECT MAX(`exp`), `nick` FROM `$sql_gags_table` WHERE `ip`=INET_ATON('$ip') GROUP BY `ip`";
  $r = mysql_query($q) or go_out(mysql_error()." [[$q]]");
  if($row = mysql_fetch_row($r)) {
  	// есть такой ип
  	$t = $row[0] - my_time(); // насколько загагать
  	$infringer = $row[1]; // нарушитель
  	
  	if(($t > 10) and ($mynick != $nick)) {
    // если осталось больше 10 секунд
    say_to_all('!gag '.$nick.' '.$t.'s');
    say_private_to_nick($nick, "Пользователям с этого ip запрещено говорить в общем чате на $t сек. Виновник - $infringer");
    if($verbose > 0) print(date("d/M/y:H:i:s", my_time())." [AUTOGAG-ON-JOIN] $nick ($ip) on $t sec. infringer $infringer \n");
  	};
  };
	};
};


function on_gag_user($nick, $time) {
	GLOBAL $sql_users_table, $sql_gags_table, $mynick, $oplist, $verbose;
	// оператор запросил гагнуть юзера. время указано в минутах
	
	$nick = addslashes($nick);
	settype($time, 'int');
	$sec = $time * 60;
	$ip = sql_user_get($nick, 'ip');
	if(strlen($ip) > 4) {
  //ищем лузеров с этим ипом и гагаем по очереди
  $q = "SELECT `nick` FROM `$sql_users_table` WHERE (`ip`='$ip' AND `online`='1')";
  $r = mysql_query($q) or go_out(mysql_error()."[[$q]]");
  $list = ''; // список жертв вернем юзеру
  while($row = mysql_fetch_row($r)) {
  	$loser = $row[0];
  	if(!in_array($loser, $oplist)) {
    
    say_to_all('!gag '.$loser.' '.$sec.'s');
    $list .= " $loser";
    say_private_to_nick($loser, "Пользователям с этого ip запрещено говорить в общем чате на $sec сек. Виновник - $nick");
    //say_to_all("пользователь $loser лишен возможности говорить в общем чате на $sec сек. Виновник - $nick");
    if($verbose > 0) print(date("d/M/y:H:i:s", my_time())." [AUTOGAG-ON-REQUEST] $loser ($ip) on $sec sec. infringer $nick \n");
  	};
  };
  // заносим наши труды в базу
  $q = "INSERT INTO `$sql_gags_table` (`ip`, `exp`, `nick`) VALUES (INET_ATON('$ip'), '".($sec+my_time())."', '$nick')";
  $r = mysql_query($q) or go_out(mysql_error()."[[$q]]");
  
  // удалим просроченные гаги
  $q = "DELETE FROM `$sql_gags_table` WHERE (`exp` < '".my_time()."')";
  $r = mysql_query($q) or go_out(mysql_error()."[[$q]]");
  
  
  return "$nick ($ip) загаганы: $list on $sec sec.";
  
	} else {
  
  return "ip not found: $nick";
	};
};

function zerowarn() {
	GLOBAL $zero, $verbose, $oplist;
	
	foreach($zero as $nick => $time) {
  if((my_time() > $time) and !in_array($nick, $oplist)) {
  	// выждали положеный срок
  	say_private_to_nick($nick, 'Здравствуйте! Спасибо за присоединение к сети! Здесь принято не только качать файлы, но и отдавать их взамен. Чтобы выложить что-то для других, необходимо выбрать в меню файл - настройки - расшаривание, далее галочкой отметить папки со всем, что может быть интересно пользователям -- музыкой, фильмами, играми, дистрибутивами программ и прочее (кроме личной информации). Сделайте это прямо сейчас. Предупреждаю, что операторы периодически блокируют доступ "эгоистам", которые качают, ничего не отдавая взамен.');
  	unset($zero[$nick]);
  	if($verbose > 0) print(date("d/M/y:H:i:s", my_time()).ccs(" [ZEROWARN] $nick")."\n");
  };
	};
  	
};







print(date("d/M/y:H:i:s", my_time())." starting...\n");
print(date("d/M/y:H:i:s", my_time())." verbose=$verbose\n");

print(date("d/M/y:H:i:s", my_time())." connecting MySQL server...\n");
@mysql_pconnect($sql_host, $sql_login, $sql_password) or go_out(mysql_error());
print(date("d/M/y:H:i:s", my_time())." selecting database...\n");
mysql_select_db($sql_base) or go_out('error selecting db');
mysql_query('set names utf8');
mysql_query('set character set utf8');
mysql_query ("set character_set_client='utf8'"); 
mysql_query ("set character_set_results='utf8'"); 
mysql_query ("set collation_connection='utf8_general_ci'");


print(date("d/M/y:H:i:s", my_time())." Reading gags...\n");
$gags = file($gagsfile);


print(date("d/M/y:H:i:s", my_time())." Connecting $host:$port with t/o $timeout sec...\n");
$hub_handle = fsockopen($host, $port, $errno, $errstr, $timeout);

if (!$hub_handle) go_out(date("d/M/y:H:i:s", my_time())."Error! $errstr ($errno)");

socket_set_timeout($hub_handle, 2);
socket_set_blocking($hub_handle, FALSE);
	
print(date("d/M/y:H:i:s", my_time())." Connected! Waiting for Lock...\n");
$s = read_hub();
if (!eregi('^\$Lock ([^ ]+) Pk=([^ ]+)', $s, $args)) go_out('wrong responce received');

print(date("d/M/y:H:i:s", my_time())." Lock received. Starting handshake...\n");
$lock = $args[1];
   
// calculating key
   
$key = $lock;
$lock_len = strlen($lock);
  
for ($i = 1; $i < $lock_len; $i++) {
	$key{$i} = chr(ord($lock{$i}) ^ ord($lock{$i-1}));
};

$key{0} = chr(ord($lock{0}) ^ ord($lock{$lock_len -1 }) ^ ord($lock{$lock_len-2}) ^ 5);
   

for ($i = 0; $i < $lock_len; $i++) {
	$v1 = chr((ord($key{$i}) << 4));
	$v2 = chr((ord($key{$i}) >> 4));
	$key{$i} = chr( ord($v1) | ord($v2) );
 };
  
$key = hub_special_chars($key);
  
print(date("d/M/y:H:i:s", my_time())." Sending key...\n");
say_raw('$Key '.$key);
print(date("d/M/y:H:i:s", my_time())." Validating nickname...\n");
say_raw('$ValidateNick '.$mynick);

$s = read_hub();
print(date("d/M/y:H:i:s", my_time())." [HUB] $s\n");
if (eregi('\$ValidateDenide', $s)) go_out(date("d/M/y:H:i:s", my_time())."Nick $nick is not valid! Exiting.\n");

print(date("d/M/y:H:i:s", my_time())." Logging in...\n");

while (!eregi('\$Hello ([^ ]+)',$s,$hello_regs)) {
	if (eregi('\$GetPass', $s)) {
  print(date("d/M/y:H:i:s", my_time())." Password required.  Sending...\n");
  say_raw('$MyPass '.$mypassword); 
	};

	if (eregi('\$BadPass', $s)) go_out(date("d/M/y:H:i:s", my_time())."Wrong password! Exiting.");

	if (eregi('\$LogedIn ([^ ]+)',$s,$hello_regs)) print("Logged in as op!\n");

	if (eregi('\$HubName ([^ ]+)',$s,$hubname_regs)) {
  $hubname = $hubname_regs[1];
  print(date("d/M/y:H:i:s", my_time())." Hub name is '$hubname'\n");
	};
	$s = read_hub(); 
	print(date("d/M/y:H:i:s", my_time())." [HUB] $s\n");


};

$mynick = $hello_regs[1];
print(date("d/M/y:H:i:s", my_time())."Hello message received. My nick is '".ccs($mynick)."'\n");

print(date("d/M/y:H:i:s", my_time())."Sending my version...\n");
say_raw('$Version '.$myversion);

print(date("d/M/y:H:i:s", my_time())."Sending my info...\n");
say_raw('$MyINFO $ALL '.$mynick.' '.$myinterest.'$ $'.$myspeed.'$'.$mymail.'$'.$mysharesize.'$');

say_raw('$GetNickList');

print(date("d/M/y:H:i:s", my_time())."Started OK! :)\n");

// set online = 0

$query = "UPDATE `$sql_users_table` SET `online`='0' WHERE 1" or go_out(mysql_error());
$result = @mysql_query($query) or go_out(mysql_error());


$stop=false;
while(!$stop) {
	$s = read_hub();
	
	// проверяем халявщиков
	if($enablezerowarning) zerowarn();
	
	
	
  
	
	

	if(eregi('^<([^ ]+)> (.+)',$s, $msgargs)) {
  //user saying something
  $usernick = trim($msgargs[1]);
  $usermessage = trim($msgargs[2]);
  
  if($enablemainlog) sql_log_add($usernick, $usermessage);

  if(($usernick == '#Hub') and (eregi('User: ([^ ]+)IP: ([^ ]+)', $usermessage, $regs))) {
  	if($verbose > 1) print(date("d/M/y:H:i:s", my_time())." [HUBMSG] $usermessage\n");
  	$thisusernick = $regs[1];
  	$thisuserip = $regs[2];
  	on_ip_received($thisusernick, $thisuserip);
  };
  
  
  
  
  
  //#################### FLOOOOOOOOOOODERSSSSSSSSS #############################
  
  if(preg_match("/(.+)\\1{20,}/", $usermessage) and !in_array($usernick,$oplist) ) { // кнопка западает
  	
  	print(on_gag_user($usernick, '20'));
  	
  	$gag_message = '/me ' . trim(str_replace('[nick]', $usernick, $gags[array_rand($gags)]));
  	say_to_all($gag_message);
  	say_private_to_nick($usernick, "Вам запрещено говорить в общем чате на 20 минут. В следующий раз не надо так долго держать нажатой кнопку. Отвечать на это сообщение не надо. Я бот.");
  };
  
  
  
  
	};

	if(eregi('^\$To: '.$mynick.' From: ([^ ]+) \$<([^ ]+)> (.+)',$s, $msgargs)) {
	//private message from user
  $recognized = false;
  $usernick = trim($msgargs[1]);
  $fakeusernick = trim($msgargs[2]);
  $usermessage = trim($msgargs[3]);
  
  if(($usermessage==='регнула') and ($usernick ==='#OpChat') and ($fakeusernick ==='Zladey')) {
  	say_private_to_nick($usernick, "регнула");
  };
  	


  if(in_array($usernick,$oplist) and (eregi('^/say (.+)', $usermessage, $args))) {
  	say_to_all($args[1]);
  	$recognized = true;
  };

  if(in_array($usernick,$oplist) and (eregi('^/gag ([^ ]+) ([^ ]+)', $usermessage, $args))) {
  	$result = on_gag_user($args[1], $args[2]);
  	say_private_to_nick($usernick, $result);

  	$gag_message = '/me ' . trim(str_replace('[nick]', $args[1], $gags[array_rand($gags)]));
  	say_to_all($gag_message);

  	
  	$recognized = true;
  };



  if(in_array($usernick,$oplist) and (eregi('^/psay ([^ ]+) (.+)', $usermessage, $args))) {
  	//private only if nick exists
  	if(isset($nicklist[$args[1]])) {
    say_private_to_nick($args[1], $args[2]);
    say_private_to_nick($usernick, "сказала :)");
  	} else {
    say_private_to_nick($usernick, "не вижу ника ".$args[1]." :(");
  	};
  	$recognized = true;
  };

///////////////////////////////////////// PRIVATE MESSAGE ///////////////////////////////////////////////////////

  if(!is_bot($usernick)) {

  	if(eregi('^seen ([^ ]+)',$usermessage, $seenargs)) { //############## SEEN ##################################
    //////////////// SEEN /////////////////
    $recognized = true;
    $seennick = $seenargs[1];
    if($verbose > 0) print(date("d/M/y:H:i:s", my_time()).ccs(" [SEENMSG] $usernick is looking for $seennick\n"));
    say_private_to_nick($usernick, seen_nick($usernick, $seennick));
  	}; 


  	if(eregi('^photo$',$usermessage)) {  //###################################### PHOTO #################################
    $recognized = true;
    say_private_to_nick($usernick, "У меня нет фото. Потому что я бот. У ботов фоток не бывает, разве тебе не говорили? Кстати, зайди на сайт Физеры. Там правда тоже нет моих фоток, зато есть много других полезных вещей. http://10.132.64.5/");
    if($verbose > 0) print(date("d/M/y:H:i:s", my_time()).ccs(" [VERMSG] $usernick asked for my naked photos\n"));
  	};

  	
  	if(eregi('^help$',$usermessage)) {
    $recognized = true;
    $lines = file($helpfile);
    $helpmsg = 'Я бот!!!!Хуле надо??';
    foreach ($lines as $line_num => $line) $helpmsg .= $line;
    say_private_to_nick($usernick, $helpmsg);
    if($verbose > 0) print(date("d/M/y:H:i:s", my_time()).ccs(" [HLPMSG] $usernick asked for help\n"));
  	};

  	

  	
  	if(eregi('^msg ([^ ]+) (.+)',$usermessage, $omsgargs)) { //################################ MSG ###########################
    // leave offline message
    $recognized = true;
    $ofromnick = $usernick;
    $fromnick = $usernick;
    $tonick = $omsgargs[1];
    $omsg = $omsgargs[2];
    
    $userip = sql_user_get($usernick, 'ip');
    $isok = true;

    if (strlen($omsg) > $offlinemessagesmaxlen) {
    	say_private_to_nick($usernick, "Извини, это слишком длинное сообщение. blush Максимальная длина $offlinemessagesmaxlen символов");
    	$isok = false;
    };

    if($tonick == $usernick) {
    	say_private_to_nick($usernick, "Приятно поговорить с умным человеком, да $usernick"."? :)");
    	$isok = false;
    };

    if($tonick == $mynick) {
    	say_private_to_nick($usernick, "Ой, это мне? Нет, правда мне?? Спасибо, $usernick, мне так редко пишут письма... blush");
    	$isok = false;
    };

    if(is_bot($tonick)) {
    	say_private_to_nick($usernick, "$tonick это бот. Я его боюсь. Я никогда не видела настоящих ботов :(");
    	$isok = false;
    };

    if($isok) {

    	say_private_to_nick($usernick, "Новое сообщение успешно добавлено. Если адресат в течение ближайших 7 суток зайдет на хаб, он получит уведомление и сможет прочесть твое сообщение. Если он(а) тут не появится или не захочет его читать, оно будет удалено.");
    	if(isset($nicklist[$tonick])) say_private_to_nick($tonick, "$fromnick оставил(а) для тебя сообщение. Чтобы прочесть его напиши мне 'read'. Если ты не сделаешь этого в течение ближайших 7 суток, оно будет удалено.");
    	sql_msg_push($fromnick, $tonick, $userip, my_time(), $omsg);
    };
    
    if($verbose > 0) print(date("d/M/y:H:i:s", my_time()).ccs(" [OFLNMSG] $usernick leaved message for $tonick\n"));
  	};



  	
  	
  	
  	if(eregi('^read$',$usermessage)) { //############################################ READ #################################
    $recognized = true;
    $msgcount = sql_msg_count($usernick);
    if ($msgcount > 0) {
    	say_private_to_nick($usernick, sql_msg_pop($usernick));
    	if((--$msgcount) > 0) {
      say_private_to_nick($usernick, "Осталось еще ".skoka($msgcount, 'непрочитанное сообщение', 'непрочитанных сообщения', 'непрочитанных сообщений').".");
    	} else {
      say_private_to_nick($usernick, "Больше сообщений нет");
    	};
    } else {
    	say_private_to_nick($usernick, "Сообщений нет. Извини, $usernick. blush");
    };
    if($verbose > 0) print(date("d/M/y:H:i:s", my_time()).ccs(" [READMSG] $usernick asked for new messages\n"));
  	};

  	if(!$recognized) say_private_to_nick($usernick, "Непонятная команда :( попробуй написать мне 'help'");

  }; 

  if($verbose > 0) print(date("d/M/y:H:i:s", my_time()).ccs(" [PRIVMSG] $usernick (as $fakeusernick):  $usermessage\n"));
	};


	if(eregi('^\$OpList (.+)', $s,$olargs)) {
  // OpList received
  $opers = explode('$$', $olargs[1]);
  $oplist = array();
  foreach ($opers as $opnick) if($opnick != '') {
  	$oplist[] = $opnick;
  	//if($enableiplookup) say_to_all("!getip $opnick");
  	//say_raw('$GetINFO '.$opnick. ' '.$mynick);
  	
  	//sql_user_put($opnick, 'jtime', my_time());
  	
  };
  if($verbose > 0) print(date("d/M/y:H:i:s", my_time())." [OPLIST] ".count($oplist)." ops: $olargs[1]\n");
	};

	if(eregi('^\$NickList (.+)', $s,$nlargs)) {
  // NickList received
  $nicks = explode('$$', $nlargs[1]);
  unset($nicklist);
  foreach ($nicks as $nick) if($nick != '') {
  	$nicklist[$nick] = 0;
//  if($enableiplookup) say_to_all("!getip $nick");
//  	say_raw('$GetINFO '.$nick. ' '.$mynick);

  	//notice_user($nick);
  	// update userlist, set online = 1
  	sql_user_put($nick, 'jtime', my_time());
  	sql_user_put($nick, 'online', '1');
  	
  };// FOREACH
  if($verbose > 0) print(date("d/M/y:H:i:s", my_time())." [NICKLIST] ".count($nicklist)." users now\n");
	};// nicklist


	if(eregi('^\$Hello ([^ ]+)', $s,$args)) {
  // user logged in
  $usernick = $args[1];
  sql_user_put($usernick, 'online', '1');
  //if($enableiplookup) say_to_all('!getip '.$usernick);
	//	say_raw('$GetINFO '.$usernick. ' '.$mynick);

  sql_user_put($usernick, 'jtime', my_time());
  if($verbose > 1) print(date("d/M/y:H:i:s", my_time())." [HELLO] $usernick\n");
  notice_user($usernick);
  
	};

	if(eregi('^\$MyINFO \$ALL ([^ ]+) ([^\$]+)\$ \$([^\$]+)\$([^\$]*)\$([^\$]+)\$', $s,$args)) {
  $info_nick = $args[1];
  $info_descr = $args[2];
  $info_speed = $args[3];
  $info_mail = $args[4];
  $info_sharesize = $args[5];
  
  sql_user_put($info_nick, 'online', '1');
  
  if($verbose > 1) print(date("d/M/y:H:i:s", my_time())." [MYINFO] $info_nick int='$info_interests' descr='$info_descr' spd='$info_speed' mail='$info_mail' ss='$info_sharesize'\n");

  sql_user_put($info_nick, 'shared', $info_sharesize);

  if($enablezerowarning) {
  	
  	if($info_sharesize > 0) {
    unset($zero[$info_nick]); // решил расшарить
  	} else {
    if(!in_array($info_nick, $oplist)) {
    	$zero[$info_nick] = (my_time()+$warnwait);
    	if($verbose > 0) print(date("d/M/y:H:i:s", my_time()).ccs(" [ZEROWARN-ADD] $info_nick")."\n");
    };
  	};
  }; 
	};



	if(eregi('^\$Quit ([^ ]+)', $s,$args)) {
  // user logged out
  $quitnick = $args[1];
  sql_user_put($quitnick, 'qtime', my_time());
  sql_user_put($quitnick, 'online', '0');
  if($verbose > 1) print(date("d/M/y:H:i:s", my_time())." [QUIT] ".ccs($quitnick)."\n");
	};// if

}; //while(!$stop)

go_out('bye!');

Этот скрипт был сделан админом этого хаба!!Т.е. бот настроен от антифлуда и т.п.!!!!
Бот конектиться, но держиться на хабе всего-лишь 5-10 секунд и выходит :)

Вот кто сможет его сделать, может убрать или добавить какие-то функции , то вот:)
Помогите :) ыыы
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх