<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -11,7 +11,7 @@ $Data::Dumper::Indent = 1;
 use vars qw($VERSION %IRSSI);
 
 $VERSION = &quot;2.2.1beta&quot;;
-my ($REV) = '$Rev: 569 $' =~ /(\d+)/;
+my ($REV) = '$Rev: 597 $' =~ /(\d+)/;
 %IRSSI = (
     authors     =&gt; 'Dan Boger',
     contact     =&gt; 'zigdon@gmail.com',
@@ -20,7 +20,7 @@ my ($REV) = '$Rev: 569 $' =~ /(\d+)/;
       . 'Can optionally set your bitlbee /away message to same',
     license =&gt; 'GNU GPL v2',
     url     =&gt; 'http://twirssi.com',
-    changed =&gt; '$Date: 2009-03-19 11:44:03 -0700 (Thu, 19 Mar 2009) $',
+    changed =&gt; '$Date: 2009-04-05 19:22:22 -0700 (Sun, 05 Apr 2009) $',
 );
 
 my $window;
@@ -104,6 +104,105 @@ sub cmd_direct_as {
     }
 }
 
+sub cmd_retweet {
+    my ( $data, $server, $win ) = @_;
+
+    return unless &amp;logged_in($twit);
+
+    $data =~ s/^\s+|\s+$//;
+    unless ($data) {
+        &amp;notice(&quot;Usage: /retweet &lt;nick[:num]&gt; [comment]&quot;);
+        return;
+    }
+
+    my ( $id, $data ) = split ' ', $data, 2;
+
+    &amp;cmd_retweet_as( &quot;$user $id $data&quot;, $server, $win );
+}
+
+sub cmd_retweet_as {
+    my ( $data, $server, $win ) = @_;
+
+    unless ( Irssi::settings_get_bool(&quot;twirssi_track_replies&quot;) ) {
+        &amp;notice(&quot;twirssi_track_replies is required in order to reteet.&quot;);
+        return;
+    }
+
+    return unless &amp;logged_in($twit);
+
+    $data =~ s/^\s+|\s+$//;
+    my ( $username, $id, $data ) = split ' ', $data, 3;
+
+    unless ( $username ) {
+        &amp;notice(&quot;Usage: /retweet_as &lt;username&gt; &lt;nick[:num]&gt; [comment]&quot;);
+        return;
+    }
+
+    return unless $username = &amp;valid_username($username);
+
+    my $nick;
+    $id =~ s/[^\w\d\-:]+//g;
+    ( $nick, $id ) = split /:/, $id;
+    unless ( exists $id_map{ lc $nick } ) {
+        &amp;notice(&quot;Can't find a tweet from $nick to retweet!&quot;);
+        return;
+    }
+
+    $id = $id_map{__indexes}{$nick} unless $id;
+    unless ( $id_map{ lc $nick }[$id] ) {
+        &amp;notice(&quot;Can't find a tweet numbered $id from $nick to retweet!&quot;);
+        return;
+    }
+
+    unless ( $id_map{__tweets}{ lc $nick }[$id] ) {
+        &amp;notice(&quot;The text of this tweet isn't saved, sorry!&quot;);
+        return;
+    }
+
+# Irssi::settings_add_str( &quot;twirssi&quot;, &quot;twirssi_retweet_format&quot;, 'RT $n: $t ${-- $c$}' );
+    my $text = Irssi::settings_get_str(&quot;twirssi_retweet_format&quot;);
+    $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 = &amp;shorten($text);
+
+    return if &amp;too_long($data);
+
+    my $success = 1;
+    eval {
+        unless (
+            $twits{$username}-&gt;update(
+                {
+                    status                =&gt; $data,
+                    in_reply_to_status_id =&gt; $id_map{ lc $nick }[$id]
+                }
+            )
+          )
+        {
+            &amp;notice(&quot;Update failed&quot;);
+            $success = 0;
+        }
+    };
+    return unless $success;
+
+    if ($@) {
+        &amp;notice(&quot;Update caused an error: $@.  Aborted&quot;);
+        return;
+    }
+
+    foreach ( $data =~ /@([-\w]+)/ ) {
+        $nicks{$1} = time;
+    }
+
+    &amp;notice(&quot;Retweet sent&quot;);
+}
+
 sub cmd_tweet {
     my ( $data, $server, $win ) = @_;
 
@@ -173,10 +272,9 @@ sub cmd_reply {
         return;
     }
 
-    $data =~ s/^\s+|\s+$//;
     my ( $id, $data ) = split ' ', $data, 2;
     unless ( $id and $data ) {
-        &amp;notice(&quot;Usage: /reply_as &lt;nick[:num]&gt; &lt;update&gt;&quot;);
+        &amp;notice(&quot;Usage: /reply &lt;nick[:num]&gt; &lt;update&gt;&quot;);
         return;
     }
 
@@ -926,9 +1024,10 @@ sub monitor_child {
                 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                            = &quot;:$marker&quot;;
+                $id_map{ lc $meta{nick} }[$marker]           = $meta{id};
+                $id_map{__indexes}{ $meta{nick} }            = $marker;
+                $id_map{__tweets}{ lc $meta{nick} }[$marker] = $_;
+                $marker                                      = &quot;:$marker&quot;;
             }
 
             my $hilight_color =
@@ -1160,7 +1259,7 @@ sub sig_complete {
     my ( $complist, $window, $word, $linestart, $want_space ) = @_;
 
     if (
-        $linestart =~ /^\/twitter_reply(?:_as)?\s*$/
+        $linestart =~ /^\/(?:retweet|twitter_reply)(?:_as)?\s*$/
         or ( Irssi::settings_get_bool(&quot;twirssi_use_reply_aliases&quot;)
             and $linestart =~ /^\/reply(?:_as)?\s*$/ )
       )
@@ -1310,6 +1409,8 @@ Irssi::settings_add_str( &quot;twirssi&quot;, &quot;twitter_passwords&quot;,       undef );
 Irssi::settings_add_str( &quot;twirssi&quot;, &quot;twirssi_default_service&quot;, &quot;Twitter&quot; );
 Irssi::settings_add_str( &quot;twirssi&quot;, &quot;twirssi_nick_color&quot;,      &quot;%B&quot; );
 Irssi::settings_add_str( &quot;twirssi&quot;, &quot;twirssi_topic_color&quot;,     &quot;%r&quot; );
+Irssi::settings_add_str( &quot;twirssi&quot;, &quot;twirssi_retweet_format&quot;,
+    'RT $n: &quot;$t&quot; ${-- $c$}' );
 Irssi::settings_add_str( &quot;twirssi&quot;, &quot;twirssi_location&quot;,
     &quot;.irssi/scripts/twirssi.pl&quot; );
 Irssi::settings_add_str( &quot;twirssi&quot;, &quot;twirssi_replies_store&quot;,
@@ -1346,6 +1447,8 @@ if ($window) {
     Irssi::command_bind( &quot;dm_as&quot;,                      &quot;cmd_direct_as&quot; );
     Irssi::command_bind( &quot;tweet&quot;,                      &quot;cmd_tweet&quot; );
     Irssi::command_bind( &quot;tweet_as&quot;,                   &quot;cmd_tweet_as&quot; );
+    Irssi::command_bind( &quot;retweet&quot;,                    &quot;cmd_retweet&quot; );
+    Irssi::command_bind( &quot;retweet_as&quot;,                 &quot;cmd_retweet_as&quot; );
     Irssi::command_bind( &quot;twitter_reply&quot;,              &quot;cmd_reply&quot; );
     Irssi::command_bind( &quot;twitter_reply_as&quot;,           &quot;cmd_reply_as&quot; );
     Irssi::command_bind( &quot;twitter_login&quot;,              &quot;cmd_login&quot; );</diff>
      <filename>twirssi.pl</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>108f9ee00b45b3e0d85c06684d158675828c6364</id>
    </parent>
  </parents>
  <author>
    <name>Dan Boger</name>
    <login></login>
    <email>zigdon@irc.peeron.com</email>
  </author>
  <url>http://github.com/bssteph/twirssi/commit/2fa1c083e78f8424ace8f5841629fb42a039cefc</url>
  <id>2fa1c083e78f8424ace8f5841629fb42a039cefc</id>
  <committed-date>2009-04-05T19:22:53-07:00</committed-date>
  <authored-date>2009-04-05T19:22:53-07:00</authored-date>
  <message>r597 - Add a /retweet and /retweet_as commands.</message>
  <tree>8ac978ac5777ae409249489fcf9b9117c1b65b9d</tree>
  <committer>
    <name>Dan Boger</name>
    <login></login>
    <email>zigdon@irc.peeron.com</email>
  </committer>
</commit>
