root/irssi-scripts/trunk/greynick.pl

Revision 50, 3.6 kB (checked in by simon, 3 months ago)
  • Remove unused $color variable.
  • Property svn:mime-type set to text/x-perl
  • Property svn:eol-style set to native
Line 
1 use strict;
2 use Irssi;
3 use 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
14 my $greyfile = "$ENV{HOME}/.irssi/greylist";
15 my %saved_greylist;
16 my %session_greylist = {};
17
18 sub 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
29 sub 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
38 sub 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
47 sub 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
65 sub 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
79 sub cmd_greylist_load {
80     load_greylist;
81 }
82
83 sub cmd_greylist_save {
84     save_greylist;
85 }
86
87 sub 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
96 sub 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
105 sub 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
116 sub cmd_greylist {
117     my ($data, $server, $witem) = @_;
118     chomp($data);
119     $data = $data || 'show';
120     Irssi::command_runsub('greylist', $data, $server, $witem);
121 }
122
123 load_greylist;
124
125 Irssi::command_bind('greylist', 'cmd_greylist');
126 Irssi::command_bind('greylist load', 'cmd_greylist_load');
127 Irssi::command_bind('greylist save', 'cmd_greylist_save');
128 Irssi::command_bind('greylist add', 'cmd_greylist_add');
129 Irssi::command_bind('greylist remove', 'cmd_greylist_remove');
130 Irssi::command_bind('greylist show', 'cmd_greylist_show');
131
132 Irssi::signal_add('message public', 'sig_message_public');
133 Irssi::signal_add('message irc action', 'sig_message_irc_action');
134 Irssi::signal_add('event nick', 'sig_event_nick');
Note: See TracBrowser for help on using the browser.