Net-YMSG
view release on metacpan or search on metacpan
sprintf '%02x(%s)', ord $_, (/^[\w\-_]$/) ? $_ : '.';
} split //, $source;
print "\n";
}
=head2 $yahoo->send($yahoo_id, $message)
This method send an Instant-Message B<$message> to the user specified by B<$yahoo_id>.
=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->chatsend($chatroom, $message)
This method send a Message B<$message> to the given B<$chatroom>.
=cut
sub chatsend
{
my $self = shift;
my $login = $self->{id};
my ($roomname, $message) = @_;
#my $message = join '', @_;
my $body="1".YMSG_SEPARATER.$login.YMSG_SEPARATER."104".YMSG_SEPARATER.$roomname.YMSG_SEPARATER."117".YMSG_SEPARATER.$message.YMSG_SEPARATER."124".YMSG_SEPARATER."1".YMSG_SEPARATER;
my $header = pack "a4Cx3nnNN",
YMSG_STD_HEADER,
9,
length $body,
168,
0,
$self->identifier || 0;
my $msg = $header.$body;
if(! defined $self->identifier) {
print STDERR "ERROR:Identifier Not Found";
}
my $server=$self->get_connection();
my $num=$server->send($msg,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::YMSG::InvalidLogin - Invalid Login
Net::YMSG::Login - Succeeded in Login.
Net::YMSG::GoesOnline - Buddy has logged in.
Net::YMSG::ReceiveMessage - Message was received.
Net::YMSG::ChangeState - Buddy has change status.
Net::YMSG::GoesOffline - Buddy logged out.
Net::YMSG::NewFriendAlert - New Friend Alert.
Net::YMSG::ChatRoomLogon - Log in chat room
Net::YMSG::ChatRoomReceive- Log in chat room
Net::YMSG::ChatRoomLogoff - Log in chat room
Net::YMSG::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 $i;
if($first==0 && $#from >= 1) {
# offline messages
print "Your Offline messages :\n[They have been saved in the file \'offline\' in the current directory]\n";
open(OFFLINE,">>offline") || printf "Error opening file offline";
for($i=0;$i<=$#from;$i++) {
print OFFLINE "[".$from[$i]."]: ".$body[$i]."\n";
}
close(OFFLINE);
}
$first=1;
for($i=0;$i<=$#from;$i++) {
if ($body[$i] ne "") {
$body[$i] =~ s{</?(?:font|FACE).+?>}{}g;
if( ! defined $nametonum{"$from[$i]"} ) {
$nametonum{"$from[$i]"} = $count;
$numtoname{"$count"}=$from[$i];
$count++;
}
my $message = sprintf "[%s(%s)] %s \n", $from[$i],$nametonum{"$from[$i]"},$body[$i];
print $message;
}
}
}
=cut
=head1 EXAMPLE
=head2 Send message
#!perl
use Net::YMSG;
use strict;
my $yahoo = Net::YMSG->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::YMSG;
use strict;
use constant IN_BUSY => 1;
my $yahoo = Net::YMSG->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 Become Invisible
#!perl
use Net::YMSG;
use strict;
my $yahoo = Net::YMSG->new(
id => 'yahoo_id',
password => 'password',
);
$yahoo->login or die "Can't login Yahoo!Messenger";;
$yahoo->invisible();
__END__
=head2 Received message output to STDOUT
#!perl
use Net::YMSG;
use strict;
my $yahoo = Net::YMSG->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::YMSG::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::YMSG;
use strict;
my $yahoo = Net::YMSG->new(
pre_login_url => 'http://edit.my.yahoo.co.in/config/',
( run in 1.153 second using v1.01-cache-2.11-cpan-39bf76dae61 )