parent
3cac5142f1
commit
2627ee4784
@ -0,0 +1,138 @@ |
|||||||
|
use strict; |
||||||
|
use warnings qw( all ); |
||||||
|
use vars qw($VERSION %IRSSI); |
||||||
|
|
||||||
|
use Irssi; |
||||||
|
$VERSION = '20070322'; |
||||||
|
%IRSSI = ( |
||||||
|
authors => 'sneak for #bantown', |
||||||
|
contact => 'sneak@datavibe.net', |
||||||
|
name => 'bizzybotte', |
||||||
|
description => 'this script makes you sound like bizzy.', |
||||||
|
license => 'Public Domain', |
||||||
|
); |
||||||
|
|
||||||
|
sub send_text { |
||||||
|
|
||||||
|
#"send text", char *line, SERVER_REC, WI_ITEM_REC |
||||||
|
my ( $data, $server, $witem ) = @_; |
||||||
|
if ( $witem |
||||||
|
&& ( $witem->{type} eq "CHANNEL" ) |
||||||
|
&& $data |
||||||
|
) |
||||||
|
{ |
||||||
|
$witem->command("msg $witem->{name} " . fuckestring($data)); |
||||||
|
Irssi::signal_stop(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
sub fuckestring ($) { |
||||||
|
my $string; |
||||||
|
if(@_) { |
||||||
|
$string = shift; |
||||||
|
} else { |
||||||
|
$string = $_; |
||||||
|
} |
||||||
|
return '' unless $string; |
||||||
|
my @things = parseline($string); |
||||||
|
my $out; |
||||||
|
foreach my $thing (@things) { |
||||||
|
if($thing->{'type'} eq 'word') { |
||||||
|
my $word = suffixword($thing->{'content'}); |
||||||
|
$word = uc($word) |
||||||
|
if |
||||||
|
uc($thing->{'content'}) eq $thing->{'content'}; |
||||||
|
$out .= $word; |
||||||
|
} else { |
||||||
|
$out .= $thing->{'content'}; |
||||||
|
} |
||||||
|
} |
||||||
|
return $out; |
||||||
|
} |
||||||
|
|
||||||
|
sub parseline { |
||||||
|
local $_ = shift; |
||||||
|
return unless $_; |
||||||
|
my @sentence; |
||||||
|
until (/\G$/gc) { # until pos at end of string |
||||||
|
if (/\G([A-Za-z']+)/gc) { |
||||||
|
push @sentence, { type => 'word', 'content' => $1 }; |
||||||
|
} elsif (/\G([^A-Za-z']+)/gc) { |
||||||
|
push @sentence, { type => 'other', 'content' => $1} ; |
||||||
|
} |
||||||
|
} |
||||||
|
return @sentence; |
||||||
|
} |
||||||
|
|
||||||
|
sub suffixword { |
||||||
|
local $_ = shift; |
||||||
|
return unless $_; |
||||||
|
|
||||||
|
return('lolle') if lc($_) eq 'lol'; |
||||||
|
return('butte') if lc($_) eq 'but'; |
||||||
|
|
||||||
|
# some simple skips: |
||||||
|
my $tmp = lc($_); |
||||||
|
$tmp =~ s/[^a-z]//g; |
||||||
|
return $_ if length($tmp) < 4; |
||||||
|
#foreach my $skip (qw( |
||||||
|
# bad heh ooh |
||||||
|
#)) { |
||||||
|
# return $_ if $tmp eq $skip; |
||||||
|
#} |
||||||
|
|
||||||
|
# skip rules: |
||||||
|
foreach my $suf (qw( e ng ing ed es ah l er )) { |
||||||
|
if(/$suf[sS]*$/i) { |
||||||
|
return $_; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
my $out = $_; |
||||||
|
|
||||||
|
# special cases where a consonant gets doubled |
||||||
|
return('whatte') if ($tmp eq 'what'); |
||||||
|
|
||||||
|
# letters that end words that get doubled |
||||||
|
# i.e. l as in 'lol'->'lolle' |
||||||
|
foreach my $suf (qw( l g m n et p r )) { |
||||||
|
if(/${suf}[sS]*$/i) { |
||||||
|
return double_laste($_); |
||||||
|
} else { |
||||||
|
next; |
||||||
|
} |
||||||
|
return $out; |
||||||
|
} |
||||||
|
|
||||||
|
# letters that end words that just get 'e' |
||||||
|
# i.e. k as in 'fuck'->'fucke' |
||||||
|
foreach my $suf (qw( d k h t )) { |
||||||
|
if(/$suf[sS]*$/i) { |
||||||
|
return single_laste($_); |
||||||
|
} else { |
||||||
|
next; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
# if we got this far, just return the original word unmodified |
||||||
|
return $_; |
||||||
|
} |
||||||
|
|
||||||
|
sub single_laste { |
||||||
|
local $_ = shift; |
||||||
|
my $s = ''; |
||||||
|
if(/s$/i) { $s = 's'; s/s$//; } |
||||||
|
return($_ . 'e' .$s); |
||||||
|
} |
||||||
|
|
||||||
|
sub double_laste { |
||||||
|
local $_ = shift; |
||||||
|
my $s = ''; |
||||||
|
if(/s$/i) { $s = 's'; s/s$//; } |
||||||
|
/([a-zA-Z])$/; |
||||||
|
my $last = $1; |
||||||
|
$last = '' if /${last}${last}$/; |
||||||
|
return($_ . $last . 'e' . $s); |
||||||
|
} |
||||||
|
|
||||||
|
Irssi::signal_add('send text' => 'send_text'); |
Loading…
Reference in new issue