Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

ICQ бот PHP (Валенок)
Author Message
Валенок
Участник форума



Joined: 06 Apr 2006
Posts: 520
Карма: -3
   поощрить/наказать


PostPosted: Tue May 23, 2006 10:19 pm (написано за 8 минут 41 секунду)
   Post subject: ICQ бот PHP
Reply with quote

надыбал тут класс для ICQ в PHP (автор не я, а товарищи с несуществующей(?) [удалена неактуальная ссылка] - это так в скрипте написано. автор отзовись!)
и решил написать Бота (как раз такая штука - надыбал 7знак :) а не всех знакомых оповестил)...
вот смотрите, что вышло: (а сам класс во вложении)
(пожелания рассматриваются :) )
Code (php): скопировать код в буфер обмена
<?
$admin="8359812";         //
$send2me=$admin;          //
$icq_number="11111111";   //
$icq_pass="CoolPass";     //
$icq_std_status="ONLINE"; //

include "c99phpicq.php";
set_time_limit (www.php.net/set_time_limit) (0);      //
ignore_user_abort (www.php.net/ignore_user_abort)(true);
$icq = new ICQclient($icq_number,$icq_pass);
$icq->errorstream = false;
$icq->dbgstream = false;
$icq->connect();
$icq->setstatus($icq_std_status);
$icq->login();

while ($icq->socket)
{
 $icq->listen();
 if ($icq->ismessage())
 {
  $uin = $icq->inLastVar["uin"];
  $text = $icq->inLastVar["text"];
  $mid = md5 (www.php.net/md5)($icq->inLastVar["mid"]);
  $text = trim (www.php.net/trim)($text);
  $cmd = explode (www.php.net/explode)(" ",$text);
  $cmd[0] = strtolower (www.php.net/strtolower)($cmd[0]);
  $cmd[1] = strtolower (www.php.net/strtolower)($cmd[1]);
  if ($text == "!exit"  && $uin==$admin) {exit (www.php.net/exit);}
  elseif ($text == "!exit" || $text == "!send") { $icq->message_send($uin,"Access denied!"); }
  elseif ($cmd[0] == "!send" && $uin == $admin) {
    $text2send = $cmd[2];
    for($i=2; $i<=count (www.php.net/count)($cmd); $i++) $text2send.=$cmd[$i];
    $icq->message_send( $cmd[1], $cmd[2] );
  }
  else {
       $icq->message_send($uin,"!   ICQ   :)     $send2me (  ,    :))");
       $icq->message_send($send2me,"--   $uin: $text");

       }
     }
  }
?>
врубаем денвер или че там у вас стоит, потом запускаем в браузере скрипт (не забудьте засунуть рядом со скриптом c99phpicq.php), закрываем браузер и радуемся жизни. когда надоедает: шлем боту с админской аси !exit

ТУ ДУ:
 - админский интерфейс расширить + админ не по аси а по паролю
 - узнавать всякую феню, как это сделано, например, в РипперБоте (забыл его номер :( )
 - ваши предложения :)


c99phpicq.rar
 Description:

Download
 Filename:  c99phpicq.rar
 Filesize:  20.05 KB
 Downloaded:  4660 Time(s)



Last edited by Валенок on Tue May 23, 2006 10:53 pm; edited 1 time in total
Back to top
View user's profile Send private message
Александр Михалицын
Модератор



Joined: 23 May 2008
Posts: 1299
Карма: 81
   поощрить/наказать


PostPosted: Sat Jul 18, 2009 2:42 pm (спустя 3 года 1 месяц 25 дней 16 часов 23 минуты; написано за 3 минуты 57 секунд)
   Post subject:
Reply with quote

Выкладываю свою реализацию ICQ Бота на основе библиотеки WebIcqPro (wip.asminog.com/workshop/webicqpro/), работающего по принципу демона (вечного цикла).
То есть даже в случае разрыва соединения с ICQ сервером, бот не прекратит работу, а просто сделает реконнект.
Все лежит в аттаче. Для добавления и правки существующих команд, НЕ НАДО править код бота, правьте код в файле bot_message_parse_functions.php,
перед запуском бота необходимо отредактировать файл bot_config.php.

Бот тестировался в течении 2х суток, падений не было.

Выкладываю код файла bot.php:
Code (php): скопировать код в буфер обмена
<?php
/**
 * ICQ Бот на основе библиотеки WebIcqPro.
 *
 * Благодарность:
 * Юрию Насретдинову за подсказки и помощь в устранении багов
 * Ринату Насибуллину за замечательную библиотеку censure.php
 *
 * @author Александр Михалицын <admin@systemnik.net.ru) (http://systemnik.net.ru)
 * @version 1.0
 */


//Спасибо Юрию Насретдинову
if($fp = fopen (www.php.net/fopen)('lock.lock', 'x'))
{
        //помоему не срабатывает, поэтому при отправке команды !exit с админского унина, мы делаем
        //операции fclose, unlink...
        register_shutdown_function (www.php.net/register_shutdown_function)( create_function (www.php.net/create_function)('', 'fclose($fp); unlink("lock.lock");') );
} else {
        exit (www.php.net/exit);
}
//EOF

