http://www.perlmonks.org?node_id=914006

Hello Monks,

I'm working on a new project called Net::IM, which has the aim of being for Perl what libpurple is for C/C++ - a set of modules for interacting with various instant messaging networks.

The first network I'm developing a module for is Yahoo Messenger, because Net::YMSG has been broken for 7 years, and there is already code out there for AIM and MSN and various other networks.

The code is still in development, and it has a Google Code project at http://code.google.com/p/perl-net-im/.

Currently, YMSG support is working well enough to run a chatterbot on it if you wanted. It supports:
  • Signing in, sign out
  • Send/receive instant messages
  • Send/receive typing notifications
  • Upload an avatar (PNG file) for itself
  • Accept new add requests
Adding/removing contacts from its contact list isn't fully implemented yet.

How It's Used

Your code can use Net::IM itself, which will allow you to manage multiple connections to multiple networks with just the one Net::IM object. This would be most similar to libpurple/Pidgin. Or, you can use the network modules directly, like Net::IM::YMSG.

Example:

my $im = Net::IM->new(debug => 1); my $yahoo = $im->addConnection ( network => "YMSG", username => "aidenrive", password => "big-secret", hexdump => 1, ); $im->addHandlers ( connected => \&on_connected, notification => \&on_notification, Message => \&on_message, Attention => \&on_buzzed, AddRequest => \&on_added, Typing => \&on_typing, BuddyStatus => \&on_buddy_status, BuddyList => \&on_buddylist, BuddyOnline => \&on_buddy_online, BuddyOffline => \&on_buddy_offline, Disconnected => \&on_disconnected, BuddyIconDownloaded => \&on_icon_downloaded, BuddyIconUploaded => \&on_icon_uploaded, ); $im->login(); $im->run();
The method names and event names are to be kept consistent among all the supported networks. So, setting handlers in Net::IM will cause those handlers to be called by every network that has a handler for that event.

Check it out if you have any interest. I plan on implementing thorough support for as many networks as possible (including file transfers and tricky things like that).

Replies are listed 'Best First'.
Re: Net::IM - Instant Messaging for Perl
by Hinrik (Novice) on Jul 16, 2011 at 16:32 UTC
    Why not reuse the wheel by creating a Perl wrapper for libpurple instead?