Advertisement
mkv

have some perl

mkv
Jul 24th, 2012
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 4.62 KB | None | 0 0
  1. #!/usr/bin/perl
  2. use utf8;
  3. use Date::Parse;
  4.  
  5. use Irssi;
  6. use vars qw($VERSION %IRSSI);
  7.  
  8. $VERSION = "1.0";
  9. %IRSSI = (
  10.     authors => 'ed',
  11.     contact => 'rizon.net',
  12.     name => 'reminder',
  13.     description => 'see name',
  14.     license => 'GNU GPL v2 explicitly',
  15.     url => 'http://r-a-d.io/ed/'
  16. );
  17.  
  18. @rem = ();
  19. $remn = 0;
  20. use constant TIM => 0;
  21. use constant SRC => 1;
  22. use constant DST => 2;
  23. use constant CHN => 3;
  24. use constant MSG => 4;
  25. use constant HIL => 5;
  26. # tim, src, dst, chn, msg, hil
  27.  
  28. sub state_save {
  29.     return;
  30. }
  31.  
  32. sub recase {
  33.     my ($server, $target, $nock) = @_;
  34.     my @li = ();
  35.     my $ch = $server->channel_find($target);
  36.     foreach my $dick ($ch->nicks())
  37.     {
  38.         $nick = $dick->{'nick'};
  39.         if ($nock eq lc($nick))
  40.         {
  41.             return $nick;
  42.         }
  43.     }
  44.     return '.';
  45. }
  46. sub event_privmsg {
  47.     my ($server, $data, $nick, $mask, $target) =@_;
  48.     my ($target, $text) = $data =~ /^(\S*)\s:(.*)/;
  49.  
  50.     $time = time();
  51.     $nock = lc($nick);
  52.     for ($n = 0; $n < $remn; $n += 6)
  53.     {
  54.         if ($time >= $rem[$n+TIM] &&
  55.             (
  56.                 $rem[$n+HIL] == 1 ||
  57.                 $rem[$n+DST] eq $nock
  58.             )
  59.         )
  60.         {
  61.             $nuck = recase($server, $rem[$n+CHN], $rem[$n+DST]);
  62.             $nuck = $nick if ($nuck eq '.' && $rem[$n+DST] eq $nock);
  63.             #print "$rem[$n+TIM] - src:$rem[$n+SRC] - dst:$rem[$n+DST] - chn:$rem[$n+CHN] - msg:$rem[$n+MSG] - hil:$rem[$n+HIL] - nuck:$nuck";
  64.             next if ($nuck eq '.');
  65.             my $msg = "$nuck, ";
  66.             if ($rem[$n+HIL] == 0)
  67.             {
  68.                 $msg = "Oh, $nuck! ";
  69.             }
  70.             $from = $rem[$n+SRC];
  71.             $from = 'you' if (lc($from) eq $rem[$n+DST]);
  72.             $msg .= "$from wanted me to remind you ";
  73.             $msg .= $rem[$n+MSG];
  74.             $msgto = $rem[$n+CHN];
  75.             print " -!- REMINDER -!- $msgto -> $msg";
  76.             $server->command("msg $msgto $msg");
  77.             splice(@rem, $n, 6);
  78.             $remn = @rem;
  79.             state_save();
  80.         }
  81.     }
  82.     $do_t = 0; #target
  83.     $do_a = 0; #argument
  84.     $do_r = 0; #remind
  85.     $do_h = 0; #hilight
  86.  
  87.     if ($text =~ /^-([^ ]*) ([^ ]*) ([^ ]*) (.*)/)
  88.     {
  89.         $do_r = 1 if ($1 eq 'remind' && $3 eq 'in');
  90.         $do_r = 2 if ($1 eq 'remind' && $3 eq 'on');
  91.         $do_h = 1 if ($1 eq 'hilight' && $3 eq 'in');
  92.         $do_h = 2 if ($1 eq 'hilight' && $3 eq 'on');
  93.         $do_t = lc($2);
  94.         $do_a = $4;
  95.  
  96.         if ($do_t eq 'me')
  97.         {
  98.             $do_t = $nock;
  99.         }
  100.     }
  101.     if ($do_r == 1 || $do_h == 1) #in
  102.     {
  103.         $dur = 0;
  104.         while (1==1)
  105.         {
  106.             #print " -!- args: '$do_a'";
  107.             if ($do_a =~ /^and /)
  108.             {
  109.                 $do_a = substr $do_a, 4;
  110.                 next;
  111.             }
  112.             last if $do_a !~ /^([0-9][0-9]*) ([a-z][^ ]*) /;
  113.             $num = $1;
  114.             $den = $2;
  115.             $do_a = substr $do_a, length($num) + length($den) + 2;
  116.             $den =~ s/,$//;
  117.             $den =~ s/s$//;
  118.             $mul = 0;
  119.             if ($den eq 'second') { $mul = 1; }
  120.             if ($den eq 'minute') { $mul = 60; }
  121.             if ($den eq 'hour')   { $mul = 60*60; }
  122.             if ($den eq 'day')    { $mul = 60*60*24; }
  123.             if ($den eq 'week')   { $mul = 60*60*24*4; }
  124.             if ($den eq 'month')  { $mul = 60*60*24*30.43685; }
  125.             if ($den eq 'year')   { $mul = 60*60*24*365.2422; }
  126.             if ($mul == 0)
  127.             {
  128.                 $err = "Bad denominator: $den";
  129.                 print " -!- REMINDER -!- $err";
  130.                 $server->command("msg $target Oh dear. $err");
  131.                 return;
  132.             }
  133.             $dur += $mul * $num;
  134.         }
  135.         $dur = int($dur);
  136.         $abs = $time + $dur;
  137.         push(@rem, ($abs, $nick, $do_t, $target, $do_a, $do_h));
  138.         $remn = @rem;
  139.  
  140.         @weekday = ("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
  141.         ($gsec,$gmin,$ghour,$gday,$gmon,$gyear,$gwday,$gyday,$gdst) = gmtime($abs);
  142.         $human = sprintf("%d-%02d-%02d (%s) %02d:%02d:%02d",
  143.             $gyear + 1900, $gmon, $gday, $weekday[$gwday], $ghour, $gmin, $gsec
  144.         );
  145.         $prt = "よし! I'll remind ";
  146.         $prt .= 'you' if ($do_t eq $nock);
  147.         $prt .= $do_t if ($do_t ne $nock);
  148.         $prt .= " about that on $human - in $dur seconds (☞゚∀゚)☞";
  149.         $server->command("msg $target $prt");
  150.         print " -!- REMINDER -!- $text";
  151.         return;
  152.     }
  153. }
  154. Irssi::signal_add('event privmsg', 'event_privmsg');
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement