a1b4bcf6e80e0636d9b8cdadeeb7d275d4ff6654
[twirssi-net-twitter-lite.git] / twirssi.pl
1 use strict;
2 use Irssi;
3 use Irssi::Irc;
4 use HTTP::Date;
5 use HTML::Entities;
6 use File::Temp;
7 use LWP::Simple;
8 use Data::Dumper;
9 use Net::Twitter;
10 $Data::Dumper::Indent = 1;
11
12 use vars qw($VERSION %IRSSI);
13
14 $VERSION = "1.7.6";
15 my ($REV) = '$Rev: 379 $' =~ /(\d+)/;
16 %IRSSI = (
17     authors     => 'Dan Boger',
18     contact     => 'zigdon@gmail.com',
19     name        => 'twirssi',
20     description => 'Send twitter updates using /tweet.  '
21       . 'Can optionally set your bitlbee /away message to same',
22     license => 'GNU GPL v2',
23     url     => 'http://tinyurl.com/twirssi',
24     changed => '$Date: 2009-01-21 09:50:42 -0800 (Wed, 21 Jan 2009) $',
25 );
26
27 my $window;
28 my $twit;
29 my %twits;
30 my $user;
31 my $poll;
32 my %nicks;
33 my %friends;
34 my $last_poll = time - 300;
35 my %tweet_cache;
36 my %id_map;
37
38 sub cmd_direct {
39     my ( $data, $server, $win ) = @_;
40
41     return unless &logged_in($twit);
42
43     my ( $target, $text ) = split ' ', $data, 2;
44     unless ( $target and $text ) {
45         &notice("Usage: /dm <nick> <message>");
46         return;
47     }
48
49     &cmd_direct_as( "$user $data", $server, $win );
50 }
51
52 sub cmd_direct_as {
53     my ( $data, $server, $win ) = @_;
54
55     return unless &logged_in($twit);
56
57     my ( $username, $target, $text ) = split ' ', $data, 3;
58     unless ( $username and $target and $text ) {
59         &notice("Usage: /dm_as <username> <nick> <message>");
60         return;
61     }
62
63     return unless &valid_username($username);
64
65     eval {
66         unless ( $twits{$username}
67             ->new_direct_message( { user => $target, text => $text } ) )
68         {
69             &notice("DM to $target failed");
70             return;
71         }
72     };
73
74     if ($@) {
75         &notice("DM caused an error.  Aborted");
76         return;
77     }
78
79     &notice("DM sent to $target");
80     $nicks{$target} = time;
81 }
82
83 sub cmd_tweet {
84     my ( $data, $server, $win ) = @_;
85
86     return unless &logged_in($twit);
87
88     $data =~ s/^\s+|\s+$//;
89     unless ($data) {
90         &notice("Usage: /tweet <update>");
91         return;
92     }
93
94     &cmd_tweet_as( "$user $data", $server, $win );
95 }
96
97 sub cmd_tweet_as {
98     my ( $data, $server, $win ) = @_;
99
100     return unless &logged_in($twit);
101
102     $data =~ s/^\s+|\s+$//;
103     my ( $username, $data ) = split ' ', $data, 2;
104
105     unless ( $username and $data ) {
106         &notice("Usage: /tweet_as <username> <update>");
107         return;
108     }
109
110     return unless &valid_username($username);
111
112     if ( Irssi::settings_get_str("short_url_provider") ) {<