connect(UIN, PASSWORD)) { logW("Подключен."); while (true != false) { if ($amasq = $icq->get_message()) //прием сообщений { logW("получено сообщение от " . $amasq['from']); if (!$message = trim(iconv('utf-16be', 'cp1251', $amasq['message']))) $message = $amasq['message']; //перекодировка в cp1251 (попытка) $from = $amasq['from']; if ($db = readMas()) logW('прочитана БД'); if (!in_array($from, $adm_uins)) { logW("это не админ"); $connect_to = false; $found_uin_in_db = false; foreach ($db as $n => $record) if ($record['uin'] == $from) { $found_uin_in_db = true; logW("его уин найден в БД"); if ((float)$record['ses'] > 10000) { logW("и сессия тоже"); $icq->send_message($record['ses'], $message) or logW($icq->error); } else { logW("НЕ найдено СЕССИИ в БД"); $connected = false; foreach ($admins as $admin) if ($admin['word'] == $message) { $db[$n]['ses'] = (string )$admin['uin']; writeMas($db); $icq->send_message($from, 'connected') or logW($icq->error); $connected = true; //break; } ; if (!$connected) //если не создана сессия, то $icq->send_message($from, $mainMenu) or logW($icq->error); //отправляем главное меню } ; break; //Найден в БД! выходим из поиска по БД } ; if (!$found_uin_in_db) { log("не найдено уина в БД"); $count_db = count($db); $db[$count_db]['uin'] = $from; $db[$count_db]['ses'] = '0'; writeMas($db); logW("уин записан в БД"); $icq->send_message($from, $mainMenu) or logW($icq->error); } } //end if - уин не принадлежит админу else { //уин принадлежит админу logW('написал админ ' . $from); $sess = array(); foreach ($db as $record) if ((float)$record['ses'] == (float)$from) $sess[] = $record['uin']; //собираем сессии связаные с этим админом if (count($sess) > 0) //есть сессии для этого админа? { logW('есть сесси у ' . $from); if (((int)$message > 0) && ((int)$message <= count($sess))) { foreach ($sess as $nomer => $v) if ((int)$message == (int)$nomer + 1) $icq->send_message($v, file_get_contents(SDIR . $from . '_buf.tpm')) or logW($icq-> error); //отправляем на аську, которую выбрал админ } else { $mes = ''; foreach ($sess as $n => $user_) //выводим запрос для админа с порядковыми номерами и $mes .= ($n + 1) . ' - ' . $user_ . "\n"; // уинами всех, кому можно отправить это сообщение $icq->send_message($from, $mes) or logW($icq->error); file_put_contents(SDIR . $from . '_buf.tpm', $message); //сообщение сохраняем во временный файл } } else //нет сессий { $icq->send_message($from, 'Некому отправлять сообщение! нет сессий для Вас.') or logW($icq->error); } } //end уин принадлежит админу } } } else { print ('Не удалось подключиться'); } function logW($data) { $fh = fopen(LOGFILE, "a+"); fwrite($fh, $data . "\n"); fclose($fh); return true; } function writeMas($mas) { $fh = fopen(BASE, "w"); foreach ($mas as $record) fwrite($fh, $record['uin'] . ';' . $record['ses'] . "\n"); fclose($fh); } function readMas() { $mas = file(BASE); $i = 0; foreach ($mas as $zap) if (!empty($zap)) if ($t = explode(';', $zap)) { $rez[$i]['uin'] = $t[0]; $rez[$i]['ses'] = $t[1]; $i++; } return $rez; } function adminsRead() { $mas = file(ADMINS); $i = 0; foreach ($mas as $zap) if (!empty($zap)) if ($t = explode(';', $zap)) { $rez[$i]['uin'] = $t[0]; $rez[$i]['word'] = $t[1]; $rez[$i]['name'] = $t[2]; $i++; } return $rez; } ?>