[Скрипт] icq-бот руками "блондинки", статья + код.

Статус
В этой теме нельзя размещать новые ответы.

Mendel

Гуру форума
Регистрация
27 Янв 2008
Сообщения
215
Реакции
65
Есть много классов, библиотек для создания icq-ботов. но как правило для их освоения требуется какоето время. А так хочется сделать HelloWorld за пять минут. Для этих целей я написам маленький врапер над одной из больших и толстых библиотек.
Итак бот своими руками:
1 - идем на Для просмотра ссылки Войди или Зарегистрируйся и регистрируем себе аську.
2 - качаем файл inc.php из вложения в этом сообщении.
3 - создаем скрипт hello.php (см. листинг ниже)
4 - заливаем оба файла на хостинг или в папку где они будут лежать и запускаем скрипт hello.php на исполнение. я это делаю командой "php5 hello.php &" но у вас может быть иначе. Напомню что & означает вызов в фоновом режиме. Также вдруг ктото не помнит - выходя из SSH не забудьте закрыть сессию logout-ом, ибо иначе ваша фоновая задача может погибнуть.

Листинг №1:
PHP:
<?
// ******************************************************
// объявим UIN и пароль нашего бота.                  ***
// ******************************************************
DEFINE('ICQ_UIN','123456789'); // Номер ICQ бота        *
DEFINE('ICQ_PASS','пароль'); // Пароль от уина ICQ бота *
// ******************************************************
require_once('inc.php'); // вызовем библиотеку       ****
// ******************************************************


// ******************************************************
// основная функция - вызывается если пришло сообщение **
// ******************************************************
function icq($from,$req)
	{
	icq_say($from,'Hello world!');
	}
?>

Описанный бот в ответ на любое сообщение пишет "Hello World!".
Как это рааботает:
1 - константами объявляем UIN бота и пароль, вызываем библиотечку.
2 - в библиотеке прописаны все команды необходимые для логина, удаление всех офлайн-сообщений и тп. также в библиотеке выполняется цикл проверяющий не пришло ли сообщение, и если пришло то вызывает функцию icq($from,$text) где $from - это UIN написавшего нам сообщение, а $text это собственно то что он нам написал.
Цикл заканчивается в случае если была выполнена функция icq_stop() ну или при принудительном окончании скрипта. (например CTR-C, kill, killall и тп).
Также есть функция icq_say($to,$text) при вызове которой на UIN $to посылается сообщение $text.

3 - в нашем скрипте объявляется функция icq($from,$text) которая собственно является "сердцем" скрипта потому что здесь то мы и описываем всю логику. В нашем простейщем случае мы просто отправляем тому кто написал нам сообщение "Hello World!".

Листинг №2:
PHP:
<?
// ******************************************************
// объявим UIN и пароль нашего бота.                  ***
// ******************************************************
DEFINE('ICQ_UIN','123456789'); // Номер ICQ бота        *
DEFINE('ICQ_PASS','пароль'); // Пароль от уина ICQ бота *
DEFINE('ADMIN','400480124'); // UIN админа            ***
// ******************************************************
require_once('inc.php'); // вызовем библиотеку       ****
// ******************************************************


// ******************************************************
// основная функция - вызывается если пришло сообщение **
// ******************************************************
function icq($from,$req)
	{
	if($from==ADMIN AND $req=='die')
		{
		icq_say($from,'Чао!');
		icq_stop();
		}
	else
		{
		icq_say($from,$req);
		}
	}
?>

Этот скрипт просто "отзеркаливает" то что ему написали. Но если сообщение пришло от админа, и это сообщение "die" то работа скрипта прекращается.

Ну и в заключение приведу "заготовку" для более реального бота. Я думаю достаточно очевидно что он делает и как.
Листинг №3:
PHP:
<?
// ******************************************************
// объявим UIN и пароль нашего бота.                  ***
// ******************************************************
DEFINE('ICQ_UIN','123456789'); // Номер ICQ бота        *
DEFINE('ICQ_PASS','пароль'); // Пароль от уина ICQ бота *
DEFINE('ADMIN','400480124'); // UIN админа            ***
// ******************************************************
require_once('inc.php'); // вызовем библиотеку       ****
// ******************************************************


