Как получить сообщение XMPP скриптом perl?

Нашёл модуль Net::XMPP, нашёл, как отправлять им сообщения, а как принять -- не знаю. Подскажите пожалуйста. Вот пример с отправкой сообщения:
use strict;
use Net::XMPP;

my ($recip, $msg) = @ARGV;

if(! $recip || ! $msg) {
	print 'Syntax: $0 <recipient> <message>\n';
	exit;
}

my $con = new Net::XMPP::Client();
my $status = $con->Connect(
	hostname => 'jabber.ru',
	connectiontype => 'tcpip',
	tls => 0);
die('ERROR: XMPP connection failed') if ! defined($status);

my @result = $con->AuthSend(
	hostname => 'jabber.ru',
	username => 'name',
	password => 'password');

die('ERROR: XMPP authentication failed') if $result[0] ne 'ok';
die('ERROR: XMPP message failed') if ($con->MessageSend(to => $recip, body => $msg) != 0);
  • Вопрос задан
  • 3237 просмотров
Решения вопроса 1
q1t
@q1t
вроде все в той же либе
методы (отправить, принять)
Или нужен конкретный код?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@mpirozhkov
сегодня задался аналогичным вопросом, в итоге написал себе такой вариант решения:
#!/usr/bin/perl

use Net::XMPP;
use Encode;
 
    my $to='my@domain.ru';
    my $server='domain.ru';
    my $port=5222;
    my $user='test';
    my $password="mypassword";
    my $resource="home";
    my $connectiontype="tcpip";
    my $ssl=0;
    my $tls=1;
    my $debugLevel = 0;
    my $client = Net::XMPP::Client->new(debuglevel => $debugLevel);
		
		# Определяем обработчики событий

		$client->SetCallBacks(onauth => \&onAuth,);
		
		$client->SetMessageCallBacks(#normal =>\&messageNormalCB,
									 chat    =>\&messageChatCB);
		
		my $status = $client->Execute(
                hostname        => $server,
                port            => $port,
                connectiontype  => $connectiontype,
                ssl             => $ssl,
                tls             => $tls,
				username => $user,
				password => $password,
                resource => $resource);
				
        if (!(defined($status))) {
                print "ERROR:  XMPP connection failed.\n";
                print "($!)\n";
                exit(0);
        }
		
sub onAuth {
    $client->PresenceSend(show => 'online', priority => 10);
	
	print "online\n";
}

sub messageChatCB {
    my ($sid, $mes) = @_;
    my $sender = $mes->GetFrom();
    my $body   = encode('cp866', $mes->GetBody());
    #my $thread = $mes->GetThread();

	print "$sender\n$body\n\n";
	
	print encode('cp866', decode('utf-8', 'Что скажем?'))."\n";
	
	my $mes = <STDIN>;
	
    my $text = decode('cp866', $mes);
    $client->MessageSend(
            to       => $to,
            #resource => $resource,
            #subject  => "Subj",
            type     => "chat",
            body     => $text);
	
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
26 апр. 2024, в 10:01
500 руб./за проект
26 апр. 2024, в 09:18
500 руб./в час
26 апр. 2024, в 06:46
1500 руб./в час