Net-YMSG

 view release on metacpan or  search on metacpan

YMSG.pm  view on Meta::CPAN

		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
{

YMSG.pm  view on Meta::CPAN

	 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 )