2 * InspIRCd -- Internet Relay Chat Daemon
4 * Copyright (C) 2017 Sadie Powell <sadie@witchery.services>
5 * Copyright (C) 2014 Attila Molnar <attilamolnar@hush.com>
6 * Copyright (C) 2012 Robby <robby@chatbelgie.be>
7 * Copyright (C) 2009 Daniel De Graaf <danieldg@inspircd.org>
8 * Copyright (C) 2007 Robin Burchell <robin+git@viroteck.net>
9 * Copyright (C) 2007 Dennis Friis <peavey@inspircd.org>
10 * Copyright (C) 2006, 2010 Craig Edwards <brain@inspircd.org>
12 * This file is part of InspIRCd. InspIRCd is free software: you can
13 * redistribute it and/or modify it under the terms of the GNU General Public
14 * License as published by the Free Software Foundation, version 2.
16 * This program is distributed in the hope that it will be useful, but WITHOUT
17 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
18 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
21 * You should have received a copy of the GNU General Public License
22 * along with this program. If not, see <http://www.gnu.org/licenses/>.
27 #include "core_user.h"
29 ModeUserOperator::ModeUserOperator(Module* Creator)
30 : ModeHandler(Creator, "oper", 'o', PARAM_NONE, MODETYPE_USER)
35 ModeAction ModeUserOperator::OnModeChange(User* source, User* dest, Channel*, std::string&, bool adding)
37 /* Only opers can execute this class at all */
38 if (!source->server->IsULine() && !source->IsOper())
39 return MODEACTION_DENY;
41 /* Not even opers can GIVE the +o mode, only take it away */
43 return MODEACTION_DENY;
46 * Note that oper status is only given in User::Oper()
47 * NOT here. It is impossible to directly set +o without
48 * verifying as an oper and getting an opertype assigned
51 char snomask = IS_LOCAL(dest) ? 'o' : 'O';
52 ServerInstance->SNO->WriteToSnoMask(snomask, "User %s de-opered (by %s)", dest->nick.c_str(), source->nick.c_str());
55 return MODEACTION_ALLOW;