Net-YahooMessenger
view release on metacpan or search on metacpan
lib/Net/YahooMessenger.pm view on Meta::CPAN
84, 0,
'1' => $self->id,
'0' => $self->id,
'277' => $https->y_string,
'278' => $https->t_string,
'307' => $https->md5_string,
'244' => '4194239',
'2' => $self->id,
'2' => $self->id,
'135' => '9.0.0.2152',
);
$server->send($auth);
my $user_info = $self->recv();
my $buddy_list = $self->recv();
my $login = $self->recv();
my $handler = $self->get_event_handler();
$handler->accept($login) if $handler;
$self->add_event_source(
$server,
sub {
my $event = $self->recv;
my $handler = $self->get_event_handler;
$handler->accept($event);
},
'r'
);
return $login->is_enable();
}
sub _dump_packet {
my $source = shift;
print join ' ',
map { sprintf '%02x(%s)', ord $_, (/^[\w\-_]$/) ? $_ : '.'; } split //,
$source;
print "\n";
}
=head2 $yahoo->send($yahoo_id, $message)
This method send an Instant-Message C<$message> to the user specified by C<$yahoo_id>. A kanji code is Shift_JIS when including Japanese in $message.
=cut
sub send {
my $self = shift;
my $recipient = shift;
my $message = join '', @_;
my $server = $self->handle;
my $event = $self->create('SendMessage');
$event->from( $self->id );
$event->to($recipient);
$event->body($message);
$event->option(1515563606); # in Buddy list then 1515563606 else 1515563605
$server->send( $event->to_raw_string, 0 );
}
=head2 $yahoo->change_state($busy, $status_message)
This method sets the I<status messages> for the current user. 'Status message' is set by C<$status_message>. 'Busy icon' is set by the numerical value of C<$busy>.
The C<$busy> should be called with following arguments:
0 - I'm Available
1 - Busy
2 - Sleep
=cut
sub change_state {
my $self = shift;
my $busy = shift;
my $message = join '', @_;
my $server = $self->handle;
my $event = $self->create('ChangeState');
$event->status_code(99); # 99 : Custom status
$event->busy($busy);
$event->body($message);
$server->send( $event->to_raw_string, 0 );
}
sub change_status_by_code {
my $self = shift;
my $status_code = shift || 0;
my $server = $self->handle;
my $event = $self->create('ChangeState');
$event->status_code($status_code);
$event->busy(1);
$server->send( $event->to_raw_string, 0 );
}
sub ping {
my $self = shift;
my $server = $self->get_connection;
my $command = $self->_create_message( 76, 0, 0, '' );
$server->send( $command, 0 );
my $pong = $self->recv();
return $pong->is_enable;
}
=head2 $yahoo->recv()
This method reads the message from a server socket and returns a corresponding B<Event object>.
The B<Event object> which will be returned is as follows:
Net::YahooMessenger::InvalidLogin - Invalid Login
Net::YahooMessenger::Login - Succeeded in Login.
Net::YahooMessenger::GoesOnline - Buddy has logged in.
Net::YahooMessenger::ReceiveMessage - Message was received.
Net::YahooMessenger::ChangeState - Buddy has change status.
Net::YahooMessenger::GoesOffline - Buddy logged out.
Net::YahooMessenger::NewFriendAlert - New Friend Alert.
Net::YahooMessenger::UnImplementEvent - Un-implemented event was received.
All event objects have the following attributes:
=over 4
=item $event->from
B<Yahoo id> which invoked the event.
=item $event->to
B<Yahoo id> which should receive an event.
=item $event->body
The contents of an event. The message and state which were transmitted.
=item $event->code
The event number on Yahoo Messenger Protocol.
=back
=cut
sub recv {
my $self = shift;
require Net::YahooMessenger::EventFactory;
my $event_factory = Net::YahooMessenger::EventFactory->new($self);
return $event_factory->create_by_raw_data();
}
=head2 $yahoo->get_connection()
lib/Net/YahooMessenger.pm view on Meta::CPAN
# $self->_get_list_by_name('BUDDYLIST', $response->content)
# );
# $self->buddy_list(@buddy);
sub _get_list_by_name {
my $self = shift;
my $name = shift;
my $string = shift;
if ( $string =~ /BEGIN $name\r?\n(.*)\r?\nEND $name/s ) {
my @list = split /\r?\n/, $1;
return @list;
}
}
sub add_buddy_by_name {
my $self = shift;
my $group = shift;
my @buddy_name = @_;
my @buddy_list = $self->buddy_list();
for my $name (@buddy_name) {
my $buddy = Net::YahooMessenger::Buddy->new;
$buddy->name($name);
push @buddy_list, $buddy;
}
$self->buddy_list(@buddy_list);
}
1;
__END__
=head1 EXAMPLE
=head2 Send message
#!perl
use Net::YahooMessenger;
use strict;
my $yahoo = Net::YahooMessenger->new;
$yahoo->id('yahoo_id');
$yahoo->password('password');
$yahoo->login or die "Can't login Yahoo!Messenger";
$yahoo->send('recipient_yahoo_id', 'Hello World!');
__END__
=head2 Change Status message
#!perl
use Net::YahooMessenger;
use strict;
use constant IN_BUSY => 1;
my $yahoo = Net::YahooMessenger->new(
id => 'yahoo_id',
password => 'password',
);
$yahoo->login or die "Can't login Yahoo!Messenger";;
$yahoo->change_state(IN_BUSY, q{I'm very busy now!});
sleep 5;
__END__
=head2 Received message output to STDOUT
#!perl
use Net::YahooMessenger;
use strict;
my $yahoo = Net::YahooMessenger->new(
id => 'yahoo_id',
password => 'password',
);
$yahoo->set_event_handler(new ToStdoutEventHandler);
$yahoo->login or die "Can't login Yahoo!Messenger";
$yahoo->start;
package ToStdoutEventHandler;
use base 'Net::YahooMessenger::EventHandler';
use strict;
sub ChangeState {}
sub GoesOffline {}
sub GoesOnline {}
sub UnImplementEvent {}
sub ReceiveMessage
{
my $self = shift;
my $event = shift;
printf "%s: %s\n", $event->from, $event->body;
}
__END__
=head2 Connect to Yahoo!Japan Messege server
#!perl
use Net::YahooMessenger;
use strict;
my $yahoo = Net::YahooMessenger->new(
pre_login_url => 'http://edit.my.yahoo.co.jp/config/',
hostname => 'cs.yahoo.co.jp',
);
$yahoo->id('yahoo_id');
$yahoo->password('password');
$yahoo->login or die "Can't login Yahoo!Messenger";
$yahoo->send('recipient_yahoo_id', 'Konnitiwa Sekai!');
__END__
=head1 AUTHOR
Hiroyuki OYAMA <oyama@cpan.org> http://ymca.infoware.ne.jp/
From October 2003, this module is taken over and maintained by
Tatsuhiko Miyagawa L<lt>miyagawa@bulknews.netL<gt>
( run in 2.266 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )