use Irssi 0.8.10 ();
use strict;
use vars qw($VERSION %IRSSI);
$VERSION="0.1.7";
%IRSSI = (
authors=> 'BC-bd',
contact=> '[email protected]',
name=> 'thankop',
description=> 'Remembers the last person oping you on a channel',
license=> 'GPL v2',
url=> 'https://bc-bd.org/svn/repos/irssi/trunk/',
);
# $Id #
#
#########
# USAGE
###
#
# Type '/thankop' in a channel window to thank the person opping you
#
##########
# OPTIONS
####
#
# /set thankop_command [command]
# * command : to be executed. The following $'s are expanded
# $N : Nick (some dude)
#
# eg:
#
# /set thankop_command say $N: w00t!
#
# Would say
#
# : w00t!
#
# To the channel you got op in, with beeing the nick who
# opped you
#
################
###
# Changelog
#
# Version 0.1.7
# - fix crash if used in a window != CHANNEL
# - do not thank someone who has already left
#
# Version 0.1.6
# - added support for multiple networks, thanks to senneth
# - adapted to signal changes in 0.8.10
#
# Version 0.1.5
# - change back to setting instead of theme item
#
# Version 0.1.4
# - added theme item to customize the message (idea from mordeth)
#
# Version 0.1.3
# - removed '/' from the ->command (thx to mordeth)
# - removed debug messages (where commented out)
#
# Version 0.1.2
# - added version dependency, since some 0.8.4 users complained about a not
# working script
#
# Version 0.1.1
# - unsetting of hash values is done with delete not unset.
#
# Version 0.1.0
# - initial release
#
###
################
my %op;
sub cmd_thankop {
my ($data, $server, $witem) = @_;
if (!$witem || ($witem->{type} =! "CHANNEL")) {
Irssi::print("thankop: Window not of type CHANNEL");
return;
}
my $tag = $witem->{server}->{tag}.'/'.$witem->{name};
# did we record who opped us here
if (!exists($op{$tag})) {
$witem->print("thankop: I don't know who op'ed you in here");
return;
}
my $by = $op{$tag};
# still here?
if (!$witem->nick_find($by)) {
$witem->print("thankop: $by already left");
return;
}
my $cmd = Irssi::settings_get_str('thankop_command');
$cmd =~ s/\$N/$by/;
$witem->command($cmd);
}
sub mode_changed {
my ($channel, $nick, $by, undef, undef) = @_;
return if ($channel->{server}->{nick} ne $nick->{nick});
# since 0.8.10 this is set after signals have been processed
return if ($channel->{chanop});
my $tag = $channel->{server}->{tag}.'/'.$channel->{name};
$op{$tag} = $by;
}
sub channel_destroyed {
my ($channel) = @_;
my $tag = $channel->{server}->{tag}.'/'.$channel->{name};
delete($op{$tag});
}
Irssi::command_bind('thankop','cmd_thankop');
Irssi::signal_add_last('nick mode changed', 'mode_changed');
Irssi::settings_add_str('thankop', 'thankop_command', 'say $N: opthx');