Пишем ICQ бота на РНР и компилируем в ЕХЕ !

Мой любимый!

Всем привет!
Сначала идём сюда: http://www.bambalam.se/bamcompile/ и качаем эту прогу. Это — компилятор РНР в ЕХЕ.
1) Копируем её в папку C:\\compile\\ (не обязательно сюда, но так удобнее)
2) Создаём в этой папке файл compile.bat и пишем в нём:
bamcompile bot.bcp
Потом создаём файл bot.bcp и пишем в нём:
mainfile main.php
embed main.php
embed clas.php
icon icq.ico
extension php_sockets.dll
windowed
compress
3) Кидаем любой значёк с названием icq.ico в эту папку
4) Находим в примерах в архиве с прогой файлик php_sockets.dll и копируем его тоже в эту папку
Подготовка эта вся. Теперь сам скрипт (автор не — я ). Создаём сначала файл config.ini — в нём конфигурация бота. Пишем в нём:

PHP код:
[hide][/hide]

Потом — func.ini — дополнительные функции бота. Как стандартные — предлагаю !ping и !traceroute. Прошу обратить внимание, что в этом файле писать не надо. Он не инклудом вставляется.
Функции:

PHP код:
[hide]/*—————————————-*\\
Дополнительные функции или
произвольный РНР код (В ЦИКЛЕ!)
\\*—————————————-*/

/*————————————————————-*\\
ПЕРЕМЕННЫЕ И ФУНКЦИИ:
$uin — номер, с которого пришло сообщение
$text — текст сообщения
$cmd — массив со всеми частями сообщения,
разделёнными пробелом. Пример:
Сообщение \»Привет! Как дела?\»
будет выглядеть так:
array(\»Привет!\»,\»Как\»,\»дела?\»)
Полезно для добавления команд боту
+ все переменные файла config.ini
$ad — массив с номерами админов
функция admin(uin) — имеет значение true, если uin равен
одному из номеров в списке администраторов.
Функция $icq->message_send(uin, message) отправляет сообщение.

ДОБАВЛЯТЬ НЕ НАДО!!!
\\*————————————————————-*/

//ping
if (strtolower($cmd[0]) == \»!ping\» && isset($cmd[1])) {
$ping=shell_exec(\»ping \».$cmd[1]);
$ping=convert_cyr_string ($ping, \»a\», \»w\»);
$icq->message_send($uin, $ping);
}

//traceroute
if (strtolower($cmd[0]) == \»!traceroute\» && isset($cmd[1])) {
$tracert=shell_exec(\»tracert \».$cmd[1]);
$tracert=convert_cyr_string ($tracert, \»a\», \»w\»);
$icq->message_send($uin, $tracert);
}[/hide]

И создаём файл с фразами, вида запрос=ответ на каждой строке (words.dat). В данном случае я предлагаю англо-русский словарик. Качаем здесь:[hide] [attachment=10][/hide] [436.06 Kb]
Это готово. Теперь пишем сам скрипт бота…

PHP код:
[hide]connect()) { log_bot(1); $error=1; }
$icq->setstatus($icq_std_status, \»NONE\»);
if (!$icq->login()) { log_bot(2); if ($error != 1) { exit(); }} else { log_bot(0); } //Подключаемся и логинимся или выкидываем в лог ошибку
while ($icq->socket){
$icq->listen();
if ($icq->ismessage()){ //Слюшаем сообщения…
$uin = $icq->inLastVar[\»uin\»];
$text = $icq->inLastVar[\»text\»];
$text = trim($text);
$cmd = explode(\» \»,$text);
if (strtolower($text) == \»!exit\» && admin($uin)) { log_bot(4); exit(); } //Вырубаем бота, если от админа сообщение !exit
if (strtolower($text) == \»!stat\» && admin($uin)) { //просмотр статистики (админ)
$stat=implode(\»\»,file(\»log.txt\»));
$icq->message_send($uin,$stat);
}
if (strtolower($text) == \»!unlog\» && admin($uin)) { //удаление лога (админ)
unlink(\»log.txt\»);
$icq->message_send($uin,\»OK\»);
}
if (strtolower($text) == \»!halt\» && admin($uin)) { //Вырубить комп (админ)
log_bot(4);
log_bot(7);
$icq->message_send($uin,\»OK\»);
shell_exec(\»shutdown -s -t 1 -f\»);
exit();
}
if (strtolower($text) == \»!reboot\» && admin($uin)) { //Перезагрузить комп (админ)
log_bot(4);
log_bot(8);
$icq->message_send($uin,\»OK\»);
shell_exec(\»shutdown -r -t 1 -f\»);
exit();
}
if (strtolower($cmd[0]) == \»!admin\» && isset($cmd[1])) { //Сообщение всем админам бота (общее)
unset($cmd[0]);
$mes=join(\» \»,$cmd);
$mess=\»— Пришло с номера \».$uin.\»:\\r\\n——-\\r\\n\».$mes.\»\\r\\n——-\\r\\n\».$botname;
for ($k=0;$kmessage_send($ad[$k],$mess);
}
}
if (strtolower($cmd[0]) == \»!exec\» && isset($cmd[1]) && admin($uin)) { //Выполнение команд на компе (админ)
unset($cmd[0]);
$com=join(\» \»,$cmd);
$exec=shell_exec($com);
$exec=convert_cyr_string ($exec, \»a\», \»w\»);
$icq->message_send($uin,$exec);
}
if (strtolower($text) == \»!help\») { //небольшой хелп
$help=\»Помощь по \».$botname.\».\\r\\n\\r\\nСтандартные команды:\\r\\n!help — вывод этой справки\\r\\n!admin [сообщение] — сообщение админам бота\\r\\n!exit — выключить бота (АДМИН)\\r\\n!exec [команда] — выполнить команду на сервере (АДМИН)\\r\\n!halt — выключить сервер (АДМИН)\\r\\n!reboot — перезагрузить сервер (АДМИН)\\r\\n!stat — просмотр лога бота (АДМИН)\\r\\n!unlog — удалить лог бота (АДМИН)\\r\\n+ дополнительные команды\\r\\n+ англо-русский переводчик\»;
$icq->message_send($uin,$help);
}
$eval=implode(\»\»,file(\»func.ini\»)); //подключаем файл с доп. функциями
eval ($eval);
for ($i=0;$imessage_send($uin,$reply);
}}}}
log_bot(5); //Связь прервана. Реконнект?
sleep(10);
if ($reconnect == \»1\») { log_bot(6); }
}
?>[/hide]

Сразу скажу — чтоб узнать команды бота можно ему отослать !help.
Дальше берём и ложим рядом закриптованную библиотеку c99phpicq ! ]Скачать c99phpicq. После того как скачаите переминуйте c99phpicq.php в clas.php
Всё. Готово. Запускаем compile.bat и ждём, пока закомпилируется. После всего этого нам нужны рядом только main.exe, func.ini, words.dat и config.ini. Остольное можно убрать. Запускаем main.exe и радуемся. Бот работает (если всё ок со связью и пароль правильный). Окон он не будет выдавать — работает тихо. Можно в настройках задать только один номер админа.