1 /* +------------------------------------+
\r * | Inspire Internet Relay Chat Daemon |
\r * +------------------------------------+
\r *
\r * InspIRCd: (C) 2002-2007 InspIRCd Development Team
\r * See: http://www.inspircd.org/wiki/index.php/Credits
\r *
\r * This program is free but copyrighted software; see
\r * the file COPYING for details.
\r *
\r * ---------------------------------------------------
\r */
\r\r#include "inspircd.h"
\r#include "mode.h"
\r#include "channels.h"
\r#include "users.h"
\r#include "modes/umode_o.h"
\r\rModeUserOperator::ModeUserOperator(InspIRCd* Instance) : ModeHandler(Instance, 'o', 0, 0, false, MODETYPE_USER, true)
\r{
\r}
\r\rModeAction ModeUserOperator::OnModeChange(userrec* source, userrec* dest, chanrec* channel, std::string ¶meter, bool adding)
\r{
\r /* Only opers can execute this class at all */
\r if (!*source->oper)
\r return MODEACTION_DENY;
\r\r /* Not even opers can GIVE the +o mode, only take it away */
\r if (adding)
\r return MODEACTION_DENY;
\r\r /* Set the bitfields.
\r * Note that oper status is only given in cmd_oper.cpp
\r * NOT here. It is impossible to directly set +o without
\r * verifying as an oper and getting an opertype assigned
\r * to your userrec!
\r */
\r ServerInstance->SNO->WriteToSnoMask('o', "User %s de-opered (by %s)", dest->nick, source->nick);
\r dest->UnOper();
\r\r return MODEACTION_ALLOW;
\r}
\r\runsigned int ModeUserOperator::GetCount()
\r{
\r return ServerInstance->all_opers.size();
\r}
\r