use vars qw($VERSION %IRSSI);
-$VERSION = "2.1.3beta";
-my ($REV) = '$Rev: 551 $' =~ /(\d+)/;
+$VERSION = "2.2.1beta";
+my ($REV) = '$Rev: 599 $' =~ /(\d+)/;
%IRSSI = (
authors => 'Dan Boger',
contact => 'zigdon@gmail.com',
. 'Can optionally set your bitlbee /away message to same',
license => 'GNU GPL v2',
url => 'http://twirssi.com',
- changed => '$Date: 2009-03-15 18:00:12 -0700 (Sun, 15 Mar 2009) $',
+ changed => '$Date: 2009-04-07 07:49:19 -0700 (Tue, 07 Apr 2009) $',
);
my $window;
}
}
+sub cmd_retweet {
+ my ( $data, $server, $win ) = @_;
+
+ return unless &logged_in($twit);
+
+ $data =~ s/^\s+|\s+$//;
+ unless ($data) {
+ ¬ice("Usage: /retweet <nick[:num]> [comment]");
+ return;
+ }
+
+ my ( $id, $data ) = split ' ', $data, 2;
+
+ &cmd_retweet_as( "$user $id $data", $server, $win );
+}
+
+sub cmd_retweet_as {
+ my ( $data, $server, $win ) = @_;
+
+ unless ( Irssi::settings_get_bool("twirssi_track_replies") ) {
+ ¬ice("twirssi_track_replies is required in order to reteet.");
+ return;
+ }
+
+ return unless &logged_in($twit);
+
+ $data =~ s/^\s+|\s+$//;
+ my ( $username, $id, $data ) = split ' ', $data, 3;
+
+ unless ( $username ) {
+ ¬ice("Usage: /retweet_as <username> <nick[:num]> [comment]");
+ return;
+ }
+
+ return unless $username = &valid_username($username);
+
+ my $nick;
+ $id =~ s/[^\w\d\-:]+//g;
+ ( $nick, $id ) = split /:/, $id;
+ unless ( exists $id_map{ lc $nick } ) {
+ ¬ice("Can't find a tweet from $nick to retweet!");
+ return;
+ }
+
+ $id = $id_map{__indexes}{$nick} unless $id;
+ unless ( $id_map{ lc $nick }[$id] ) {
+ ¬ice("Can't find a tweet numbered $id from $nick to retweet!");
+ return;
+ }
+
+ unless ( $id_map{__tweets}{ lc $nick }[$id] ) {
+ ¬ice("The text of this tweet isn't saved, sorry!");
+ return;
+ }
+
+# Irssi::settings_add_str( "twirssi", "twirssi_retweet_format", 'RT $n: $t ${-- $c$}' );
+ my $text = Irssi::settings_get_str("twirssi_retweet_format");
+ $text =~ s/\$n/\@$nick/g;
+ if ($data) {
+ $text =~ s/\${|\$}//g;
+ $text =~ s/\$c/$data/;
+ } else {
+ $text =~ s/\${.*?\$}//;
+ }
+ $text =~ s/\$t/$id_map{__tweets}{ lc $nick }[$id]/;
+
+ $data = &shorten($text);
+
+ return if &too_long($data);
+
+ my $success = 1;
+ eval {
+ unless (
+ $twits{$username}->update(
+ {
+ status => $data,
+ in_reply_to_status_id => $id_map{ lc $nick }[$id]
+ }
+ )
+ )
+ {
+ ¬ice("Update failed");
+ $success = 0;
+ }
+ };
+ return unless $success;
+
+ if ($@) {
+ ¬ice("Update caused an error: $@. Aborted");
+ return;
+ }
+
+ foreach ( $data =~ /@([-\w]+)/ ) {
+ $nicks{$1} = time;
+ }
+
+ ¬ice("Retweet sent");
+}
+
sub cmd_tweet {
my ( $data, $server, $win ) = @_;
return;
}
- $data =~ s/^\s+|\s+$//;
my ( $id, $data ) = split ' ', $data, 2;
unless ( $id and $data ) {
- ¬ice("Usage: /reply_as <nick[:num]> <update>");
+ ¬ice("Usage: /reply <nick[:num]> <update>");
return;
}
if ($context) {
my $ctext = decode_entities( $context->{text} );
$ctext = &hilight($ctext);
+ if ( $context->{truncated} and ref($obj) ne 'Net::Identica' ) {
+ $ctext .=
+ " -- http://twitter.com/$context->{user}{screen_name}"
+ . "/status/$context->{id}";
+ }
printf $fh "id:%d account:%s nick:%s type:tweet %s\n",
$context->{id}, $username,
$context->{user}{screen_name}, $ctext;
- if ( $context->{truncated} and ref($obj) ne 'Net::Identica' ) {
- printf $fh "id:%s account:%s nick:%s type:ellispis %s\n",
- $context->{id} . "-url", $username,
- $context->{user}{screen_name},
-"http://twitter.com/$context->{user}{screen_name}/status/$context->{id}";
- }
$reply = "reply";
} elsif ($@) {
print $fh "type:debug request to get context failed: $@";
next
if $t->{user}{screen_name} eq $username
and not Irssi::settings_get_bool("show_own_tweets");
- printf $fh "id:%d account:%s nick:%s type:%s %s\n",
- $t->{id}, $username, $t->{user}{screen_name}, $reply, $text;
if ( $t->{truncated} and ref($obj) ne 'Net::Identica' ) {
- printf $fh "id:%s account:%s nick:%s type:ellispis %s\n",
- $t->{id} . "-url", $username,
- $t->{user}{screen_name},
- "http://twitter.com/$t->{user}{screen_name}/status/$t->{id}";
+ $text .= " -- http://twitter.com/$t->{user}{screen_name}"
+ . "/status/$t->{id}";
}
+ printf $fh "id:%d account:%s nick:%s type:%s %s\n",
+ $t->{id}, $username, $t->{user}{screen_name}, $reply, $text;
}
print scalar localtime, " - Polling for replies" if &debug;
my $text = decode_entities( $t->{text} );
$text = &hilight($text);
- printf $fh "id:%d account:%s nick:%s type:tweet %s\n",
- $t->{id}, $username, $t->{user}{screen_name}, $text;
if ( $t->{truncated} ) {
- printf $fh "id:%s account:%s nick:%s type:ellispis %s\n",
- $t->{id} . "-url", $username,
- $t->{user}{screen_name},
- "http://twitter.com/$t->{user}{screen_name}/status/$t->{id}";
+ $text .= " -- http://twitter.com/$t->{user}{screen_name}"
+ . "/status/$t->{id}";
}
+ printf $fh "id:%d account:%s nick:%s type:tweet %s\n",
+ $t->{id}, $username, $t->{user}{screen_name}, $text;
}
print scalar localtime, " - Polling for DMs" if &debug;
and $meta{id} )
{
$marker = ( $id_map{__indexes}{ $meta{nick} } + 1 ) % 100;
- $id_map{ lc $meta{nick} }[$marker] = $meta{id};
- $id_map{__indexes}{ $meta{nick} } = $marker;
- $marker = ":$marker";
+ $id_map{ lc $meta{nick} }[$marker] = $meta{id};
+ $id_map{__indexes}{ $meta{nick} } = $marker;
+ $id_map{__tweets}{ lc $meta{nick} }[$marker] = $_;
+ $marker = ":$marker";
}
my $hilight_color =
$irssi_to_mirc_colors{ Irssi::settings_get_str("hilight_color") };
- if ( ( $_ =~ /\@$meta{account}\W/i )
- && Irssi::settings_get_bool("twirssi_hilights") )
+ my $nick =
+ '@' . substr( $meta{account}, 0, index( $meta{account}, "@" ) );
+ if ( $_ =~ /\Q$nick\E(?:\W|$)/i
+ and Irssi::settings_get_bool("twirssi_hilights") )
{
$meta{nick} = "\cC$hilight_color$meta{nick}\cO";
$hilight = MSGLEVEL_HILIGHT;
( MSGLEVEL_PUBLIC | $hilight ),
$meta{type}, $account, $meta{nick}, $marker, $_
];
- } elsif ( $meta{type} eq 'ellispis' ) {
- push @lines,
- [ MSGLEVEL_PUBLIC, "tweet", $account, $meta{nick}, "", $_ ];
} elsif ( $meta{type} eq 'search' ) {
push @lines,
[
my ( $complist, $window, $word, $linestart, $want_space ) = @_;
if (
- $linestart =~ /^\/twitter_reply(?:_as)?\s*$/
+ $linestart =~ /^\/(?:retweet|twitter_reply)(?:_as)?\s*$/
or ( Irssi::settings_get_bool("twirssi_use_reply_aliases")
and $linestart =~ /^\/reply(?:_as)?\s*$/ )
)
Irssi::settings_add_str( "twirssi", "twirssi_default_service", "Twitter" );
Irssi::settings_add_str( "twirssi", "twirssi_nick_color", "%B" );
Irssi::settings_add_str( "twirssi", "twirssi_topic_color", "%r" );
+Irssi::settings_add_str( "twirssi", "twirssi_retweet_format",
+ 'RT $n: "$t" ${-- $c$}' );
Irssi::settings_add_str( "twirssi", "twirssi_location",
".irssi/scripts/twirssi.pl" );
Irssi::settings_add_str( "twirssi", "twirssi_replies_store",
Irssi::command_bind( "dm_as", "cmd_direct_as" );
Irssi::command_bind( "tweet", "cmd_tweet" );
Irssi::command_bind( "tweet_as", "cmd_tweet_as" );
+ Irssi::command_bind( "retweet", "cmd_retweet" );
+ Irssi::command_bind( "retweet_as", "cmd_retweet_as" );
Irssi::command_bind( "twitter_reply", "cmd_reply" );
Irssi::command_bind( "twitter_reply_as", "cmd_reply_as" );
Irssi::command_bind( "twitter_login", "cmd_login" );