//Включаем полный контроль ошибок
error_reporting (www.php.net/error_reporting)(E_ALL);
//Отключаем отображение их в броузер
ini_set (www.php.net/ini_set)('display_errors', 0);
//Включаем запись ошибок в лог.
ini_set (www.php.net/ini_set)('log_errors', 1);
set_time_limit (www.php.net/set_time_limit)(0);
ignore_user_abort (www.php.net/ignore_user_abort)(true);
require_once('WebIcqPro/WebIcqPro.class.php');
require('bot_config.php');
require('bot_functions.php');
/*************************
Править надо именно этот файл, именно в нем находится обработка сообщений для админов и для юзеров отдельно.
Схема такова:
когда боту приходит сообщение запускается функция parse_user_commands,
если в её коде не предуусмотрена команда которую послал пользователь она возвращает FALSE,
в функции parse_message (её трогать ненадо она в другом файле) идет проверка на то что УИН этого пользователя
админский если она TRUE запускается функция parse_admin_commands, если и она не находит нужной обработки для команды,
то возвращает FALSE и бот отвечает пользователю:
"Вы ввели несуществующую комманду, или просто не имеете к ней доступа! Наберите \'!help\' для помощи по командам."
*************************/

require('bot_message_parse_functions.php');
//Подключаем библиотеку для фильтра матов.
//Author Rin
if (IGNORE_MAT)
{
        require('censure/censure.php');
}

write_to_log('Процесс бота запущен.');
$reconnect_nums = 0;
$process_uptime = time (www.php.net/time)();
$connect_uptime = 0;

while (true)
{
        if ($reconnect_nums == 3)
        {
                sleep (www.php.net/sleep)(60 * 20); //Поспим 20 минут
                $reconnect_nums = 0;
        }

        $icq = new WebIcqPro();

        if ($icq->connect(BOT_UIN, BOT_UIN_PASSWORD))
        {
                $connect_uptime = time (www.php.net/time)();

                send_message(ADMIN_UIN, 'Бот подключился.');
                write_to_log('Бот подключился.');

                $icq->setStatus(START_STATUS, 'STATUS_WEBAWARE', 'Talk to me... I\'m WebIcqBot :)');
                $icq->setXStatus(START_XSTATUS);

                $reconnect_nums = 0; //Обнулим колличество реконнектов

                $old_message_array = null;

                while ($icq->isConnected())
                {
                        $message_array = $icq->readMessage();

                        if (isset (www.php.net/isset)($message_array['type']) && $message_array['type'] == 'message' && isset (www.php.net/isset)($message_array['from']) && isset (www.php.net/isset)($message_array['message']) && $message_array['message'] != '' && !get_ignore_uin((int)$message_array['from']))
                        {

                                if ($message_array != $old_message_array)
                                {
                                        $old_message_array = $message_array;
                                        convert_message_encoding($message_array); //borrowed from WIP Bot

                                        //Убираем NULL символ из сообщения. Наблюдается в QIP, а в Jimm и др. клиентах нет.
                                        //Спасибо Юрию Насретдинову
                                        if( $message_array['message'][strlen (www.php.net/strlen)($message_array['message']) - 1] == chr (www.php.net/chr)(0) ) $message_array['message'] = substr (www.php.net/substr)($message_array['message'], 0, -1);
                                        //EOF
                                        parse_message($message_array['from'], $message_array['message']);
                                } else {
                                        send_message($message_array['from'], 'Прошу вас, не повторять сообщение, в противном случае, ваш UIN, будет добавлен в игнор лист. У вас ' . get_repeat_msg($message_array['from']));
                                }
                        }

                        usleep (www.php.net/usleep)(500); //незнаю зачем, но если не дать ему поспать -- он будет оффлайн. o_O
                }

                write_to_log('Оборвался цикл коннекта бота, вот сообщение об ошибке: [' . $icq->error . ']. Время аптайма коннекта: ' . (time (www.php.net/time)() - $connect_uptime) . ' секунд.');
        } else {
                write_to_log('Не могу приконнектиться к серверу, вот сообщение об ошибке: [' . $icq->error . '].');
                sleep (www.php.net/sleep)(30); //Поспим 30 секунд и попробуем реконнект! Попытка -- не пытка :-)
                $reconnect_nums++;
        }
}
?>



my_bot.zip
 Description:
v.1.0

Download
 Filename:  my_bot.zip
 Filesize:  55.4 KB
 Downloaded:  1733 Time(s)



Last edited by Александр Михалицын on Sat Aug 28, 2010 12:22 pm; edited 1 time in total
Back to top
View user's profile Send private message Send e-mail
Александр Михалицын
Модератор



Joined: 23 May 2008
Posts: 1299
Карма: 81
   поощрить/наказать


PostPosted: Sat Aug 28, 2010 12:21 pm (спустя 1 год 1 месяц 9 дней 21 час 38 минут)
   Post subject:
Reply with quote


М

Ветка выделена в отдельную тему «ICQ бот на PHP [обсуждение]»,
расположенную в форуме Разное :: PHP (28 Августа 2010, 15:21).
Back to top
View user's profile Send private message Send e-mail
Александр Михалицын
Модератор



Joined: 23 May 2008
Posts: 1299
Карма: 81
   поощрить/наказать


PostPosted: Sat Aug 28, 2010 12:23 pm (спустя 2 минуты)
   Post subject:
Reply with quote


М

Ветка выделена в отдельную тему «Простенький ICQ бот»,
расположенную в форуме Склад готовых решений :: Perl (28 Августа 2010, 15:23).
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML