Directory should really be named "scripts", not "examples".

Added script mlock.pl


git-svn-id: http://svn.irssi.org/repos/irssi/trunk@149 dbcabf3a-b0e7-0310-adc4-f8d773084564
This commit is contained in:
Timo Sirainen 2000-03-15 20:49:44 +00:00 committed by cras
commit 2799d200cb
9 changed files with 115 additions and 1 deletions

2
scripts/.cvsignore Normal file
View file

@ -0,0 +1,2 @@
Makefile
Makefile.in

6
scripts/Makefile.am Normal file
View file

@ -0,0 +1,6 @@
EXTRA_DIST = \
autorejoin.pl \
hello.pl \
privmsg.pl \
realname.pl \
quitmsg.pl

20
scripts/autorejoin.pl Normal file
View file

@ -0,0 +1,20 @@
# automatically rejoin to channel after kicked
# NOTE: I personally don't like this feature, in most channels I'm in it
# will just result as ban. You've probably misunderstood the idea of /KICK
# if you kick/get kicked all the time "just for fun" ...
use Irssi;
sub event_rejoin_kick {
my ($data, $server) = @_;
my ($channel) = split(/ +/, $data);
# check if channel has password
$chanrec = $server->channel_find($channel);
$password = $chanrec->values()->{'key'} if ($chanrec);
$server->send_raw("JOIN $channel $password");
}
Irssi::signal_add('event kick', 'event_rejoin_kick');

12
scripts/hello.pl Normal file
View file

@ -0,0 +1,12 @@
# "Hello, world!" script :) /hello <nick> sends "Hello, world!" to <nick>
use Irssi;
sub cmd_hello {
my ($data, $server, $channel) = @_;
$server->command("/msg $data Hello, world!");
return 1;
}
Irssi::command_bind('hello', '', 'cmd_hello');

114
scripts/mlock.pl Normal file
View file

@ -0,0 +1,114 @@
# /MLOCK <channel> <mode> - for Irssi 0.7.29 and above
#
# Locks the channel mode to <mode>, if someone else tries to change the mode
# Irssi will automatically change it back. +k and +l are a bit special since
# they require the parameter. If you omit the parameter, like setting the
# mode to "+ntlk", Irssi will allow all +k and +l (or -lk) mode changes.
use Irssi;
sub cmd_mlock {
my ($data, $server) = @_;
my ($channel, $mode) = split(/ /, $data, 2);
$keep_channels{$channel} = $mode;
mlock_check_mode($server, $channel);
return 1;
}
sub mlock_check_mode {
my ($server, $channame) = @_;
$channel = $server->channel_find($channame);
return if (!channel || !$channel->values()->{'chanop'});
$keep_mode = $keep_channels{$channame};
return if (!$keep_mode);
# old channel mode
$oldmode = $channel->get_mode();
$oldmode =~ s/^([^ ]*).*/\1/;
$oldkey = $channel->values()->{'key'};
$oldlimit = $channel->values()->{'limit'};
# get the new channel key/limit
@newmodes = split(/ /, $keep_mode); $keep_mode = $newmodes[0];
if ($keep_mode =~ /k/) {
if ($keep_mode =~ /k.*l/) {
$newkey = $newmodes[1];
$limit = $newmodes[2];
} elsif ($keep_mode =~ /l.*k/) {
$limit = $newmodes[1];
$newkey = $newmodes[2];
} else {
$newkey = $newmodes[1];
}
} elsif ($keep_mode =~ /l/) {
$limit = $newmodes[1];
}
# check the differences
undef %allmodes;
$keep_mode =~ s/^\+//;
for ($n = 0; $n < length($keep_mode); $n++) {
$modechar = substr($keep_mode, $n, 1);
$allmodes{$modechar} = '+';
}
for ($n = 0; $n < length($oldmode); $n++) {
$modechar = substr($oldmode, $n, 1);
if ($allmodes{$modechar} eq '+') {
next if (($modechar eq "k" && $newkey ne $oldkey) ||
($modechar eq "l" && $limit != $oldlimit));
delete $allmodes{$modechar};
} else {
$allmodes{$modechar} = '-';
}
}
# create the mode change string
$modecmd = ""; $extracmd = "";
foreach $mode (keys %allmodes) {
Irssi::print("key = '$mode':".$allmodes{$mode});
if ($mode eq "k") {
if ($allmodes{$mode} eq '+') {
next if ($newkey eq "");
if ($oldkey ne "") {
# we need to get rid of old key too
$modecmd .= "-k";
$extracmd .= " $oldkey";
}
$extracmd .= " $newkey";
} else {
$extracmd .= " $oldkey";
}
}
if ($mode eq "l" && $allmodes{$mode} eq '+') {
next if ($limit <= 0);
$extracmd .= " $limit";
}
$modecmd .= $allmodes{$mode}.$mode;
}
if ($modecmd ne "") {
$channel->values()->{'server'}->command("/mode $channame $modecmd$extracmd");
}
}
sub mlock_mode_changed {
my ($data, $server) = @_;
my ($channel, $mode) = split(/ /, $data, 2);
mlock_check_mode($server, $channel);
}
sub mlock_synced {
my $channel = $_[0];
mlock_check_mode($channel->values()->{'server'}, $channel->values()->{'name'});
}
Irssi::command_bind('mlock', '', 'cmd_mlock');
Irssi::signal_add_last("event mode", "mlock_mode_changed");
Irssi::signal_add("channel synced", "mlock_synced");

17
scripts/privmsg.pl Normal file
View file

@ -0,0 +1,17 @@
# listen PRIVMSGs - send a notice to yourself when your nick is meantioned
use Irssi;
sub event_privmsg {
my ($data, $server, $nick, $address) = @_;
my ($target, $text) = $data =~ /^(\S*)\s:(.*)/;
return if (!Irssi::is_channel($target));
$mynick = $server->values()->{'nick'};
return if ($text !~ /\b$mynick\b/);
$server->command("/notice $mynick In channel $target, $nick!$address said: $text");
}
Irssi::signal_add("event privmsg", "event_privmsg");

31
scripts/quitmsg.pl Normal file
View file

@ -0,0 +1,31 @@
# Quit with a random quit message read from ~/.irssi/irssi.quit
use Irssi;
$quitfile = "$ENV{HOME}/.irssi/irssi.quit";
sub cmd_quit {
my ($data, $server, $channel) = @_;
open (f, $quitfile) || return;
$lines = 0; while(<f>) { $lines++; };
$line = int(rand($lines))+1;
seek(f, 0, 0); $. = 0;
while(<f>) {
next if ($. != $line);
chomp;
$quitmsg = $_;
last;
}
close(f);
@servers = Irssi::servers;
foreach $server (@servers) {
$server->command("/disconnect ".$server->values()->{'tag'}." $quitmsg");
}
}
Irssi::command_bind('quit', '', 'cmd_quit');

34
scripts/realname.pl Normal file
View file

@ -0,0 +1,34 @@
# /RN - display real name of nick
use Irssi;
sub cmd_realname {
my ($data, $server, $channel) = @_;
$server->send_raw("WHOIS :$data");
# ignore all whois replies except "No such nick" or the
# first line of the WHOIS reply
$server->redirect_event($data, 2,
"event 318", "event empty", -1,
"event 402", "event 402", -1,
"event 401", "event 401", 1,
"event 311", "redir whois", 1,
"event 301", "event empty", 1,
"event 312", "event empty", 1,
"event 313", "event empty", 1,
"event 317", "event empty", 1,
"event 319", "event empty", 1);
return 1;
}
sub event_rn_whois {
my ($num, $nick, $user, $host, $empty, $realname) = split(/ +/, $_[0], 6);
$realname =~ s/^://;
Irssi::print("%_$nick%_ is $realname");
return 1;
}
Irssi::command_bind('rn', '', 'cmd_realname');
Irssi::signal_add('redir whois', 'event_rn_whois');