]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - src/modes/umode_s.cpp
Release v2.0.25
[user/henk/code/inspircd.git] / src / modes / umode_s.cpp
1 /*
2  * InspIRCd -- Internet Relay Chat Daemon
3  *
4  *   Copyright (C) 2008 Robin Burchell <robin+git@viroteck.net>
5  *   Copyright (C) 2007 Dennis Friis <peavey@inspircd.org>
6  *   Copyright (C) 2006 Craig Edwards <craigedwards@brainbox.cc>
7  *
8  * This file is part of InspIRCd.  InspIRCd is free software: you can
9  * redistribute it and/or modify it under the terms of the GNU General Public
10  * License as published by the Free Software Foundation, version 2.
11  *
12  * This program is distributed in the hope that it will be useful, but WITHOUT
13  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14  * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
15  * details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19  */
20
21
22 #include "inspircd.h"
23 #include "mode.h"
24 #include "channels.h"
25 #include "users.h"
26 #include "modes/umode_s.h"
27
28 ModeUserServerNoticeMask::ModeUserServerNoticeMask() : ModeHandler(NULL, "snomask", 's', PARAM_SETONLY, MODETYPE_USER)
29 {
30         oper = true;
31 }
32
33 ModeAction ModeUserServerNoticeMask::OnModeChange(User* source, User* dest, Channel*, std::string &parameter, bool adding)
34 {
35         /* Set the array fields */
36         if (adding)
37         {
38                 /* Fix for bug #310 reported by Smartys */
39                 if (!dest->modes[UM_SNOMASK])
40                         dest->snomasks.reset();
41
42                 dest->modes[UM_SNOMASK] = true;
43                 parameter = dest->ProcessNoticeMasks(parameter.c_str());
44                 return MODEACTION_ALLOW;
45         }
46         else
47         {
48                 if (dest->modes[UM_SNOMASK] != false)
49                 {
50                         dest->modes[UM_SNOMASK] = false;
51                         return MODEACTION_ALLOW;
52                 }
53         }
54
55         /* Allow the change */
56         return MODEACTION_DENY;
57 }
58
59 std::string ModeUserServerNoticeMask::GetUserParameter(User* user)
60 {
61         std::string masks = user->FormatNoticeMasks();
62         if (masks.length())
63                 masks = "+" + masks;
64         return masks;
65 }
66
67 void ModeUserServerNoticeMask::OnParameterMissing(User* user, User* dest, Channel* channel)
68 {
69         user->WriteServ("NOTICE %s :*** The user mode +s requires a parameter (server notice mask). Please provide a parameter, e.g. '+s +*'.",
70                         user->nick.c_str());
71 }
72