LINUX.ORG.RU

Неинтерактивные ICQ/XMPP-клиенты с CLI-интерфейсом


0

1

Есть потребность делать рассылку сообщений по ICQ и jabber для клиентов сервиса. В связи с этим нужен клиент (или клиенты, если уж мультипротокольных нет), который смогут делать это просто из командной строки. Пока нарыл finch, но что-то у него нет возможности просто послать сообщение из командной строки..

★★★★★

вышеупомянутый sendxmpp - только в одну сторону, если нужна двусторонняя коммуникация - hatexmpp

Можно использовать emacs, но это, имхо, оверхед

lazyklimm ★★★★★
()
[N] dev-perl/Net-XMPP ((~)1.02-r1): XMPP Perl Library
[N] dev-python/xmpppy ((~)0.5.0_rc1): Python library providing easy scripting with Jabber
[N] dev-ruby/xmpp4r (0.5-r1): An XMPP library for Ruby
[N] dev-ruby/xmpp4r-simple [1] ((~)0.8.8): Jabber::Simple - An extremely easy-to-use Jabber client library.
[N] net-im/sendxmpp ((~)1.20): sendxmpp is a perl-script to send xmpp (jabber), similar to what mail(1) does for mail.
[N] net-im/exmpp [1] ((~)0.9.6): fast and scalable XMPP library written in Erlang/OTP
[N] net-im/pyxmpp [2] ((~)1.0.0-r2): A Python XMPP (RFC 3920,3921) and Jabber implementation

Пиши @ отправляй.

pimiento
()

mcabber можно заставить слать из пайпа

visual_pipe
()

есть либа icqkid кажись, на ней это в 10 строк реализуемо. для жабера тоже должна быть

trashymichael ★★★
()
Ответ на: комментарий от TERRANZ

Хм.. будем посмотреть, спасибо большое!

boombick ★★★★★
() автор топика
Ответ на: комментарий от lazyklimm

Вот тоже смотрю в сторону транспортов.. М.б. это будет оптимальным решением

boombick ★★★★★
() автор топика
Ответ на: комментарий от boombick

подними на чужом, делов то? Единственное - надёжность упадёт, но тут уж придется выбирать

lazyklimm ★★★★★
()

В python-xmpp(или python-pyxmpp)\examples были хорошие примеры.

pacify ★★★★★
()

Перенос кода Perl на Python? Но почему?!

На Perl это обычно делается в одну строку.
Для icq

perl -MNet::OSCAR -e 'BEGIN{$icq = Net::OSCAR->new}$icq->set_callback_signon_done( sub { $icq->send_im(pop, pop), exit } ) && $icq->signon(shift, shift) && do {$icq->do_one_loop while 1}' login password sendto yourmsg

Не составит труда дописать этот пример, чтобы иметь возможность рассылать сообщения нескольким получателям.
И да, Net::ICQ который советовали не рабочий уже, насколько знаю.

Olegymous ★★★
()
Ответ на: Перенос кода Perl на Python? Но почему?! от Olegymous

Увы, не взлетело Вот такой вто результат:

OSCAR session: Unknown SNAC 1/21: 
	  00 03 00 1E  68 74 74 70   3A 2F 2F 61  70 69 2E 69     .... http  ://a pi.i
	  63 71 2E 6E  65 74 2F 6C   69 66 65 73  74 72 65 61     cq.n et/l  ifes trea
	  6D 2F 00 07  00 25 68 74   74 70 3A 2F  2F 6F 2E 69     m/.. .%ht  tp:/ /o.i
	  63 71 63 64  6E 2E 63 6F   6D 2F 6C 69  66 65 73 74     cqcd n.co  m/li fest
	  72 65 61 6D  2F 70 68 6F   74 6F 2F 00  08 00 27 68     ream /pho  to/. ..'h
	  74 74 70 3A  2F 2F 6C 69   66 65 73 74  72 65 61 6D     ttp: //li  fest ream
	  2E 69 63 71  2E 63 6F 6D   2F 70 68 6F  74 6F 2F 75     .icq .com  /pho to/u
	  70 6C 6F 61  64 3F 00 09   00 13 68 74  74 70 3A 2F     ploa d?..  ..ht tp:/
	  2F 61 70 69  2E 69 63 71   2E 6E 65 74  2F 00 0A 00     /api .icq  .net /...
	  22 68 74 74  70 3A 2F 2F   6C 69 66 65  73 74 72 65     "htt p://  life stre
	  61 6D 2E 69  63 71 2E 63   6F 6D 2F 73  65 74 74 69     am.i cq.c  om/s etti
	  6E 67 73 00  0F 00 1A 68   74 74 70 3A  2F 2F 6C 69     ngs. ...h  ttp: //li
	  66 65 73 74  72 65 61 6D   2E 69 63 71  2E 63 6F 6D     fest ream  .icq .com
	  2F 00 10 00  2B 68 74 74   70 3A 2F 2F  6C 69 66 65     /... +htt  p:// life
	  73 74 72 65  61 6D 2E 69   63 71 2E 63  6F 6D 2F 70     stre am.i  cq.c om/p
	  68 6F 74 6F  2F 6C 69 66   65 73 74 72  65 61 6D 2F     hoto /lif  estr eam/
	  00 13 00 2E  68 74 74 70   3A 2F 2F 6F  2E 61 6F 6C     .... http  ://o .aol
	  63 64 6E 2E  63 6F 6D 2F   6C 69 66 65  73 74 72 65     cdn. com/  life stre
	  61 6D 2F 63  6C 69 65 6E   74 2F 77 61  74 63 68 65     am/c lien  t/wa tche
	  72 73                                                   rs



С перлом знаком крайне шапочно, не могли бы вы подсказать куда копать?

boombick ★★★★★
() автор топика
Ответ на: комментарий от boombick

Еслив отбросить шутки, то нижеследующий код должен делать дело.
Настройки в константах, а использовать так:
echo -e «icqnum1\nicqnum2\nicqnum3» | ./s.pl

use Net::OSCAR;
use IO::Select;
use Time::HiRes qw/clock_gettime CLOCK_MONOTONIC/;
use strict;

use constant {
	LOGIN => '',
	PASSW => '',
	DELAY => 10,
	MSG   => 'Hello world'
};

my $online;
my $icq = Net::OSCAR->new();
$icq->set_callback_signon_done(
	sub {
		$online = 1;
	}
);
$icq->set_callback_error(
	sub {
		my ($error, $fatal) = @_[3,4];
		$fatal ? die $error : warn $error;
	}
);

$icq->signon(LOGIN, PASSW);

my $last = clock_gettime(CLOCK_MONOTONIC);
my $loop = 1;

my $select = IO::Select->new(\*STDIN);

while ($loop) {
	if ($online && clock_gettime(CLOCK_MONOTONIC) - $last >= DELAY) {
		if ($select->can_read(0.1)) {
			if (my $sendto = <STDIN>) {
				chomp $sendto;
				if ($sendto =~ /^\d+$/) {
					$icq->send_im($sendto, MSG);
					$last = clock_gettime(CLOCK_MONOTONIC);
				}
			}
			else {
				$icq->signoff();
				$loop = 0;
			}
		}
	}
	
	$icq->do_one_loop();
}

Olegymous ★★★
()
Ответ на: комментарий от Olegymous

Ого, огромное спасибо!!! Работает :) Плюсик тебе в карму

boombick ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.