summaryrefslogtreecommitdiffstats
path: root/scripts/binary.pl
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--scripts/binary.pl114
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");