]> git.madduck.net Git - code/irssi/scripts-bc-bd.git/blob - thankop.pl

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

semi-consistent use of tabs
[code/irssi/scripts-bc-bd.git] / 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/thankop',
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');