Bot-BasicBot-Pluggable-Module-Fun

 view release on metacpan or  search on metacpan

lib/Bot/BasicBot/Pluggable/Module/Nickometer.pm  view on Meta::CPAN


    my $body = $mess->{body}; 
    my $who  = $mess->{who};

    return unless ($pri == 2);
    return unless  $body =~ /^\s*(?:lame|nick)-?o-?meter(?: for)? (\S+)/i;

    my $term = $1; $term = $who if (lc($term) eq 'me');

    
    my $percentage = percentage($term);
    

    if ($percentage =~ /NaN/) {
           $percentage = "off the scale";
    } else {
        #    $percentage = sprintf("%0.4f", $percentage);
        $percentage =~ s/\.0+$//;
        $percentage .= '%';
    }
    
    return "'$term' is $percentage lame, $who";
}

sub help {
    return "Commands: 'nickometer <nick>'";
}


sub percentage {
    local $_ = shift;

    my $score = 0;
    
    # Deal with special cases (precede with \ to prevent de-k3wlt0k)
    my %special_cost = (
                      '69'                      => 500,
                      'dea?th'                  => 500,
                      'dark'                    => 400,
                      'n[i1]ght'                => 300,

lib/Bot/BasicBot/Pluggable/Module/Nickometer.pm  view on Meta::CPAN

      $score += slow_pow(7, $caps) if $caps;

      # Now punish anything that's left
      my $remains = $_;
      $remains =~ tr/a-zA-Z0-9//d;
      my $remains_length = length($remains);

      $score += (50 * $remains_length + slow_pow(9, $remains_length)) if $remains;

      # Use an appropriate function to map [0, +inf) to [0, 100)
      my $percentage = 100 * 
                     (1 + tanh(($score-400)/400)) * 
                     (1 - 1/(1+$score/5)) / 2;

      my $digits = 2 * (2 - &round_up(log(100 - $percentage) / log(10)));

      return sprintf "%.${digits}f", $percentage;

}

sub case_shifts ($) {
  # This is a neat trick suggested by freeside.  Thanks freeside!

  my $shifts = shift;

  $shifts =~ tr/A-Za-z//cd;
  $shifts =~ tr/A-Z/U/s;



( run in 0.373 second using v1.01-cache-2.11-cpan-709fd43a63f )