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

Last change on this file since 49 was 49, checked in by simon, 16 years ago
  • Fix hilight format.
  • 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    my $color;
41
42    $newnick = substr ($newnick, 1) if ($newnick =~ /^:/);
43    if ($saved_greylist{$nick} or $session_greylist{$nick}) {
44        $session_greylist{$newnick} = 1;
45    }
46}
47
48sub sig_message_public {
49    my ($server, $msg, $nick, $addr, $target) = @_;
50    my $chanrec = $server->channel_find($target);
51    return unless $chanrec;
52    my $nickrec = $chanrec->nick_find($nick);
53    return unless $nickrec;
54
55    if ($saved_greylist{$nick} or $session_greylist{$nick}) {
56        $server->command('/^format pubmsg %K{pubmsgnick $2 {pubnick %K$0}}$1');
57        $server->command('/^format pubmsg_me %K{pubmsgmenick $2 {menick %y$0}}$1');
58        $server->command('/^format pubmsg_hilight %K{pubmsghinick $0 $3 %y$1}$2');
59    } else {
60        $server->command('/^format -reset pubmsg');
61        $server->command('/^format -reset pubmsg_me');
62        $server->command('/^format -reset pubmsg_hilight');
63    }
64}
65
66sub sig_message_irc_action {
67    my ($server, $msg, $nick, $addr, $target) = @_;
68    my $chanrec = $server->channel_find($target);
69    return unless $chanrec;
70    my $nickrec = $chanrec->nick_find($nick);
71    return unless $nickrec;
72
73    if ($saved_greylist{$nick} or $session_greylist{$nick}) {
74        $server->command('/^format action_public %K{pubaction %K$0}$1');
75    } else {
76        $server->command('/^format -reset action_public');
77    }
78}
79
80sub cmd_greylist_load {
81    load_greylist;
82}
83
84sub cmd_greylist_save {
85    save_greylist;
86}
87
88sub cmd_greylist_add {
89    my ($nick) = $_[0];
90    if ($nick) {
91        $saved_greylist{$nick} = 1;
92    } else {
93        Irssi::print('No nick given');
94    }
95}
96
97sub cmd_greylist_remove {
98    my ($nick) = $_[0];
99    if ($nick) {
100        delete ($saved_greylist{$nick});
101    } else {
102        Irssi::print('No nick given');
103    }
104}
105
106sub cmd_greylist_show {
107    Irssi::print("\nSaved greylist:");
108    foreach my $nick (keys %saved_greylist) {
109        Irssi::print($nick);
110    }
111    Irssi::print("\nSession greylist:");
112    foreach my $nick (keys %session_greylist) {
113        Irssi::print($nick);
114    }
115}
116
117sub cmd_greylist {
118    my ($data, $server, $witem) = @_;
119    chomp($data);
120    $data = $data || 'show';
121    Irssi::command_runsub('greylist', $data, $server, $witem);
122}
123
124load_greylist;
125
126Irssi::command_bind('greylist', 'cmd_greylist');
127Irssi::command_bind('greylist load', 'cmd_greylist_load');
128Irssi::command_bind('greylist save', 'cmd_greylist_save');
129Irssi::command_bind('greylist add', 'cmd_greylist_add');
130Irssi::command_bind('greylist remove', 'cmd_greylist_remove');
131Irssi::command_bind('greylist show', 'cmd_greylist_show');
132
133Irssi::signal_add('message public', 'sig_message_public');
134Irssi::signal_add('message irc action', 'sig_message_irc_action');
135Irssi::signal_add('event nick', 'sig_event_nick');
Note: See TracBrowser for help on using the repository browser.