html/forward.pl
1 #!/usr/bin/perl
2 #
3
4 use strict;
5 use vars qw($VERSION %IRSSI);
6 $VERSION = '2003071904';
7 %IRSSI = (
8 authors => 'Stefan \'tommie\' Tomanek',
9 contact => 'stefan@pico.ruhr.de',
10 name => 'Forward',
11 description => 'forward incoming messages to another nick',
12 license => 'GPLv2',
13 url => 'http://irssi.org/scripts/',
14 changed => $VERSION,
15 modules => '',
16 commands => "forward"
17 );
18
19 use Irssi 20020324;
20
21 use vars qw(%forwards);
22
23 sub show_help() {
24 my $help = $IRSSI{name}." ".$VERSION."
25 /forward to <nick>
26 Forward incoming messages to <nick>
27 /forward remove
28 Disable forwarding in the current chatnet
29
30 You can remotely en- or disable forwarding by sending an
31 ctcp command to your client. Set a password and use
32 /CTCP <nickname> forward <password>
33 or
34 /CTCP <nickname> noforward
35 to enable or diable forwarding to your current nick.
36 ";
37 my $text='';
38 foreach (split(/\n/, $help)) {
39 $_ =~ s/^\/(.*)$/%9\/$1%9/;
40 $text .= $_."\n";
41 }
42 print CLIENTCRAP &draw_box($IRSSI{name}, $text, $IRSSI{name}." help", 1);
43 }
44
45 sub draw_box ($$$$) {
46 my ($title, $text, $footer, $colour) = @_;
47 my $box = '';
48 $box .= '%R,--[%n%9%U'.$title.'%U%9%R]%n'."\n";
49 foreach (split(/\n/, $text)) {
50 $box .= '%R|%n '.$_."\n";
51 }
52 $box .= '%R`--<%n'.$footer.'%R>->%n';
53 $box =~ s/%.//g unless $colour;
54 return $box;
55 }
56
57 sub sig_message_private ($$$$) {
58 my ($server, $msg, $nick, $address) = @_;
59 my $chatnet = $server->{chatnet};
60 return unless defined $forwards{$chatnet};
61 if ($forwards{$chatnet}{active}) {
62 my $to = $forwards{$chatnet}{to};
63 my $text = "[forwarded MSG from ".$nick."] ".$msg;
64 $server->command("notice $to ".$text);
65 }
66 }
67
68 sub sig_ctcp_msg_forward ($$$$$) {
69 my ($server, $args, $nick, $address, $target) = @_;
70 my $pass = Irssi::settings_get_str('forward_remote_password');
71 unless ($pass) {
72 print CLIENTCRAP '%R>>%n No forward password set, forwarding not enabled!';
73 $server->command("nctcp ".$nick." FORWARD Forwarding forbidden!");
74 return 0;
75 }
76 if ($pass eq $args) {
77 $server->command("nctcp ".$nick." FORWARD Forwarding enabled");
78 set_forward($server->{chatnet}, $nick);
79 }
80 }
81
82 sub sig_ctcp_msg_noforward ($$$$$) {
83 my ($server, $args, $nick, $address, $target) = @_;
84 my $chatnet = $server->{chatnet};
85 return unless defined $forwards{$chatnet};
86 return unless ($forwards{$chatnet}{to} eq $nick);
87 $server->command("nctcp ".$nick." NOFORWARD Forwarding disabled");
88 remove_forward($server->{chatnet});
89 }
90
91
92 sub set_forward ($$) {
93 my ($chatnet, $nick) = @_;
94 print CLIENTCRAP "%B>>%n Forwarding messages from $chatnet to > $nick <";
95 $forwards{$chatnet}{to} = $nick;
96 $forwards{$chatnet}{active} = 1;
97 }
98
99 sub remove_forward ($) {
100 my ($chatnet) = @_;
101 delete $forwards{$chatnet};
102 print CLIENTCRAP "%B>>%n No longer forwarding messages from $chatnet";
103 }
104
105 sub cmd_forward ($$$) {
106 my ($arg, $server, $witem) = @_;
107 return unless defined $server;
108 my @args = split(/ /, $arg);
109 if (@args < 1 || $args[0] eq 'help') {
110 show_help();
111 } elsif (@args[0] eq 'to') {
112 shift @args;
113 return unless @args;
114 set_forward($server->{chatnet}, $args[0]);
115 } elsif (@args[0] eq 'remove') {
116 remove_forward($server->{chatnet});
117 }
118 }
119
120
121 Irssi::signal_add('message private', \&sig_message_private);
122 Irssi::signal_add('ctcp msg forward', \&sig_ctcp_msg_forward);
123 Irssi::signal_add('ctcp msg noforward', \&sig_ctcp_msg_noforward);
124 Irssi::settings_add_str($IRSSI{name}, 'forward_remote_password', '');
125
126 Irssi::command_bind('forward' => \&cmd_forward);
127
128 print CLIENTCRAP '%B>>%n '.$IRSSI{name}.' '.$VERSION.' loaded: /forward help for help';