diff options
Diffstat (limited to 'scripts/binary.pl')
| -rw-r--r-- | scripts/binary.pl | 114 | 
1 files changed, 114 insertions, 0 deletions
| diff --git a/scripts/binary.pl b/scripts/binary.pl new file mode 100644 index 0000000..1eb374a --- /dev/null +++ b/scripts/binary.pl @@ -0,0 +1,114 @@ +# /binary huora +# tuolostaa k.o. ikkunaan huora:n sijaan 01101001 .... +# +# and modified by carl 2004-03-09 + +# Changelog +# Version 1: original version by nchip +# Version 1.1: added unbinary function +# Verison 1.2: added server truncate detection (requested by André, thanks for spotting the problem) and choice to have spaces in the binary or not (reqested by Tapio) + + +use strict; +use Irssi; +use Irssi qw(command_bind command signal_add_last signal_stop settings_get_bool settings_add_bool); + +use vars qw($VERSION %IRSSI); + +#%IRSSI = ( +#        authors     => "Riku Voipio", +#        contact     => "riku.voipio\@iki.fi", +#        name        => "binary", +#        description => "adds /binary command that converts what you type into 2-base string representation", +#        license     => "GPLv2", +#        url         => "http://nchip.ukkosenjyly.mine.nu/irssiscripts/", +#    ); + +$VERSION = "1.2"; +%IRSSI = ( +        authors     => "Carl Fischer", +        contact     => "carl.fischer\@netcourrier.com", +        name        => "binary", +        description => "adds /binary command that converts what you type into 2-base string representation, also decodes other peoples binary automatically", +        license     => "GPLv2", +	  ); + + +sub cmd_binary { +	$_=join(" ",$_[0]); +	$_=reverse; +	my (@r); +	if (settings_get_bool('binary_spaces')) { +	    $r[0]="/say"; +	} else { +	    $r[0]="/say "; +	} +	while ($a = chop($_)) { +	    push (@r,unpack ("B*", $a));} +	 +	my $window = Irssi::active_win(); +	if (settings_get_bool('binary_spaces')) { +	    $window->command(join (" ",@r)); +	} else { +	    $window->command(join ("",@r)); +	} +    } + +# here ends the original code +# some of the following was strongly inspired by the kenny script + +sub cmd_unbinary { +    pop @_; +    pop @_; +    my $window = Irssi::active_win(); +    $window->print(unbinary($_[0])); +} + +sub unbinary { +    my $r; +    if (settings_get_bool('binary_spaces')) { +	$r=pack("B*", join ("", split(" ", @_[0]))); +    } else { +	$r=pack("B*", @_[0]); +    } +    return $r; +} + +sub sig_binary { +    my ($server, $msg, $nick, $address, $target) = @_; +    if (($msg=~m/^([01]{8}( [01]{8})*)( [01]{1,7})*$/ and settings_get_bool('binary_spaces')) or ($msg=~m/^([01]{8}([01]{8})*)([01]{1,7})*$/ and not settings_get_bool('binary_spaces'))) { +	my $leftover=""; +	$leftover="* (truncated by server)" if $3; +	$target=$nick if $target eq ""; +	# the address may _never_ be emtpy, if it is its own_public +	$nick=$server->{'nick'} if $address eq ""; +	$server->window_item_find($target)->print("[binary] <$nick> " . +						  unbinary($1) . $leftover, 'MSGLEVEL_CRAP'); +	signal_stop() if not settings_get_bool('show_binary_too'); +    } +} + +signal_add_last('message own_public',  'sig_binary'); +signal_add_last('message public',      'sig_binary'); +signal_add_last('message own_private', 'sig_binary'); +signal_add_last('message private',     'sig_binary'); + +settings_add_bool('lookandfeel', 'show_binary_too', 0); +settings_add_bool('lookandfeel', 'binary_spaces', 1); + +Irssi::command_bind('binary', 'cmd_binary'); +Irssi::command_bind('unbinary', 'cmd_unbinary'); + +Irssi::print("binary obfuscator vanity script loaded"); +Irssi::print("written by nchip and updated by carl"); +Irssi::print("--------------------------------------"); +Irssi::print("/binary message"); +Irssi::print("will send binary text to the current channel"); +Irssi::print(""); +Irssi::print("/unbinary obfuscated_text"); +Irssi::print("will print the unobfuscated equivalent to your window (and not to the channel)"); +Irssi::print(""); +Irssi::print("/set show_binary_too on"); +Irssi::print("will make this script print the binary equivalent as well as the translation to your screen whenever someone uses binary on the channel"); +Irssi::print("/set binary_spaces off"); +Irssi::print("will make the binary be printed as a single word with no spaces"); | 
