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" );
}