1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
# /AUTOOP <*|#channel> [<nickmasks>]
# use friends.pl if you need more features
use Irssi;
use strict;
use vars qw($VERSION %IRSSI);
$VERSION = "1.00";
%IRSSI = (
authors => 'Timo Sirainen',
name => 'autoop',
description => 'Simple auto-op script',
license => 'Public Domain',
changed => 'Sun Mar 10 23:18 EET 2002'
);
my (%opnicks, %temp_opped);
sub cmd_autoop {
my ($data) = @_;
my ($channel, $masks) = split(" ", $data, 2);
if ($channel eq "") {
if (!%opnicks) {
Irssi::print("Usage: /AUTOOP <*|#channel> [<nickmasks>]");
Irssi::print("No-one's being auto-opped currently.");
return;
}
Irssi::print("Currently auto-opping in channels:");
foreach $channel (keys %opnicks) {
$masks = $opnicks{$channel};
if ($channel eq "*") {
Irssi::print("All channels: $masks");
} else {
Irssi::print("$channel: $masks");
}
}
return;
}
if ($masks eq "") {
$masks = "<no-one>";
delete $opnicks{$channel};
} else {
$opnicks{$channel} = $masks;
}
if ($channel eq "*") {
Irssi::print("Now auto-opping in all channels: $masks");
} else {
Irssi::print("$channel: Now auto-opping: $masks");
}
}
sub autoop {
my ($channel, $masks, @nicks) = @_;
my ($server, $nickrec);
$server = $channel->{server};
foreach $nickrec (@nicks) {
my $nick = $nickrec->{nick};
my $host = $nickrec->{host};
if (!$temp_opped{$nick} &&
$server->masks_match($masks, $nick, $host)) {
$channel->command("/op $nick");
$temp_opped{$nick} = 1;
}
}
}
sub event_massjoin {
my ($channel, $nicks_list) = @_;
my @nicks = @{$nicks_list};
return if (!$channel->{chanop});
undef %temp_opped;
# channel specific
my $masks = $opnicks{$channel->{name}};
autoop($channel, $masks, @nicks) if ($masks);
# for all channels
$masks = $opnicks{"*"};
autoop($channel, $masks, @nicks) if ($masks);
}
Irssi::command_bind('autoop', 'cmd_autoop');
Irssi::signal_add_last('massjoin', 'event_massjoin');
|