151 lines
4.5 KiB
Perl
151 lines
4.5 KiB
Perl
|
#{{{ BSD License
|
||
|
# Copyright (c) 2008 hzu/zionist
|
||
|
# All rights reserved.
|
||
|
#
|
||
|
# Redistribution and use in source and binary forms, with or
|
||
|
# without modification, are permitted provided that the following
|
||
|
# conditions are met:
|
||
|
#
|
||
|
# 1. Redistributions of source code must retain the above copyright
|
||
|
# notice, this list of conditions and the following disclaimer.
|
||
|
# 2. The name of the author may not be used to endorse or promote products
|
||
|
# derived from this software without specific prior written permission.
|
||
|
#
|
||
|
# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||
|
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
||
|
# AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
||
|
# THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||
|
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||
|
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||
|
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||
|
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||
|
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||
|
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||
|
#}}}
|
||
|
|
||
|
# Ported from irssi to WeeChat by the Krusty Krab
|
||
|
|
||
|
use strict;
|
||
|
use warnings;
|
||
|
no strict 'subs';
|
||
|
|
||
|
my $SCRIPT_NAME = 'colourflood';
|
||
|
my $SCRIPT_AUTHOR = 'hzu';
|
||
|
my $SCRIPT_VERSION = '0.3';
|
||
|
my $SCRIPT_LICENCE = 'BSD';
|
||
|
my $SCRIPT_DESC = 'A-rab style ircing';
|
||
|
|
||
|
my $USAGE = <<EOF;
|
||
|
options:
|
||
|
-r Random back & foreground colours (default)
|
||
|
-f Amount of times the message is flooded
|
||
|
-fg font colour, available colours:
|
||
|
black, blue, green
|
||
|
lightred, red, magenta, orange
|
||
|
yellow, lightgreen, cyan,
|
||
|
lightcyan, lightblue,
|
||
|
lightmagenta, gray, lightgray.
|
||
|
-bg background colour, available colours:
|
||
|
black, blue, green, red,
|
||
|
magenta, orange, green, cyan,
|
||
|
lightcyan, lightblue,
|
||
|
lightmagenta, gray, lightgray
|
||
|
EOF
|
||
|
|
||
|
our %clr = (
|
||
|
black => 1,
|
||
|
blue => 2,
|
||
|
green => 3,
|
||
|
lightred => 4,
|
||
|
red => 5,
|
||
|
magenta => 6,
|
||
|
orange => 7,
|
||
|
yellow => 8,
|
||
|
lightgreen => 9,
|
||
|
cyan => 10,
|
||
|
lightcyan => 11,
|
||
|
lightblue => 12,
|
||
|
lightmagenta => 13,
|
||
|
gray => 14,
|
||
|
lightgray => 15,
|
||
|
);
|
||
|
|
||
|
if (weechat::register($SCRIPT_NAME, $SCRIPT_AUTHOR, $SCRIPT_VERSION,
|
||
|
$SCRIPT_LICENCE, $SCRIPT_DESC, '', '')) {
|
||
|
weechat::hook_command('cflood', $SCRIPT_DESC, '[options] text',
|
||
|
$USAGE, '', 'cmd_cflood', '');
|
||
|
|
||
|
my %OPTIONS = (
|
||
|
dir => ['Database directory',
|
||
|
weechat::info_get('weechat_dir', '').'/yiffs'],
|
||
|
db => ['Default database', 'yiffs'],
|
||
|
solodb => ['Default database when nick is omitted', 'solos'],
|
||
|
);
|
||
|
|
||
|
for my $option (keys %OPTIONS) {
|
||
|
weechat::config_set_plugin($option, $OPTIONS{$option}[1])
|
||
|
unless weechat::config_is_set_plugin($option);
|
||
|
weechat::config_set_desc_plugin($option, $OPTIONS{$option}[0]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
sub colour {
|
||
|
my ($fg, $bg, $text) = @_;
|
||
|
my $fore = ($fg =~ /^[0-9][0-9]?$/) ? $fg : $clr{$fg};
|
||
|
my $back = ($fg =~ /^[0-9][0-9]?$/) ? $bg : $clr{$bg};
|
||
|
$fore-- if $fore == $back;
|
||
|
$text = "\003$fore,$back $text \003$back,$fore $text ";
|
||
|
$text x= (int 400 / length $text);
|
||
|
return "$text\003";
|
||
|
}
|
||
|
|
||
|
sub parse {
|
||
|
my @args = ( split / +/, shift );
|
||
|
my ( %todo, $text, $body );
|
||
|
|
||
|
while ( ($_ = shift @args) ne '' ) {
|
||
|
/^-r$/ and next;
|
||
|
/^-f$/ and $todo{f} = shift @args, next;
|
||
|
/^-fg$/ and $todo{fg} = shift @args, next;
|
||
|
/^-bg$/ and $todo{bg} = shift @args, next;
|
||
|
/^-/ and weechat::print('', weechat::prefix('error').
|
||
|
'Invalid arguments (see /help cflood)'), return;
|
||
|
$text = @args < 1 ? $_ : "$_ " . join ' ', @args;
|
||
|
last;
|
||
|
}
|
||
|
|
||
|
if (!(defined $todo{fg}) || !(defined $todo{bg})) {
|
||
|
$body = "";
|
||
|
my @rnd_clr = keys %clr;
|
||
|
foreach ( 1 .. (defined $todo{f} ? $todo{f} : 1 ) ) {
|
||
|
$body .= colour($rnd_clr[rand @rnd_clr],
|
||
|
$rnd_clr[rand @rnd_clr], $text, $todo{f});
|
||
|
$body .= "\n";
|
||
|
}
|
||
|
} else {
|
||
|
$body = "";
|
||
|
foreach ( 1 .. (defined $todo{f} ? $todo{f} : 1 ) ) {
|
||
|
$body .= colour( $todo{fg}, $todo{bg}, $text );
|
||
|
$body .= "\n";
|
||
|
}
|
||
|
}
|
||
|
return $body;
|
||
|
}
|
||
|
|
||
|
sub cmd_cflood {
|
||
|
my (undef, $buffer, $data) = @_;
|
||
|
my $ret;
|
||
|
|
||
|
return weechat::WEECHAT_RC_OK if ($data eq '');
|
||
|
|
||
|
chomp( $ret = parse($data) );
|
||
|
|
||
|
if ($ret =~ /\n/) {
|
||
|
map { weechat::command($buffer, "/msg * $_") } (split /\n/, $ret);
|
||
|
} else {
|
||
|
weechat::command($buffer, "/msg * $ret");
|
||
|
}
|
||
|
|
||
|
return weechat::WEECHAT_RC_OK;
|
||
|
}
|