perltidy
use strict;
use Irssi;
use Irssi::Irc;
use Net::Twitter;
use HTTP::Date;
use HTML::Entities;
use vars qw($VERSION %IRSSI);
$VERSION = "0.1";
%IRSSI = (
authors => 'Dan Boger',
contact => 'zigdon@gmail.com',
name => 'twirssi',
description => 'Send twitter updates using /tweet. '
. 'Can optionally set your bitlbee /away message to same',
license => 'GNU GPL v2',
url => 'http://irc.peeron.com/~zigdon/twirssi/',
changed => 'Mon Dec 1 15:36:01 PST 2008',
);
my $window;
my $twit;
my $user;
my $poll;
sub cmd_tweet {
my ( $data, $server, $win ) = @_;
unless ($twit) {
$window->print("*** Not logged in! Use /twitter_login username pass!");
return;
}
$data =~ s/^\s+|\s+$//;
unless ($data) {
$window->print("*** Usage: /tweet <update>");
return;
}
$twit->update($data);
$window->print( "<$user> $data", MSGLEVEL_MSGS );
}
sub cmd_login {
my ( $data, $server, $win ) = @_;
my $pass;
( $user, $pass ) = split ' ', $data, 2;
$twit = Net::Twitter->new( username => $user, password => $pass );
if ($twit) {
Irssi::timeout_remove($poll) if $poll;
$poll = Irssi::timeout_add( 300 * 1000, \&get_updates, "" );
$window->print("*** Logged in as $user");
}
else {
$window->print("*** Login failed.");
}
}
sub get_updates {
unless ($twit) {
$window->print("*** Not logged in! Use /twitter_login username pass!");
return;
}
my $tweets = $twit->friends_timeline(
{ since => HTTP::Date::time2str( time - 300 ) } );
foreach my $t (@$tweets) {
my $text = decode_entities( $t->{text} );
$text =~ s/%/%%/g;
$window->print(
sprintf( "[%b\@%s%n] %s", $t->{user}{screen_name}, $text ),
MSGLEVEL_MSGS );
}
$tweets =
$twit->direct_messages( { since => HTTP::Date::time2str( time - 300 ) } );
foreach my $t (@$tweets) {
my $text = decode_entities( $t->{text} );
$text =~ s/%/%%/g;
$window->print(
sprintf(
"[%b\@%s%n (%WDM%n)] %s", $t->{sender_screen_name}, $text
),
MSGLEVEL_MSGS
);
}
}
Irssi::settings_add_str( "twirssi", "twitter_window", "twitter" );
$window = Irssi::window_find_name( Irssi::settings_get_str('twitter_window') );
if ($window) {
Irssi::command_bind( "tweet", "cmd_tweet" );
Irssi::command_bind( "twitter_login", "cmd_login" );
Irssi::command_bind( "twitter_updates", "get_updates" );
}
else {
Irssi::print( "Create a window named "
. Irssi::settings_get_str('twitter_window')
. " or change the value of twitter_window" );
}