diff options
| author | Alexander Færøy | 2014-05-31 13:10:46 +0200 | 
|---|---|---|
| committer | Alexander Færøy | 2014-05-31 13:10:46 +0200 | 
| commit | 2d0759e6ca5767b48bcc85bf38c2c43d5f0b63b1 (patch) | |
| tree | 1c5e6d817c88e67b46e216a50e0aef5428bf63df /scripts/forward.pl | |
| parent | 2d080422d79d1fd49d6c5528593ccaaff9bfc583 (diff) | |
| download | scripts.irssi.org-2d0759e6ca5767b48bcc85bf38c2c43d5f0b63b1.tar.bz2 | |
Import scripts from scripts.irssi.org
Diffstat (limited to 'scripts/forward.pl')
| -rw-r--r-- | scripts/forward.pl | 128 | 
1 files changed, 128 insertions, 0 deletions
| diff --git a/scripts/forward.pl b/scripts/forward.pl new file mode 100644 index 0000000..4fcb31b --- /dev/null +++ b/scripts/forward.pl @@ -0,0 +1,128 @@ +#!/usr/bin/perl +# + +use strict; +use vars qw($VERSION %IRSSI); +$VERSION = '2003071904'; +%IRSSI = ( +    authors     => 'Stefan \'tommie\' Tomanek', +    contact     => 'stefan@pico.ruhr.de', +    name        => 'Forward', +    description => 'forward incoming messages to another nick', +    license     => 'GPLv2', +    url         => 'http://irssi.org/scripts/', +    changed     => $VERSION, +    modules     => '', +    commands    => "forward" +); + +use Irssi 20020324; + +use vars qw(%forwards); + +sub show_help() { +    my $help = $IRSSI{name}." ".$VERSION." +/forward to <nick> +    Forward incoming messages to <nick> +/forward remove +    Disable forwarding in the current chatnet + +You can remotely en- or disable forwarding by sending an +ctcp command to your client. Set a password and use + /CTCP <nickname> forward <password> +or + /CTCP <nickname> noforward +to enable or diable forwarding to your current nick. +"; +    my $text=''; +    foreach (split(/\n/, $help)) { +        $_ =~ s/^\/(.*)$/%9\/$1%9/; +        $text .= $_."\n"; +    }    +    print CLIENTCRAP &draw_box($IRSSI{name}, $text, $IRSSI{name}." help", 1); +} + +sub draw_box ($$$$) { +    my ($title, $text, $footer, $colour) = @_; +    my $box = ''; +    $box .= '%R,--[%n%9%U'.$title.'%U%9%R]%n'."\n"; +    foreach (split(/\n/, $text)) { +        $box .= '%R|%n '.$_."\n"; +    } +    $box .= '%R`--<%n'.$footer.'%R>->%n'; +    $box =~ s/%.//g unless $colour; +    return $box; +} + +sub sig_message_private ($$$$) { +    my ($server, $msg, $nick, $address) = @_; +    my $chatnet = $server->{chatnet}; +    return unless defined $forwards{$chatnet}; +    if ($forwards{$chatnet}{active}) { +	my $to = $forwards{$chatnet}{to}; +	my $text = "[forwarded MSG from ".$nick."] ".$msg; +	$server->command("notice $to ".$text); +    } +} + +sub sig_ctcp_msg_forward ($$$$$) { +    my ($server, $args, $nick, $address, $target) = @_; +    my $pass = Irssi::settings_get_str('forward_remote_password'); +    unless ($pass) { +	print CLIENTCRAP '%R>>%n No forward password set, forwarding not enabled!'; +	$server->command("nctcp ".$nick." FORWARD Forwarding forbidden!"); +	return 0; +    } +    if ($pass eq $args) { +	$server->command("nctcp ".$nick." FORWARD Forwarding enabled"); +	set_forward($server->{chatnet}, $nick); +    } +} + +sub sig_ctcp_msg_noforward ($$$$$) { +    my ($server, $args, $nick, $address, $target) = @_; +    my $chatnet = $server->{chatnet}; +    return unless defined $forwards{$chatnet}; +    return unless ($forwards{$chatnet}{to} eq $nick); +    $server->command("nctcp ".$nick." NOFORWARD Forwarding disabled"); +    remove_forward($server->{chatnet}); +} + + +sub set_forward ($$) { +    my ($chatnet, $nick) = @_; +    print CLIENTCRAP "%B>>%n Forwarding messages from $chatnet to > $nick <"; +    $forwards{$chatnet}{to} = $nick; +    $forwards{$chatnet}{active} = 1; +} + +sub remove_forward ($) { +    my ($chatnet) = @_; +    delete $forwards{$chatnet}; +    print CLIENTCRAP "%B>>%n No longer forwarding messages from $chatnet"; +} + +sub cmd_forward ($$$) { +    my ($arg, $server, $witem) = @_; +    return unless defined $server; +    my @args = split(/ /, $arg); +    if (@args < 1 || $args[0] eq 'help') { +	show_help(); +    } elsif (@args[0] eq 'to') { +	shift @args; +	return unless @args; +	set_forward($server->{chatnet}, $args[0]); +    } elsif (@args[0] eq 'remove') { +	remove_forward($server->{chatnet}); +    } +} + + +Irssi::signal_add('message private', \&sig_message_private); +Irssi::signal_add('ctcp msg forward', \&sig_ctcp_msg_forward); +Irssi::signal_add('ctcp msg noforward', \&sig_ctcp_msg_noforward); +Irssi::settings_add_str($IRSSI{name}, 'forward_remote_password', ''); + +Irssi::command_bind('forward' => \&cmd_forward); + +print CLIENTCRAP '%B>>%n '.$IRSSI{name}.' '.$VERSION.' loaded: /forward help for help'; | 
