ICQ бот на PHP? Легко!
13.04.2008
Привет. Вот всегда была интересна мне тема создания ICQ-ботов на PHP, и сегодня решил рассмотреть ее подробнее и поделиться с вами найденной информацией. Итак, задача: написать ICQ-бот на PHP. Что б реализовать запланированное, нам не нужно изучать протокол ICQ, а достаточно просто воспользоваться готовым РНР-классом для работы с протоколом аськи. Когда класс WebIcqLite.class.php скачан, можно приступать к первым попыткам его использовать.
Вот что дают разработчики в качестве примера использования класса:
<?php
include('WebIcqLite.class.php');
define('UIN', 111111111);
define('PASSWORD', 'password');
$icq = new WebIcqLite();
if($icq->connect(UIN, PASSWORD))
{
if(!$icq->send_message('123456789', 'Hello from php!!!'))
{
echo $icq->error;
}
else
{
echo 'Message sent';
}
$icq->disconnect();
}
else
{
echo $icq->error;
}
?>
Код довольно простой. Сначала мы определяем UIN, под которым будет работать наш Бот, а потом отправляем методом send_message сообщение на указанный номер.
Какие я заметил проблемы:
1. Версия PHP должна быть не ниже 5.2.0
2. Socket Support должен быть включен (из-за этого не смог запустить скрипт на локалхосте)
3. Если версия РНР больше 5.2.0 и Сокеты поддерживаются, а скрипт не работает, попробуйте изменить в WebIcqLite.class.php на 391 строке порт на 80, у меня заработало именно с 80 портом.
4. В ICQ6 проблема с кодировками
Если скрипт так и не заработал - почитайте форум на сайте разработчиков этого скрипта.
А те, кто все-таки заставил скрипт работать, могут наслаждаться работой Бота, хотя сейчас это просто скрипт, который отправляет на один и тот же номер аси сообщение. Предлагаю сделать его более интерактивным. Добавим нашему боту возможность реагировать на отправленные ему сообщения:
<?php
include('WebIcqLite.class.php');
define('UIN', 1111111);
define('PASSWORD', '222222');
$icq = new WebIcqLite();
if(!$icq->connect(UIN, PASSWORD))
{
echo $icq->error;
exit();
}
while($icq->is_connected())
{
$msg = $icq->read_message();
if($msg)
{
if($msg['message'] == "#code")
{
$icq->send_message($msg['from'], "It's command!");
}
else
{
$icq->send_message($msg['from'], strrev($msg['message']));
}
}
flush();
sleep(1);
}
?>
Вот и все, пока наш бот в сети, мы ловим сообщения методом read_message, а дальше для примера я показал 2 варианта: если нам прислали “#code”, то отправляем “It’s command!” (пример просто комманды, которую можно реализовать), а если это простой текст - то применяем к нему функцию strrev (просто для шутки) и возвращаем отправителю.
Пример с командой я показал не просто так, потому что для бота можно реализовать очень много полезных функций. Где-то встречал бота, который управлял БД MySQL посредством определенных сообщений. Кроме того, на многих мобильных телефонах можно сейчас установить ICQ и получать готовую обработанную Ботом информацию, а не лазить по страницам и искать ее.
Кстати интересный факт заметил. На форуме разработчиков скрипта, большинство пользователей применяют его для создания Ботов, которые будут скидывать анекдоты, пытаться общаться с пользователями, у меня сразу возникли почему-то другие взгляды на применение данного Бота. Например ICQ бот на PHP может стать гибким инструментом настройки и мониторинга сервера. Ладно, это уже дело каждого, как применять данный инструмент. Потому, удачи с экспериментами!
15.04.2008 в 19:25
Да действительно полезная статейка спасибо.Буду пробовать!
15.04.2008 в 19:46
Спасибо! Надеюсь, информация freeware?))
16.04.2008 в 02:58
много букф спасибо было интересно)
17.04.2008 в 00:30
Как практическое решение врятли подойдет, но чисто из интереса можно. Есть же куча виндовых ботов уже…
17.04.2008 в 17:59
Чисто из интереса интересная вещь
Для реальности просто функций желательно бы побольше, но хотя бот на РНР это уже что-то.
За наводку спасибо, посмотрим.
18.04.2008 в 21:51
Думаю этот скрипт будет использован многими не в благих целях..
28.04.2008 в 20:41
это ж его на крон нужно вешать?
28.04.2008 в 23:51
Можно на крон, иначе он будет работать только на протяжении max_execution_time, которое указано в php.ini. Хотя на постоянную работу скрипт можно запустить используя SSH.
18.05.2008 в 05:25
set_time_limit(0) поможет
Можно попробовать и так (в зависимости о того, как был собран PHP):
system(’/path/to/php /path/to/script.php &’).
А вообще WebIcqLite довольно глючное поделие (извиняюсь за жаргон). Очень быстрым и простым решением оказалось поставить Jabber-сервер и настроить соответствующие транспорты (PyICQt, PyMSNt, PyYIMt, PyAIMt), и далее по протоколу XMPP можно было слать сообщения в любую сеть, для которой настроен шлюз. Просто, быстро и удобно
24.07.2008 в 21:03
А по мне лучше BASICQ юзать, если надо тупо чтото ответить на какой-то строгий запрос. А если чтото помощьнее, то это не пойдет…