view teh-lol.pl @ 9:037012a17457

An attempt to reset timestamps when manually lolling and change sleep with Xchat::hook_timer
author Jordi Gutiérrez Hermoso <jordigh@gmail.com>
date Mon, 24 May 2010 10:58:16 -0500
parents 2b8b0412096a
children c1bbeff37875
line wrap: on
line source

#Copyright © 2009 Jordi Gutiérrez Hermoso
#
#teh-lol.pl is free software: you can redistribute it and/or modify
#it under the terms of the GNU General Public License as published by
#the Free Software Foundation, either version 3 of the License, or
#(at your option) any later version.
#
#This program is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#GNU General Public License for more details.
#
#You should have received a copy of the GNU General Public License
#along with this program.  If not, see <http://www.gnu.org/licenses/>.

use strict;

Xchat::register('teh lol', '0.1.3', 'lols back');

Xchat::hook_print('Channel Message', \&check_lol);
Xchat::hook_print('Your Message', \&update_tstamp);

use Time::HiRes;

my %timestamp;

sub update_tstamp{
  if( $_[0][1] =~ /\b(lo+l)\b/i ){
    my $chan = Xchat::get_info("channel");
    $timestamp{$chan} = time;
  }
  return Xchat::EAT_NONE;
}

sub check_lol {
  my $chan = Xchat::get_info("channel");
  my $timesince_lasttalk = time - Xchat::user_info -> {'lasttalk'};

  #Two minutes of not saying anything in the channel counts as idling,
  #so don't pester when idling
  if ($_[0][1] =~ /\b(lo+l)\b/i and $timesince_lasttalk < 120) {

    my $lol = $1;

    my $relol;

    #Mimic long lols
    if (length $lol > 3 ) {
      my $numos = int rand(3);
      $numos += 3;
      $relol = "l".("o" x $numos)."l";
    }
    else {
      $relol = "lol";
    }


    #Don't lol more than once in 30 minutes.
    if ( time - $timestamp{$chan} > 1800 or
         undef $timestamp{$chan}
        ) {

      #Delay the response a little, for maximum annoyance.
      #( theoros's algorithm from #not-math )
      my $delay = 2.8;
      if (length($relol) > 3){
        $delay += ((length $relol) - 3 + rand(5)) * 0.069;
      }

      #Convert to microseconds.
      $delay *= 1e6;

      Xchat::hook_timer($delay, sub { Xchat::command("say $relol"); });
    }
    $timestamp{$chan} = time;
  }
  return Xchat::EAT_NONE;
}