source: irssi-scripts/trunk/greynick.pl @ 51

Last change on this file since 51 was 50, checked in by simon, 17 years ago
  • Remove unused $color variable.
  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-perl
File size: 3.6 KB
Line 
1use strict;
2use Irssi;
3use vars qw($VERSION %IRSSI);
4$VERSION = "1";
5%IRSSI = (
6    authors     => "Simon Ward",
7    contact     => "simon\@bleah.co.uk", 
8    name        => "Greynick",
9    description => "grey out lines written by nick",
10    license     => "GPL",
11    changed     => "2008-05-26T23:15+0100"
12);
13
14my $greyfile = "$ENV{HOME}/.irssi/greylist";
15my %saved_greylist;
16my %session_greylist = {};
17
18sub load_greylist {
19    open GREYLIST, $greyfile;
20    while (<GREYLIST>) {
21        s/#.*$//;            # strip comment
22        next if /^(\s)*$/;  # skip blank line
23        chomp;
24        $saved_greylist{$_} = 1;
25    }
26    close GREYLIST;
27}
28
29sub save_greylist {
30    open GREYLIST, ">$greyfile";
31    foreach my $nick (keys %saved_greylist) {
32        print GREYLIST "$nick\n";
33    }
34    close GREYLIST;
35}
36
37# Keep track of nick changes per session
38sub sig_event_nick {
39    my ($server, $newnick, $nick, $address) = @_;
40
41    $newnick = substr ($newnick, 1) if ($newnick =~ /^:/);
42    if ($saved_greylist{$nick} or $session_greylist{$nick}) {
43        $session_greylist{$newnick} = 1;
44    }
45}
46
47sub sig_message_public {
48    my ($server, $msg, $nick, $addr, $target) = @_;
49    my $chanrec = $server->channel_find($target);
50    return unless $chanrec;
51    my $nickrec = $chanrec->nick_find($nick);
52    return unless $nickrec;
53
54    if ($saved_greylist{$nick} or $session_greylist{$nick}) {
55        $server->command('/^format pubmsg %K{pubmsgnick $2 {pubnick %K$0}}$1');
56        $server->command('/^format pubmsg_me %K{pubmsgmenick $2 {menick %y$0}}$1');
57        $server->command('/^format pubmsg_hilight %K{pubmsghinick $0 $3 %y$1}$2');
58    } else {
59        $server->command('/^format -reset pubmsg');
60        $server->command('/^format -reset pubmsg_me');
61        $server->command('/^format -reset pubmsg_hilight');
62    }
63}
64
65sub sig_message_irc_action {
66    my ($server, $msg, $nick, $addr, $target) = @_;
67    my $chanrec = $server->channel_find($target);
68    return unless $chanrec;
69    my $nickrec = $chanrec->nick_find($nick);
70    return unless $nickrec;
71
72    if ($saved_greylist{$nick} or $session_greylist{$nick}) {
73        $server->command('/^format action_public %K{pubaction %K$0}$1');
74    } else {
75        $server->command('/^format -reset action_public');
76    }
77}
78
79sub cmd_greylist_load {
80    load_greylist;
81}
82
83sub cmd_greylist_save {
84    save_greylist;
85}
86
87sub cmd_greylist_add {
88    my ($nick) = $_[0];
89    if ($nick) {
90        $saved_greylist{$nick} = 1;
91    } else {
92        Irssi::print('No nick given');
93    }
94}
95
96sub cmd_greylist_remove {
97    my ($nick) = $_[0];
98    if ($nick) {
99        delete ($saved_greylist{$nick});
100    } else {
101        Irssi::print('No nick given');
102    }
103}
104
105sub cmd_greylist_show {
106    Irssi::print("\nSaved greylist:");
107    foreach my $nick (keys %saved_greylist) {
108        Irssi::print($nick);
109    }
110    Irssi::print("\nSession greylist:");
111    foreach my $nick (keys %session_greylist) {
112        Irssi::print($nick);
113    }
114}
115
116sub cmd_greylist {
117    my ($data, $server, $witem) = @_;
118    chomp($data);
119    $data = $data || 'show';
120    Irssi::command_runsub('greylist', $data, $server, $witem);
121}
122
123load_greylist;
124
125Irssi::command_bind('greylist', 'cmd_greylist');
126Irssi::command_bind('greylist load', 'cmd_greylist_load');
127Irssi::command_bind('greylist save', 'cmd_greylist_save');
128Irssi::command_bind('greylist add', 'cmd_greylist_add');
129Irssi::command_bind('greylist remove', 'cmd_greylist_remove');
130Irssi::command_bind('greylist show', 'cmd_greylist_show');
131
132Irssi::signal_add('message public', 'sig_message_public');
133Irssi::signal_add('message irc action', 'sig_message_irc_action');
134Irssi::signal_add('event nick', 'sig_event_nick');
Note: See TracBrowser for help on using the repository browser.