html/thankop.pl


   1 use Irssi 0.8.10 ();
   2 use strict;
   3 
   4 use vars qw($VERSION %IRSSI);
   5 
   6 $VERSION="0.1.7";
   7 %IRSSI = (
   8 	authors=> 'BC-bd',
   9 	contact=> 'bd@bc-bd.org',
  10 	name=> 'thankop',
  11 	description=> 'Remembers the last person oping you on a channel',
  12 	license=> 'GPL v2',
  13 	url=> 'https://bc-bd.org/svn/repos/irssi/trunk/',
  14 );
  15 
  16 # $Id #
  17 # 
  18 #########
  19 # USAGE
  20 ###
  21 #
  22 # Type '/thankop' in a channel window to thank the person opping you
  23 #
  24 ##########
  25 # OPTIONS
  26 ####
  27 #
  28 # /set thankop_command [command]
  29 #		* command  : to be executed. The following $'s are expanded
  30 #		    $N : Nick (some dude)
  31 #		    
  32 #		eg:
  33 #		
  34 #		  /set thankop_command say $N: w00t!
  35 #
  36 #		Would say
  37 #
  38 #		  <nick>: w00t!
  39 #
  40 #		To the channel you got op in, with <nick> beeing the nick who
  41 #		opped you
  42 #
  43 ################
  44 ###
  45 # Changelog
  46 #
  47 # Version 0.1.7
  48 #  - fix crash if used in a window != CHANNEL
  49 #  - do not thank someone who has already left
  50 #
  51 # Version 0.1.6
  52 #  - added support for multiple networks, thanks to senneth
  53 #  - adapted to signal changes in 0.8.10
  54 #
  55 # Version 0.1.5
  56 #  - change back to setting instead of theme item
  57 #
  58 # Version 0.1.4
  59 #  - added theme item to customize the message (idea from mordeth)
  60 #
  61 # Version 0.1.3
  62 #  - removed '/' from the ->command (thx to mordeth)
  63 #  - removed debug messages (where commented out)
  64 #  
  65 # Version 0.1.2
  66 #  - added version dependency, since some 0.8.4 users complained about a not
  67 #      working script
  68 #  
  69 # Version 0.1.1
  70 #  - unsetting of hash values is done with delete not unset.
  71 #
  72 # Version 0.1.0
  73 #  - initial release
  74 #  
  75 ###
  76 ################
  77 
  78 my %op;
  79 
  80 sub cmd_thankop {
  81 	my ($data, $server, $witem) = @_;
  82 
  83 	if (!$witem || ($witem->{type} =! "CHANNEL")) {
  84 		Irssi::print("thankop: Window not of type CHANNEL");
  85 		return;
  86 	}
  87 
  88 	my $tag = $witem->{server}->{tag}.'/'.$witem->{name};
  89 
  90 	# did we record who opped us here
  91 	if (!exists($op{$tag})) {
  92 		$witem->print("thankop: I don't know who op'ed you in here");
  93 		return;
  94 	}
  95 
  96 	my $by = $op{$tag};
  97 
  98 	# still here?
  99 	if (!$witem->nick_find($by)) {
 100 		$witem->print("thankop: $by already left");
 101 		return;
 102 	}
 103 
 104 	my $cmd = Irssi::settings_get_str('thankop_command');
 105 				
 106 	$cmd =~ s/\$N/$by/;
 107 	$witem->command($cmd);
 108 }
 109 
 110 sub mode_changed {
 111 	my ($channel, $nick, $by, undef, undef) = @_;
 112 
 113 	return if ($channel->{server}->{nick} ne $nick->{nick});
 114 
 115 	# since 0.8.10 this is set after signals have been processed
 116 	return if ($channel->{chanop});
 117 
 118 	my $tag = $channel->{server}->{tag}.'/'.$channel->{name};
 119 
 120 	$op{$tag} = $by;
 121 }
 122 
 123 sub channel_destroyed {
 124 	my ($channel) = @_;
 125 
 126 	my $tag = $channel->{server}->{tag}.'/'.$channel->{name};
 127 
 128 	delete($op{$tag});
 129 }
 130 
 131 Irssi::command_bind('thankop','cmd_thankop');
 132 Irssi::signal_add_last('nick mode changed', 'mode_changed');
 133 
 134 Irssi::settings_add_str('thankop', 'thankop_command', 'say $N: opthx');