]> ruin.nu Git - NDIRC.git/blob - Misc.pm
Add command name as argument and modify quote commands
[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/;
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{'#ndawn'} = ['all'];
38 $channels{'pm'} = ['pm'];
39
40 $ND::defchan = "#def-ndawn";
41 $ND::memchan = "#nd";
42 $ND::scanchan = "#ndef";
43 $ND::bcchan = "#nd-day";
44 $ND::intelchan = "#ndintel";
45 $ND::officerchan = "#nd-officers";
46 $ND::communitychan = "#ndawn";
47 $ND::pubchan = "#newdawn";
48
49 sub valuecolor {
50         my $s = $_;
51         $s = $_[1] if $#_ >= 1;
52         $s = "" unless defined $s;
53         return chr(3)."5$s".chr(15) if $s eq 'Hostile';
54         return chr(3)."3$s".chr(15) if $s eq 'Friendly';
55         return chr(3)."3$s".chr(15) if $s eq 'Nap' or $s eq 'NAP';
56         return chr(2)."$s".chr(15) if $_[0];
57         return $s;
58 }
59
60 sub addCommand {
61         my ($command, $list, $func) = @_;
62         $commands{$command} = {fun => $func, acc => $list};
63 }
64
65 sub parseCommand {
66         my ($msg,$channel) = @_;
67         if ($msg =~ /^(\w+)(?: (.+))?$/){
68                 my $c = $1;
69                 my $args = $2;
70                 my @k = keys %commands;
71                 if (exists $commands{$c}){
72                         my $a = $commands{$c}->{acc};
73                         my $b = (exists $channels{lc $channel} ? $channels{lc $channel} : ['all']);
74                         if (intersect($a,$b) > 0){
75                                 $commands{$c}->{fun}->($args,$c);
76                                 return 1;
77                         }
78                 }
79         }
80         return 0;
81 }
82
83 sub intersect {
84         my ($a, $b) = @_;
85         my %union;
86         foreach my $e (@{$a}) { $union{$e} = 1 }
87
88         my %isect;
89         foreach my $e (@{$b}) {
90              $isect{$e} = 1 if ( exists $union{$e} )
91         }
92         return keys %isect;
93 }
94
95 1;