// ******************************************************
// основная функция - вызывается если пришло сообщение **
// ******************************************************
function icq($from,$req)
	{
	switch($req)
		{
		case 'help':
			{
			icq_say($from,'допустимые команды это one, two, bye и help');
			}
		break;
		case 'one':
			{
			icq_say($from,'один');
			}
		break;
		case 'two':
			{
			icq_say($from,'два');
			}
		break;
		case 'bye':
			{
			if($from==ADMIN)
				{
				icq_say($from,'Чао!');
				icq_stop();
				}
			else
				{
				icq_say($from,'у вас нет прав меня отключить');
				}
			}
		break;
		default:
			{
			icq_say($from,'извините, но я не знаю такой команты. для помощи напишите help');
			}
		break;
		}
	}
?>
 

Вложения

  • inc.rar
    13,7 KB · Просмотры: 170
а что нужно для бота?
чтонить еще кроме php нужно? или можно даже на простом серваке запустить?
 
а что нужно для бота?
чтонить еще кроме php нужно? или можно даже на простом серваке запустить?
нужен только php ...
желательно правда всетаки иметь сервер или VDS потому что запускать его на виртуальном хостинге это мучения.
 
бот работает отлично при выводе обычных команд типа Hello world

Но когда я пытаюсь зделать вывод рандомного анекдота(из базы MySql) то для меня он работает, а для когото пишет текст, какбы етой команды нету "извините, но я не знаю такой команды...."

Можете чтото посоветовать?
 
а на условие он может отправлять сообщения? тоесть случилось условие, пришло сообщение. В зависимости от даты или системной команды.

Я знаю ставят на мониторинг сервера.
 
бот работает отлично при выводе обычных команд типа Hello world

Но когда я пытаюсь зделать вывод рандомного анекдота(из базы MySql) то для меня он работает, а для когото пишет текст, какбы етой команды нету "извините, но я не знаю такой команды...."

Можете чтото посоветовать?
Телепаты в отпуске.
Код покажите.
вот рабочий код который выдает случайную цитату но не из базы а из файла.
PHP:
<?
// ******************************************************
// объявим UIN и пароль нашего бота.                  ***
// ******************************************************
DEFINE('ICQ_UIN','392876845'); // Номер ICQ бота        *
DEFINE('ICQ_PASS','******'); // Пароль от уина ICQ бота *
DEFINE('BASE','love.txt'); // имя файла с базой фраз    *
// ******************************************************
$qqq=file(BASE); // считаем базу                        *
// ******************************************************
require_once('inc.php'); // вызовем библиотеку       ****
// ******************************************************


// ******************************************************
// основная функция - вызывается если пришло сообщение **
// ******************************************************
function icq($from,$req)
	{
	GLOBAL $qqq;
	$quote=$qqq[rand(0,count($qqq)-1)];
	icq_say($from,$quote);
	}
?>

увидеть его вработе можно на 392876845 или на 351820682
если не запущены - стукни в аську, запущу... я их на автомат не ставил.
цитаты берет из файла, имя файла указано в начале... формат = каждая цитата с новой строки....

а на условие он может отправлять сообщения? тоесть случилось условие, пришло сообщение. В зависимости от даты или системной команды.

Я знаю ставят на мониторинг сервера.
Запускаться по времени он не умеет.
я думал одэтом, но решил что это уже не для "блондинки".
открой файл inc.php
там идет мой кусок кода, а дальше та библиотека из которой делалось этоупрощение... помедитируй над вот этим куском:
PHP:
// *********************************************
// основной цикл
// *********************************************
while($ICQ_still)
	{
	if(!is_resource($ICQ->sock) || feof($ICQ->sock)) $still_there=false;
	if(!$code) sleep(1);    // Спим
	$code=$ICQ->dance_for('me');
	switch($code)
		{
		case 7:
		$msg=$ICQ->id['in_messages']['last'];
		$from=$msg['uin'];
		$text=$msg['text'];
		icq($from,$text);
		}
	}
Если не получится - пиши, сделаюверсию которая и это умеет. :)
 
Бот не очень, дествительно руками блондинки). Сегодня вечером выложу бота ICQ сам писал.. Функций достаточно много разной тематики - Погода, расшифровка хешей, флуд, проверка на инвиз и т.п
 
Бот не очень, дествительно руками блондинки). Сегодня вечером выложу бота ICQ сам писал.. Функций достаточно много разной тематики - Погода, расшифровка хешей, флуд, проверка на инвиз и т.п

Только плиз в отдельной теме.
 
  • Заблокирован
  • #9
Сегодня вечером выложу бота ICQ сам писал
Так когда же будет твой бот?? если уже выложил, то дай плз ссылку!
 
У меня какой то глюк с твоим ботом. Если я пытаюсь отправить сообщение изпод эмулятора аськи на подобии QIP то бот тупо молчит ... В чем может быть проблема?
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху