diff options
author | Timo Sirainen <cras@irssi.org> | 2000-08-24 01:01:21 +0000 |
---|---|---|
committer | cras <cras@dbcabf3a-b0e7-0310-adc4-f8d773084564> | 2000-08-24 01:01:21 +0000 |
commit | d86c7157909486cc377ce3d9d021feac789fd077 (patch) | |
tree | 0dabcbaf4979113a46f4c07420809c3b7e822ecb /scripts | |
parent | d74313b36822cc2e281de1782070520e3d19e931 (diff) | |
download | irssi-d86c7157909486cc377ce3d9d021feac789fd077.zip |
Added /AUTOOP
git-svn-id: http://svn.irssi.org/repos/irssi/trunk@625 dbcabf3a-b0e7-0310-adc4-f8d773084564
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/Makefile.am | 1 | ||||
-rw-r--r-- | scripts/autoop.pl | 79 |
2 files changed, 80 insertions, 0 deletions
diff --git a/scripts/Makefile.am b/scripts/Makefile.am index 409ff8dd..f528e4d9 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -1,4 +1,5 @@ EXTRA_DIST = \ + autoop.pl \ autorejoin.pl \ hello.pl \ privmsg.pl \ diff --git a/scripts/autoop.pl b/scripts/autoop.pl new file mode 100644 index 00000000..1a89381a --- /dev/null +++ b/scripts/autoop.pl @@ -0,0 +1,79 @@ +# /AUTOOP <*|#channel> [<nickmasks>] +# For Irssi 0.7.96 and above (older versions had a few bugs) + +use Irssi; + +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 1; + } + + 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 1; + } + + if ($masks eq "") { + $masks = "<no-one>" if (!$masks); + 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"); + } + return 1; +} + +sub autoop { + my ($channel, $masks, @nicks) = @_; + my $nickrec; + + foreach $nickrec (@nicks) { + $nick = $nickrec->values()->{'nick'}; + $host = $nickrec->values()->{'host'}; + + if (!$temp_opped{$nick} && + Irssi::irc_masks_match($masks, $nick, $host)) { + $channel->command("/op $nick"); + $temp_opped{$nick} = 1; + } + } +} + +sub event_massjoin { + my ($channel, @nicks) = @_; + + return if (!$channel->values()->{'chanop'}); + + undef %temp_opped; + + # channel specific + my $masks = $opnicks{$channel->values()->{'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'); |