]>
jfr.im git - irc/SurrealServices/srsv.git/blob - branches/0.5.0/modules/core.pm
1 # This file is part of SurrealServices.
3 # SurrealServices is free software; you can redistribute it and/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation; either version 2 of the License, or
6 # (at your option) any later version.
8 # SurrealServices is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # GNU General Public License for more details.
13 # You should have received a copy of the GNU General Public License
14 # along with SurrealServices; if not, write to the Free Software
15 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 #use SrSv::Conf 'main';
20 use SrSv
::Conf2Consts
'main';
21 use SrSv
::RunLevel
'main_shutdown';
22 use SrSv
::IRCd
::Event
'addhandler';
23 use SrSv
::IRCd
::IO
'ircsend';
24 use SrSv
::Timer
'add_timer';
25 use SrSv
::Time
'time_rel_long_all';
27 use SrSv
::Process
::Init
; #FIXME - only needed for ccode
28 use SrSv
::User
::Notice
;
31 my $startTime = time();
33 our %ccode; #FIXME - Split out
35 open ((my $COUNTRY), main
::PREFIX
()."/data/country-codes.txt");
36 while(my $x = <$COUNTRY>) {
38 my($code, $country) = split(/ /, $x);
39 $ccode{uc $code} = $country;
44 our $rsnick = 'ServServ';
45 our $rsUser = { NICK
=> $rsnick, ID
=> ircd
::getAgentUuid
($rsnick) };
46 addhandler
('STATS', undef, undef, 'core::stats');
48 my ($src, $token) = @_;
50 ircsend
('242 '.$src.' :Server up '.time_rel_long_all
($startTime),
51 '219 '.$src.' u :End of /STATS report')
55 addhandler
('PING', undef, undef, 'ircd::pong', 1);
59 add_timer
('perlserv__pingtimer', 60, __PACKAGE__
,
63 agent_connect
($rsnick, 'service', undef, '+ABHSNaopqz', 'Services Control Agent');
64 agent_join
($rsnick, main_conf_diag
);
65 ircd
::setmode
($rsUser, main_conf_diag
, '+o', $rsUser );
67 addhandler
('SEOS', undef, undef, 'core::ev_connect', 1);
68 addhandler
('ENDBURST', undef, undef, 'core::ev_connect', 1);
70 add_timer
('perlserv__pingtimer', 60, __PACKAGE__
,
74 addhandler
('PRIVMSG', undef, 'servserv', 'core::dispatch', 1);
77 our $rsUser = { NICK
=> $rsnick, ID
=> ircd
::getAgentUuid
($rsnick) };
78 my ($user, $dstUser, $msg) = @_;
79 return unless (lc $dstUser->{NICK
} eq lc $rsnick);
80 $user->{AGENT
} = $rsUser;
81 my $src = $user->{NICK
};
82 my $dst = $dstUser->{NICK
};
83 if(!adminserv
::is_ircop
($user)) {
84 notice
($user, 'Access Denied');
85 ircd
::globops
($rsnick, "\002$src\002 failed access to $rsnick $msg");
88 if($msg =~ /^lsmod/i) {
89 notice
($user, main_conf_load
);
92 if($msg =~ /^shutdown/i) {
93 if(!adminserv
::is_svsop
($user, adminserv
::S_ADMIN
() )) {
94 notice
($user, 'You do not have sufficient rank for this command');
100 if($msg =~ /^raw/i) {
101 if(!adminserv
::is_svsop
($user, adminserv
::S_ROOT
() )) {
102 notice
($user, 'You do not have sufficient rank for this command');
110 if($msg =~ /^help$/) {
111 sendhelp
($user, lc 'core');
114 if(main
::DEBUG
and $msg =~ /^eval\s+(.*)/) {
116 notice
($user, split(/\n/, $out.$@));
120 sub init
{ $rsUser = { NICK
=> $rsnick, ID
=> ircd
::getAgentUuid
($rsnick) };}