From: Dan Boger Date: Mon, 23 Feb 2009 21:04:54 +0000 (-0800) Subject: Merge branch 'master' of git://github.com/faemir/twirssi X-Git-Url: https://git.sommitrealweird.co.uk/twirssi-net-twitter-lite.git/commitdiff_plain/f53ed11a5dd9561382143a06cb2e1e8d4b5f126b?hp=-c Merge branch 'master' of git://github.com/faemir/twirssi --- f53ed11a5dd9561382143a06cb2e1e8d4b5f126b diff --combined twirssi.pl index 0d4cb26,7f2f496..660a49c --- a/twirssi.pl +++ b/twirssi.pl @@@ -6,22 -6,23 +6,23 @@@ use HTML::Entities use File::Temp; use LWP::Simple; use Data::Dumper; + use Net::Identica; use Net::Twitter; $Data::Dumper::Indent = 1; use vars qw($VERSION %IRSSI); $VERSION = "2.0.6"; -my ($REV) = '$Rev: 483 $' =~ /(\d+)/; +my ($REV) = '$Rev: 484 $' =~ /(\d+)/; %IRSSI = ( authors => 'Dan Boger', contact => 'zigdon@gmail.com', name => 'twirssi', - description => 'Send twitter updates using /tweet. ' + description => 'Send twitter/identica updates using /tweet or /dent. ' . 'Can optionally set your bitlbee /away message to same', license => 'GNU GPL v2', url => 'http://twirssi.com', - changed => '$Date: 2009-02-20 14:37:28 -0800 (Fri, 20 Feb 2009) $', + changed => '$Date: 2009-02-21 13:53:25 -0800 (Sat, 21 Feb 2009) $', ); my $window; @@@ -324,7 -325,7 +325,7 @@@ sub cmd_switch } } - sub cmd_logout { + sub cmd_logout_twitter { my ( $data, $server, $win ) = @_; $data =~ s/^\s+|\s+$//g; @@@ -343,13 -344,32 +344,32 @@@ } } - sub cmd_login { + sub cmd_logout_identica { + my ( $data, $server, $win ) = @_; + + $data =~ s/^\s+|\s+$//g; + $data = $user unless $data; + return unless &valid_username($data); + + ¬ice("Logging out $data..."); + $twits{$data}->end_session(); + delete $twits{$data}; + undef $twit; + if ( keys %twits ) { + &cmd_switch( ( keys %twits )[0], $server, $win ); + } else { + Irssi::timeout_remove($poll) if $poll; + undef $poll; + } + } + + sub cmd_login_twitter { my ( $data, $server, $win ) = @_; my $pass; if ($data) { ( $user, $pass ) = split ' ', $data, 2; - } elsif ( my $autouser = Irssi::settings_get_str("twitter_usernames") - and my $autopass = Irssi::settings_get_str("twitter_passwords") ) + } elsif ( my $autouser = Irssi::settings_get_str("twitter_usernames_twitter") + and my $autopass = Irssi::settings_get_str("twitter_passwords_twitter") ) { my @user = split /\s*,\s*/, $autouser; my @pass = split /\s*,\s*/, $autopass; @@@ -361,13 -381,13 +381,13 @@@ while ( @user and @pass ) { $u = shift @user; $p = shift @pass; - &cmd_login("$u $p"); + &cmd_login_twitter("$u $p"); } return; } } else { ¬ice("/twitter_login requires either a username and password " - . "or twitter_usernames and twitter_passwords to be set." ); + . "or twitter_usernames_twitter and twitter_passwords_twitter to be set." ); return; } @@@ -421,7 -441,85 +441,85 @@@ } } - sub cmd_add_search { + sub cmd_login_identica { + my ( $data, $server, $win ) = @_; + my $pass; + if ($data) { + ( $user, $pass ) = split ' ', $data, 2; + } elsif ( my $autouser = Irssi::settings_get_str("twitter_usernames_identica") + and my $autopass = Irssi::settings_get_str("twitter_passwords_identica") ) + { + my @user = split /\s*,\s*/, $autouser; + my @pass = split /\s*,\s*/, $autopass; + if ( @user != @pass ) { + ¬ice("Number of usernames doesn't match " + . "the number of passwords - auto-login failed" ); + } else { + my ( $u, $p ); + while ( @user and @pass ) { + $u = shift @user; + $p = shift @pass; + &cmd_login_identica("$u $p"); + } + return; + } + } else { + ¬ice("/identica_login requires either a username and password " + . "or twitter_usernames_identica and twitter_passwords_identica to be set." ); + return; + } + + %friends = %nicks = (); + + $twit = Net::Identica->new( + username => $user, + password => $pass, + source => "twirssi" + ); + + unless ( $twit->verify_credentials() ) { + ¬ice("Login as $user failed"); + $twit = undef; + if ( keys %twits ) { + &cmd_switch( ( keys %twits )[0], $server, $win ); + } + return; + } + + if ($twit) { + my $rate_limit = $twit->rate_limit_status(); + if ( $rate_limit and $rate_limit->{remaining_hits} < 1 ) { + ¬ice( + "Rate limit exceeded, try again after $rate_limit->{reset_time}" + ); + $twit = undef; + return; + } + + $twits{$user} = $twit; + Irssi::timeout_remove($poll) if $poll; + $poll = Irssi::timeout_add( &get_poll_time * 1000, \&get_updates, "" ); + ¬ice("Logged in as $user, loading friends list..."); + &load_friends(); + ¬ice( "loaded friends: ", scalar keys %friends ); + if ( Irssi::settings_get_bool("twirssi_first_run") ) { + Irssi::settings_set_bool( "twirssi_first_run", 0 ); + unless ( exists $friends{twirssi} ) { + ¬ice("Welcome to twirssi!" + . " Perhaps you should add \@twirssi to your friends list," + . " so you can be notified when a new version is release?" + . " Just type /twitter_friend twirssi." ); + } + } + %nicks = %friends; + $nicks{$user} = 0; + &get_updates; + } else { + ¬ice("Login failed"); + } + } + + sub cmd_add_search_twitter { my ( $data, $server, $win ) = @_; unless ( $twit and $twit->can('search') ) { @@@ -447,7 -545,33 +545,33 @@@ ¬ice("Added subscription for '$data'"); } - sub cmd_del_search { + sub cmd_add_search_identica { + my ( $data, $server, $win ) = @_; + + unless ( $twit and $twit->can('search') ) { + ¬ice("ERROR: Your version of Net::Identica ($Net::Identica::VERSION) " + . "doesn't support searches." ); + return; + } + + $data =~ s/^\s+|\s+$//; + $data = lc $data; + + unless ($data) { + ¬ice("Usage: /twitter_subscribe "); + return; + } + + if ( exists $id_map{__searches}{$user}{$data} ) { + ¬ice("Already had a subscription for '$data'"); + return; + } + + $id_map{__searches}{$user}{$data} = 1; + ¬ice("Added subscription for '$data'"); + } + + sub cmd_del_search_twitter { my ( $data, $server, $win ) = @_; unless ( $twit and $twit->can('search') ) { @@@ -472,6 -596,31 +596,31 @@@ ¬ice("Removed subscription for '$data'"); } + sub cmd_del_search_identica { + my ( $data, $server, $win ) = @_; + + unless ( $twit and $twit->can('search') ) { + ¬ice("ERROR: Your version of Net::Identica ($Net::Identica::VERSION) " + . "doesn't support searches." ); + return; + } + $data =~ s/^\s+|\s+$//; + $data = lc $data; + + unless ($data) { + ¬ice("Usage: /identica_unsubscribe "); + return; + } + + unless ( exists $id_map{__searches}{$user}{$data} ) { + ¬ice("No subscription found for '$data'"); + return; + } + + delete $id_map{__searches}{$user}{$data}; + ¬ice("Removed subscription for '$data'"); + } + sub cmd_list_search { my ( $data, $server, $win ) = @_; @@@ -634,7 -783,6 +783,7 @@@ sub get_updates return unless &logged_in($twit); my ( $fh, $filename ) = File::Temp::tempfile(); + binmode($fh, ":utf8"); my $pid = fork(); if ($pid) { # parent @@@ -1179,14 -1327,22 +1328,22 @@@ if ($window) Irssi::command_bind( "dm", "cmd_direct" ); Irssi::command_bind( "dm_as", "cmd_direct_as" ); Irssi::command_bind( "tweet", "cmd_tweet" ); + Irssi::command_bind( "dent", "cmd_tweet" ); Irssi::command_bind( "tweet_as", "cmd_tweet_as" ); + Irssi::command_bind( "dent_as", "cmd_tweet_as" ); Irssi::command_bind( "twitter_reply", "cmd_reply" ); + Irssi::command_bind( "identica_reply", "cmd_reply" ); Irssi::command_bind( "twitter_reply_as", "cmd_reply_as" ); - Irssi::command_bind( "twitter_login", "cmd_login" ); - Irssi::command_bind( "twitter_logout", "cmd_logout" ); + Irssi::command_bind( "identica_reply_as", "cmd_reply_as" ); + Irssi::command_bind( "twitter_login", "cmd_login_twitter" ); + Irssi::command_bind( "twitter_logout", "cmd_logout_twitter" ); + Irssi::command_bind( "identica_login", "cmd_login_identica" ); + Irssi::command_bind( "identica_logout", "cmd_logout_identica" ); Irssi::command_bind( "twitter_switch", "cmd_switch" ); - Irssi::command_bind( "twitter_subscribe", "cmd_add_search" ); - Irssi::command_bind( "twitter_unsubscribe", "cmd_del_search" ); + Irssi::command_bind( "twitter_subscribe", "cmd_add_search_twitter" ); + Irssi::command_bind( "identica_subscribe", "cmd_add_search_identica" ); + Irssi::command_bind( "twitter_unsubscribe", "cmd_del_search_twitter" ); + Irssi::command_bind( "identica_unsubscribe", "cmd_del_search_identica" ); Irssi::command_bind( "twitter_list_subscriptions", "cmd_list_search" ); Irssi::command_bind( "twirssi_upgrade", "cmd_upgrade" ); if ( Irssi::settings_get_bool("twirssi_use_reply_aliases") ) { @@@ -1208,7 -1364,8 +1365,8 @@@ "twirssi_version", sub { ¬ice("Twirssi v$VERSION (r$REV); " - . "Net::Twitter v$Net::Twitter::VERSION. " + . "Net::Identica v$Net::Identica::VERSION. " + . "Net::Twitter v$Net::Twitter::VERSION." . "JSON in use: " . JSON::Any::handler() . ". See details at http://twirssi.com/" ); @@@ -1236,7 -1393,7 +1394,7 @@@ ¬ice(" %Y<%C(%B^%C)%N TWIRSSI v%R$VERSION%N (r$REV)"); ¬ice(" %C(_(\\%N http://twirssi.com/ for full docs"); ¬ice( - " %Y||%C `%N Log in with /twitter_login, send updates with /tweet"); + " %Y||%C `%N Log in with /twitter_login or /identica_login, send updates with /tweet or /dent"); my $file = Irssi::settings_get_str("twirssi_replies_store"); if ( $file and -r $file ) { @@@ -1266,10 -1423,16 +1424,16 @@@ } } - if ( my $autouser = Irssi::settings_get_str("twitter_usernames") - and my $autopass = Irssi::settings_get_str("twitter_passwords") ) + if ( my $autouser = Irssi::settings_get_str("twitter_usernames_twitter") + and my $autopass = Irssi::settings_get_str("twitter_passwords_twitter") ) + { + &cmd_login_twitter(); + } + + if ( my $autouser = Irssi::settings_get_str("twitter_usernames_identica") + and my $autopass = Irssi::settings_get_str("twitter_passwords_identica") ) { - &cmd_login(); + &cmd_login_identica(); } } else { @@@ -1277,6 -1440,4 +1441,4 @@@ ->print( "Create a window named " . Irssi::settings_get_str('twitter_window') . " or change the value of twitter_window. Then, reload twirssi." ); - } - - # vim: set sts=4 expandtab: + }