Привет. Вот всегда была интересна мне тема создания 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 может стать гибким инструментом настройки и мониторинга сервера. Ладно, это уже дело каждого, как применять данный инструмент. Потому, удачи с экспериментами!

Комментарии (10) на запись “ICQ бот на PHP? Легко!”

  1. Softer пишет:

    Да действительно полезная статейка спасибо.Буду пробовать!

  2. Артур пишет:

    Спасибо! Надеюсь, информация freeware?))

  3. Anton пишет:

    много букф спасибо было интересно)

  4. Метросексуал пишет:

    Как практическое решение врятли подойдет, но чисто из интереса можно. Есть же куча виндовых ботов уже…

  5. Бизнес чел пишет:

    Чисто из интереса интересная вещь :)

    Для реальности просто функций желательно бы побольше, но хотя бот на РНР это уже что-то.

    За наводку спасибо, посмотрим.

  6. деловой человек Kozzi пишет:

    Думаю этот скрипт будет использован многими не в благих целях..

  7. team пишет:

    это ж его на крон нужно вешать?

  8. DeVoid пишет:

    Можно на крон, иначе он будет работать только на протяжении max_execution_time, которое указано в php.ini. Хотя на постоянную работу скрипт можно запустить используя SSH.

  9. Vladimir пишет:

    иначе он будет работать только на протяжении max_execution_time

    set_time_limit(0) поможет

    Хотя на постоянную работу скрипт можно запустить используя SSH.

    Можно попробовать и так (в зависимости о того, как был собран PHP):

    system(’/path/to/php /path/to/script.php &’).

    А вообще WebIcqLite довольно глючное поделие (извиняюсь за жаргон). Очень быстрым и простым решением оказалось поставить Jabber-сервер и настроить соответствующие транспорты (PyICQt, PyMSNt, PyYIMt, PyAIMt), и далее по протоколу XMPP можно было слать сообщения в любую сеть, для которой настроен шлюз. Просто, быстро и удобно :-)

  10. zexter пишет:

    А по мне лучше BASICQ юзать, если надо тупо чтото ответить на какой-то строгий запрос. А если чтото помощьнее, то это не пойдет…

Оставить комментарий