Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Perl + ICQ


Автор: fantome 13.6.2007, 11:28
Народ, помогите с траблой...
надо написать скрипт, который после своей работы отправит хозяину(то бишь мне) сообщение на аську...
Доки читал... Там нету про этого нифика.... Использую Net::OSCAR...
Код

#!/usr/bin/perl -w

use Net::OSCAR;

my $oscar;

$oscar = Net::OSCAR->new();
$oscar->set_callback_im_in(\&message_callback);
$oscar->signon( 666666, "icqbotmy" ) or  die("Авторизация не удалась!\n");

my $quit = 0;
while(!$quit)
{ $oscar->do_one_loop();
}

sub message_callback
{$oscar->send_im(555555, "all o\'key");
  return 1;
}

$oscar->signoff();
exit 0;
END;


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

Автор: shamber 13.6.2007, 11:50
скинуть боту сообщение smile

Автор: fantome 13.6.2007, 12:27
shamber
ГЫ....

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

на сервер постоянно лазить тож не хочетсо.... Вот и захотел, чтоб бот в аську кидал...

Никто так и не может помочь советом???

Автор: Ramirez 13.6.2007, 13:31
в цикле проверять то что тебе надо и вызывать:


Код

$oscar->send_im(555555, "all o\'key");

Автор: shamber 13.6.2007, 13:40
fantome,  собственно а ты чего хотел. 
Сам смотри:
Код

sub message_callback
{$oscar->send_im(555555, "all o\'key");
  return 1;
}

Эта функция вызывается, когда? smile
Как не странно только тогда, когда ты посылаешь сообщение боту.
попробуй просто 
Код

#!/usr/bin/perl -w

use Net::OSCAR;

my $oscar;

$oscar = Net::OSCAR->new();
$oscar->set_callback_im_in(\&message_callback);
$oscar->signon( 666666, "icqbotmy" ) or  die("Авторизация не удалась!\n");
sleep 2;
$oscar->send_im(555555, "all o\'key");

$oscar->signoff();


P.S. у себя провериь не могу так как пишет:

Couldn't set Win32 blocking: Unknown error

так что вот 
пробуй

Автор: fantome 13.6.2007, 13:43
Ramirez
Цитата

в цикле проверять то что тебе надо и вызывать


так вот в цикле, по описанию из док, должно быть только 
Код
$oscar->do_one_loop();


при получении ботом сообщения от клиента вызывается ф-ция message_callback
Вставление её в цикл ни к чему не приводит...
точнее если вставить только её одну - то нифига, бот даже в онлайне не светиться...
а если вместе с do_one_loop()   - то на аську сваливается сразу порядка 10 сообщений одинаковых(копий)...
А хотелось бы чтоб каждое сообщение только один раз приходило... без копий...

Автор: nitr 13.6.2007, 13:44
fantome, там в комплекте с этим модулем (Net::OSCAR) очень хорошие примеры, посмотрите внимательно, ваш вопрос там затронут...

Автор: fantome 13.6.2007, 13:56
shamber

так не срабатывает... уже проверял... без 
Код
$oscar->do_one_loop();

бот даже в онлайн не вылазит... без этой гребанной функции даже коннект не проходит...

Автор: fantome 13.6.2007, 14:12
nitr
Цитата
там в комплекте с этим модулем (Net::OSCAR) очень хорошие примеры, посмотрите внимательно, ваш вопрос там затронут...


Если не сложно, скиньте код примера - я чё т эти примеры найти не могу... ну под линем, ни в мелкой... 

Автор: KSURi 13.6.2007, 14:34
Код

use Net::vICQ

Автор: shamber 13.6.2007, 14:50
KSURi, он кажется все-таки с Net::OSCAR хочет работать smile

Автор: fantome 13.6.2007, 15:13
shamber

насколько я в курсе, сейчас с аськой нормально только Net::OSCAR из перл работает...
Читал про варианты с клиентом аськи из перла через пайп... но это не подходит...

Люди... хоть ссылки на нормальный хелп дайте.... весь инет уже перерыл... 

Автор: KSURi 13.6.2007, 16:12
Net::vICQ тоже работает, там реализована 7ая версия протокола, которая пока еще в силе.
В целом, этот модуль на мой взгляд лучше, чем Net::OSCAR

Автор: fantome 13.6.2007, 16:42
KSURi, да мож он и лучше... не спорю... тока он пока не стандартный... в CPAN его нет...

Автор: nitr 13.6.2007, 18:16
KSURi, после изменений (в протоколе) тот модуль работает нестабильно, или вообще не работает.

Автор: nitr 13.6.2007, 21:02
держите ;) :
Код

#!/usr/bin/perl
use strict; use warnings;
use Net::OSCAR;

my $uin = '111111111';
my $passwd = 'bu-ga-ga';
my $oscar = Net::OSCAR->new;
$oscar->signon($uin, $passwd);

my $uin_to_send = '222222222';
my $message = 'MEGA MESSAGE!!!';

while (not $oscar->is_on) { $oscar->do_one_loop; }

while ($oscar->is_on) {
    $oscar->do_one_loop;
    $oscar->send_im($uin_to_send, $message);
    $oscar->do_one_loop;
    $oscar->signoff;
    $oscar->do_one_loop;
}


только подумать о отключении... ;)

Автор: fantome 14.6.2007, 09:05
Nitr
пасиб... сча попробую....



Огромное тебе пасиб, Nitr... респект... smile 

Автор: nitr 14.6.2007, 22:18
Не за что ;) надеюсь будете использовать по назначению ;) (т.е. то что указано в теме)

Автор: fantome 15.6.2007, 09:26
nitr
Цитата
надеюсь будете использовать по назначению ;)

естественно... из-за этого же страдал....
а так - автоматизация админских задач с отчетом о выполнении в аську...
как раз то, что нужно....
еще раз - БОЛЬШОЕ СПАСИБО...
+1

Автор: Perl_sapiens 4.5.2008, 23:58
эх... а у меня это вылезает:
Couldn't set Win32 blocking: Unknown error

Как быть?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)