]> ruin.nu Git - NDIRC.git/blob - Misc.pm
ia channel
[NDIRC.git] / Misc.pm
1 #**************************************************************************
2 #   Copyright (C) 2006 by Michael Andreen <harvATruinDOTnu>               *
3 #                                                                         *
4 #   This program is free software; you can redistribute it and/or modify  *
5 #   it under the terms of the GNU General Public License as published by  *
6 #   the Free Software Foundation; either version 2 of the License, or     *
7 #   (at your option) any later version.                                   *
8 #                                                                         *
9 #   This program is distributed in the hope that it will be useful,       *
10 #   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
11 #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
12 #   GNU General Public License for more details.                          *
13 #                                                                         *
14 #   You should have received a copy of the GNU General Public License     *
15 #   along with this program; if not, write to the                         *
16 #   Free Software Foundation, Inc.,                                       *
17 #   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
18 #**************************************************************************/
19 package NDIRC::Misc;
20 use strict;
21 use warnings;
22 require Exporter;
23
24 our @ISA = qw/Exporter/;
25
26 our @EXPORT = qw/valuecolor addCommand parseCommand commands/;
27
28 our %channels;
29 our %commands;
30
31 $channels{'#def-ndawn'} = ['all','member','def'];
32 $channels{'#nd'} = ['all','member'];
33 $channels{'#ndef'} = ['all','member','scan'];
34 $channels{'#nd-day'} = ['all','member'];
35 $channels{'#ndintel'} = ['all','member'];
36 $channels{'#nd-officers'} = ['all','member'];
37 $channels{'#nd-ia'} = ['all','member'];
38 $channels{'#ndawn'} = ['all'];
39 $channels{'pm'} = ['pm'];
40
41 $ND::defchan = "#def-ndawn";
42 $ND::memchan = "#nd";
43 $ND::scanchan = "#ndef";
44 $ND::bcchan = "#nd-day";
45 $ND::intelchan = "#ndintel";
46 $ND::officerchan = "#nd-officers";
47 $ND::communitychan = "#ndawn";
48 $ND::pubchan = "#newdawn";
49
50 sub valuecolor {
51         my $s = $_;
52         $s = $_[1] if $#_ >= 1;
53         $s = "" unless defined $s;
54         return chr(3)."5$s".chr(15) if $s eq 'Hostile';
55         return chr(3)."3$s".chr(15) if $s eq 'Friendly';
56         return chr(3)."3$s".chr(15) if $s eq 'Nap' or $s eq 'NAP';
57         return chr(2)."$s".chr(15) if $_[0];
58         return $s;
59 }
60
61 sub addCommand {
62         my ($command, $list, $func) = @_;
63         $commands{$command} = {fun => $func, acc => $list};
64 }
65
66 sub parseCommand {
67         my ($msg,$channel) = @_;
68         if ($msg =~ /^(\S+)(?: (.+))?$/){
69                 my $c = $1;
70                 my $args = $2;
71                 my @k = keys %commands;
72                 if (exists $commands{$c}){
73                         my $a = $commands{$c}->{acc};
74                         my $b = (exists $channels{lc $channel} ? $channels{lc $channel} : ['all']);
75                         if (intersect($a,$b) > 0){
76                                 $commands{$c}->{fun}->($args,$c);
77                                 return 1;
78                         }
79                 }
80         }
81         return 0;
82 }
83
84 sub commands {
85         my ($channel) = @_;
86         my @commands;
87         my $b = (exists $channels{lc $channel} ? $channels{lc $channel} : ['all']);
88         for my $c (sort keys %commands){
89                 my $a = $commands{$c}->{acc};
90                 if (intersect($a,$b) > 0){
91                         push @commands, $c;
92                 }
93         }
94         return join ', ', @commands;
95 }
96
97 sub intersect {
98         my ($a, $b) = @_;
99         my %union;
100         foreach my $e (@{$a}) { $union{$e} = 1 }
101
102         my %isect;
103         foreach my $e (@{$b}) {
104              $isect{$e} = 1 if ( exists $union{$e} )
105         }
106         return keys %isect;
107 }
108
109 1;