]>
jfr.im git - irc/SurrealServices/srsv.git/blob - branches/0.5.0/modules/services.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
::services
;
21 use SrSv
::MySQL
qw($dbh);
22 use SrSv
::Conf
qw(main services sql);
23 use SrSv
::Conf2Consts
qw(main services sql);
24 use SrSv
::Timer
qw(add_timer);
26 use SrSv
::IRCd
::Event
qw(addhandler);
28 use SrSv
::User
qw( :flood __flood_expire );
30 use modules
::serviceslibs
::adminserv
;
31 use modules
::serviceslibs
::nickserv
;
32 use modules
::serviceslibs
::chanserv
;
33 use modules
::serviceslibs
::operserv
;
34 use modules
::serviceslibs
::botserv
;
35 use modules
::serviceslibs
::memoserv
;
36 use modules
::serviceslibs
::hostserv
;
38 *conf
= \
%services_conf; # only used in some help docs
41 [$nickserv::nsnick_default
, '+opqzBHS', 'Nick Registration Agent'],
42 [$chanserv::csnick_default
, '+pqzBS', 'Channel Registration Agent'],
43 [$operserv::osnick_default
, '+opqzBHS', 'Operator Services Agent'],
44 [$memoserv::msnick_default
, '+pqzBS', 'Memo Exchange Agent'],
45 [$botserv::bsnick_default
, '+pqzBS', 'Channel Bot Control Agent'],
46 [$adminserv::asnick_default
, '+pqzBS', 'Services\' Administration Agent'],
47 [$hostserv::hsnick_default
, '+pqzBS', 'vHost Agent']
49 if(services_conf_nickserv
) {
50 push @agents, [services_conf_nickserv
, '+opqzBHS', 'Nick Registration Agent'];
51 $nickserv::nsnick
= services_conf_nickserv
;
53 if(services_conf_chanserv
) {
54 push @agents, [services_conf_chanserv
, '+pqzBS', 'Channel Registration Agent'];
55 $chanserv::csnick
= services_conf_chanserv
;
57 if(services_conf_operserv
) {
58 push @agents, [services_conf_operserv
, '+opqzBHS', 'Operator Services Agent'];
59 $operserv::osnick
= services_conf_operserv
;
61 if(services_conf_memoserv
) {
62 push @agents, [services_conf_memoserv
, '+pqzBS', 'Memo Exchange Agent'];
63 $memoserv::msnick
= services_conf_memoserv
;
65 if(services_conf_botserv
) {
66 push @agents, [services_conf_botserv
, '+pqzBS', 'Channel Bot Control Agent'];
67 $botserv::bsnick
= services_conf_botserv
;
69 if(services_conf_adminserv
) {
70 push @agents, [services_conf_adminserv
, '+pqzBS', 'Services\' Administration Agent'];
71 $adminserv::asnick
= services_conf_adminserv
;
73 if(services_conf_hostserv
) {
74 push @agents, [services_conf_hostserv
, '+pqzBS', 'vHost Agent'];
75 $hostserv::hsnick
= services_conf_hostserv
;
78 our $qlreason = 'Reserved for Services';
80 foreach my $a (@agents) {
81 print "AGENT " . Dumper
($a);
82 agent_connect
($a->[0], 'services', undef, $a->[1], $a->[2]);
83 ircd
::sqline
($a->[0], $qlreason);
84 agent_join
($a->[0], main_conf_diag
);
85 my $rsUser = { NICK
=> $main::rsnick
, ID
=> ircd
::getUuid
($main::rsnick
) };
86 my $agent = { NICK
=> $a->[0], ID
=> ircd
::getUuid
($a->[0]) };
87 ircd
::setmode
($agent, main_conf_diag
, '+o', $agent);
90 addhandler
('ENDBURST', undef, undef, 'services::ev_connect');
93 nickserv
::cleanup_users
();
94 nickserv
::fix_vhosts
();
99 addhandler
('ENDBURST', undef, undef, 'services::eos');
101 chanserv
::eos
($_[0]);
104 addhandler
('KILL', undef, undef, 'nickserv::killhandle');
106 addhandler
('NICKCONN', undef, undef, 'services::ev_nickconn');
108 nickserv
::nick_create
(@_[0,2..4,8,5..7,9,10,11]);
112 addhandler
('NICKCHANGE', undef, undef, 'nickserv::nick_change');
113 addhandler
('QUIT', undef, undef, 'nickserv::nick_delete');
114 addhandler
('UMODE', undef, undef, 'nickserv::umode');
115 addhandler
('CHGHOST', undef, undef, 'nickserv::chghost');
116 addhandler
('CHGIDENT', undef, undef, 'nickserv::chgident');
117 addhandler
('USERIP', undef, undef, 'nickserv::userip');
118 addhandler
('SQUIT', undef, undef, 'nickserv::squit') if ircd
::NOQUIT
();
119 addhandler
("OPERUP", undef, undef, 'nickserv::handle_oper');
120 addhandler
('PRIVMSG', undef, undef, 'nickserv::dispatch');
121 addhandler
('PRIVMSG', undef, lc services_conf_nickserv
, 'nickserv::dispatch') if services_conf_nickserv
;
123 addhandler
('BACK', undef, undef, 'nickserv::notify_auths');
126 addhandler
('JOIN', undef, undef, 'chanserv::user_join');
127 addhandler
('SJOIN', undef, undef, 'chanserv::handle_sjoin');
128 addhandler
('PART', undef, undef, 'chanserv::user_part');
129 addhandler
('KICK', undef, undef, 'chanserv::process_kick');
130 addhandler
('MODE', undef, qr/^#/, 'chanserv::chan_mode');
131 addhandler
('TOPIC', undef, undef, 'chanserv::chan_topic');
133 addhandler
('PRIVMSG', undef, undef, 'chanserv::dispatch');
134 addhandler
('PRIVMSG', undef, lc services_conf_chanserv
, 'chanserv::dispatch') if services_conf_chanserv
;
137 addhandler
('PRIVMSG', undef, undef, 'operserv::dispatch');
138 addhandler
('PRIVMSG', undef, lc services_conf_operserv
, 'operserv::dispatch') if services_conf_operserv
;
140 add_timer
('flood_expire', 10, __PACKAGE__
, 'services::flood_expire');
142 sub flood_expire
(;$) {
143 add_timer
('flood_expire', 10, __PACKAGE__
, 'services::flood_expire');
148 addhandler
('PRIVMSG', undef, undef, 'memoserv::dispatch');
149 addhandler
('PRIVMSG', undef, lc services_conf_memoserv
, 'memoserv::dispatch') if services_conf_memoserv
;
150 addhandler
('BACK', undef, undef, 'memoserv::notify');
153 addhandler
('PRIVMSG', undef, undef, 'botserv::dispatch');
154 # botserv takes all PRIVMSG and NOTICEs, so no special dispatch is needed.
155 addhandler
('NOTICE', undef, qr/^#/, 'botserv::chan_msg');
158 addhandler
('PRIVMSG', undef, undef, 'adminserv::dispatch');
159 addhandler
('PRIVMSG', undef, lc services_conf_adminserv
, 'adminserv::dispatch') if services_conf_adminserv
;
161 add_timer
('', 30, __PACKAGE__
, 'services::maint');
162 #add_timer('', 20, __PACKAGE__, 'nickserv::cleanup_users');
163 add_timer
('', 60, __PACKAGE__
, 'nickserv::expire_silence_timed');
166 addhandler
('PRIVMSG', undef, undef, 'hostserv::dispatch');
167 addhandler
('PRIVMSG', undef, lc services_conf_hostserv
, 'hostserv::dispatch') if services_conf_hostserv
;
169 # $nick should be a registered root nick, if applicable
170 # $src is the nick or nickid that sent the command
172 my ($service, $level, $text) = splice(@_, 0, 3);
174 my $hostmask = nickserv
::get_hostmask
($_[0]);
176 # TODO - Record this in the database
178 wlog
($service, $level, "$hostmask - $text");
182 wlog
($main::rsnick
, LOG_INFO
(), " -- Running maintenance routines.");
183 add_timer
('', 3600, __PACKAGE__
, 'services::maint');
188 wlog
($main::rsnick
, LOG_INFO
(), " -- Maintenance routines complete.");
192 return if main
::COMPILE_ONLY
();
193 my $tmpdbh = DBI-
>connect("DBI:mysql:".sql_conf_mysql_db
, sql_conf_mysql_user
, sql_conf_mysql_pass
, { AutoCommit
=> 1, RaiseError
=> 1 });
195 $tmpdbh->do("TRUNCATE TABLE chanuser");
196 $tmpdbh->do("TRUNCATE TABLE nickchg");
197 $tmpdbh->do("TRUNCATE TABLE chan");
198 $tmpdbh->do("TRUNCATE TABLE chanban");
199 $tmpdbh->do("UPDATE user SET online=0, quittime=".time());