summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorTimo Sirainen <cras@irssi.org>2000-08-24 01:01:21 +0000
committercras <cras@dbcabf3a-b0e7-0310-adc4-f8d773084564>2000-08-24 01:01:21 +0000
commitd86c7157909486cc377ce3d9d021feac789fd077 (patch)
tree0dabcbaf4979113a46f4c07420809c3b7e822ecb /scripts
parentd74313b36822cc2e281de1782070520e3d19e931 (diff)
downloadirssi-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.am1
-rw-r--r--scripts/autoop.pl79
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');