Simplify ModeHandler constructor

git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11701 e03df62e-2008-0410-955e-edbf42e46eb7
This commit is contained in:
danieldg 2009-09-13 20:31:33 +00:00
parent 7892c8a031
commit 1524caf2f7
46 changed files with 165 additions and 147 deletions

View File

@ -406,10 +406,9 @@ class CoreExport Channel : public Extensible
* the channel (to grant ops to them)
* @param user The user to associate the privilage with
* @param prefix The prefix character to associate
* @param prefix_rank The rank (value) of this prefix character
* @param adding True if adding the prefix, false when removing
*/
void SetPrefix(User* user, char prefix, unsigned int prefix_rank, bool adding);
void SetPrefix(User* user, char prefix, bool adding);
/** Check if a user is banned on this channel
* @param user A user to check against the banlist

View File

@ -70,6 +70,16 @@ enum PrefixModeValue
OP_VALUE = 30000
};
enum ParamSpec
{
/** No parameters */
PARAM_NONE,
/** Parameter required on mode setting only */
PARAM_SETONLY,
/** Parameter always required */
PARAM_ALWAYS
};
/**
* Used by ModeHandler::ModeSet() to return the state of a mode upon a channel or user.
* The pair contains an activity flag, true if the mode is set with the given parameter,
@ -94,22 +104,14 @@ typedef std::pair<bool,std::string> ModePair;
class CoreExport ModeHandler : public classbase
{
protected:
/**
* Creator/owner pointer
*/
InspIRCd* ServerInstance;
/**
* The mode letter you're implementing.
*/
char mode;
/**
* Number of parameters when being set
/** What kind of parameters does the mode take?
*/
int n_params_on;
/**
* Number of parameters when being unset
*/
int n_params_off;
ParamSpec parameters_taken;
/**
* Mode is a 'list' mode. The behaviour
* of your mode is now set entirely within
@ -147,9 +149,10 @@ class CoreExport ModeHandler : public classbase
/** The prefix char needed on channel to use this mode,
* only checked for channel modes
*/
char prefixneeded;
int levelrequired;
public:
static InspIRCd* ServerInstance;
/** Module that created this mode. NULL for core modes */
Module* creator;
@ -169,11 +172,8 @@ class CoreExport ModeHandler : public classbase
* and the rank values OP_VALUE, HALFOP_VALUE and VOICE_VALUE respectively. Any prefixes you define should have unique values proportional
* to these three defaults or proportional to another mode in a module you depend on. See src/cmode_o.cpp as an example.
* @param prefixrequired The prefix required to change this mode
* @param translate The translation type for the argument(s) of this mode
*/
ModeHandler(InspIRCd* Instance, Module* me, char modeletter, int parameters_on, int parameters_off,
bool listmode, ModeType type, bool operonly, char mprefix = 0,
char prefixrequired = '%', TranslateType translate = TR_TEXT);
ModeHandler(Module* me, char modeletter, ParamSpec params, ModeType type);
/**
* The default destructor does nothing
*/
@ -187,7 +187,7 @@ class CoreExport ModeHandler : public classbase
* also implement GetPrefixRank() to return an integer
* value for this mode prefix.
*/
char GetPrefix();
inline char GetPrefix() const { return prefix; }
/** Get number of items with this mode set on them
*/
virtual unsigned int GetCount();
@ -205,15 +205,15 @@ class CoreExport ModeHandler : public classbase
/**
* Returns the mode's type
*/
ModeType GetModeType();
inline ModeType GetModeType() const { return m_type; }
/**
* Returns the mode's parameter translation type
*/
TranslateType GetTranslateType();
inline TranslateType GetTranslateType() const { return m_paramtype; }
/**
* Returns true if the mode can only be set/unset by an oper
*/
bool NeedsOper();
inline bool NeedsOper() const { return oper; }
/**
* Returns the number of parameters for the mode. Any non-zero
* value should be considered to be equivalent to one.
@ -314,9 +314,7 @@ class CoreExport ModeHandler : public classbase
*/
virtual void RemoveMode(Channel* channel, irc::modestacker* stack = NULL);
char GetNeededPrefix();
void SetNeededPrefix(char needsprefix);
inline unsigned int GetLevelRequired() const { return levelrequired; }
};
/** A prebuilt mode handler which handles a simple user mode, e.g. no parameters, usable by any user, with no extra
@ -327,8 +325,8 @@ class CoreExport ModeHandler : public classbase
class CoreExport SimpleUserModeHandler : public ModeHandler
{
public:
SimpleUserModeHandler(InspIRCd* Instance, Module* Creator, char modeletter)
: ModeHandler(Instance, Creator, modeletter, 0, 0, false, MODETYPE_USER, false) {}
SimpleUserModeHandler(Module* Creator, char modeletter)
: ModeHandler(Creator, modeletter, PARAM_NONE, MODETYPE_USER) {}
virtual ~SimpleUserModeHandler() {}
virtual ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding);
};
@ -342,7 +340,7 @@ class CoreExport SimpleChannelModeHandler : public ModeHandler
{
public:
SimpleChannelModeHandler(InspIRCd* Instance, Module* Creator, char modeletter)
: ModeHandler(Instance, Creator, modeletter, 0, 0, false, MODETYPE_CHANNEL, false) {}
: ModeHandler(Creator, modeletter, PARAM_NONE, MODETYPE_CHANNEL) {}
virtual ~SimpleChannelModeHandler() {}
virtual ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding);
};

View File

@ -142,10 +142,11 @@ class ListModeBase : public ModeHandler
* @param ctag Configuration tag to get limits from
*/
ListModeBase(InspIRCd* Instance, Module* Creator, char modechar, const std::string &eolstr, unsigned int lnum, unsigned int eolnum, bool autotidy, const std::string &ctag = "banlist")
: ModeHandler(Instance, Creator, modechar, 1, 1, true, MODETYPE_CHANNEL, false),
: ModeHandler(Creator, modechar, PARAM_ALWAYS, MODETYPE_CHANNEL),
listnumeric(lnum), endoflistnumeric(eolnum), endofliststring(eolstr), tidy(autotidy),
configtag(ctag), extItem("listbase_mode_" + std::string(1, mode) + "_list", Creator)
{
list = true;
this->DoRehash();
Extensible::Register(&extItem);
}

View File

@ -351,7 +351,7 @@ Channel* Channel::ForceChan(InspIRCd* Instance, Channel* Ptr, User* user, const
if (mh)
{
/* Set, and make sure that the mode handler knows this mode was now set */
Ptr->SetPrefix(user, mh->GetModeChar(), mh->GetPrefixRank(), true);
Ptr->SetPrefix(user, mh->GetModeChar(), true);
mh->OnModeChange(Instance->FakeClient, Instance->FakeClient, Ptr, nick, true);
}
}
@ -976,7 +976,7 @@ unsigned int Channel::GetPrefixValue(User* user)
return bestrank;
}
void Channel::SetPrefix(User* user, char prefix, unsigned int prefix_value, bool adding)
void Channel::SetPrefix(User* user, char prefix, bool adding)
{
ModeHandler* delta_mh = ServerInstance->Modes->FindMode(prefix, MODETYPE_CHANNEL);
if (!delta_mh)

View File

@ -49,8 +49,11 @@
/* +s (server notice masks) */
#include "modes/umode_s.h"
ModeHandler::ModeHandler(InspIRCd* Instance, Module* Creator, char modeletter, int parameters_on, int parameters_off, bool listmode, ModeType type, bool operonly, char mprefix, char prefixrequired, TranslateType translate)
: ServerInstance(Instance), mode(modeletter), n_params_on(parameters_on), n_params_off(parameters_off), list(listmode), m_type(type), m_paramtype(translate), oper(operonly), prefix(mprefix), count(0), prefixneeded(prefixrequired), creator(Creator)
InspIRCd* ModeHandler::ServerInstance;
ModeHandler::ModeHandler(Module* Creator, char modeletter, ParamSpec Params, ModeType type)
: mode(modeletter), parameters_taken(Params), list(false), m_type(type), m_paramtype(TR_TEXT),
oper(false), prefix(0), count(0), levelrequired(HALFOP_VALUE), creator(Creator)
{
}
@ -63,18 +66,6 @@ bool ModeHandler::IsListMode()
return list;
}
char ModeHandler::GetNeededPrefix()
{
if (prefixneeded == '%' && !ServerInstance->Config->AllowHalfop)
return '@';
return prefixneeded;
}
void ModeHandler::SetNeededPrefix(char needsprefix)
{
prefixneeded = needsprefix;
}
unsigned int ModeHandler::GetPrefixRank()
{
return 0;
@ -91,29 +82,18 @@ void ModeHandler::ChangeCount(int modifier)
ServerInstance->Logs->Log("MODE", DEBUG,"Change count for mode %c is now %d", mode, count);
}
ModeType ModeHandler::GetModeType()
{
return m_type;
}
TranslateType ModeHandler::GetTranslateType()
{
return m_paramtype;
}
bool ModeHandler::NeedsOper()
{
return oper;
}
char ModeHandler::GetPrefix()
{
return prefix;
}
int ModeHandler::GetNumParams(bool adding)
{
return adding ? n_params_on : n_params_off;
switch (parameters_taken)
{
case PARAM_ALWAYS:
return 1;
case PARAM_SETONLY:
return adding ? 1 : 0;
case PARAM_NONE:
break;
}
return 0;
}
char ModeHandler::GetModeChar()
@ -292,23 +272,7 @@ ModeAction ModeParser::TryMode(User* user, User* targetuser, Channel* chan, bool
if (chan && !SkipACL && (MOD_RESULT != MOD_RES_ALLOW))
{
char needed = mh->GetNeededPrefix();
ModeHandler* prefixmode = FindPrefix(needed);
/* If the mode defined by the handler is not '\0', but the handler for it
* cannot be found, they probably dont have the right module loaded to implement
* the prefix they want to compare the mode against, e.g. '&' for m_chanprotect.
* Revert to checking against the minimum core prefix, '%'.
*/
if (needed && !prefixmode)
{
needed = ServerInstance->Config->AllowHalfop ? '%' : '@';
prefixmode = FindPrefix(needed);
}
if (needed)
{
unsigned int neededrank = prefixmode->GetPrefixRank();
unsigned int neededrank = mh->GetLevelRequired();
/* Compare our rank on the channel against the rank of the required prefix,
* allow if >= ours. Because mIRC and xchat throw a tizz if the modes shown
* in NAMES(X) are not in rank order, we know the most powerful mode is listed
@ -318,12 +282,13 @@ ModeAction ModeParser::TryMode(User* user, User* targetuser, Channel* chan, bool
if (ourrank < neededrank)
{
/* Bog off */
// TODO replace with a real search for the proper prefix
char needed = neededrank > HALFOP_VALUE ? '@' : '%';
user->WriteNumeric(ERR_CHANOPRIVSNEEDED, "%s %s :You must have channel privilege %c or above to %sset channel mode %c",
user->nick.c_str(), chan->name.c_str(), needed, adding ? "" : "un", modechar);
return MODEACTION_DENY;
}
}
}
unsigned char handler_id = (modechar - 'A') | mask;
@ -378,7 +343,7 @@ ModeAction ModeParser::TryMode(User* user, User* targetuser, Channel* chan, bool
{
User* user_to_prefix = ServerInstance->FindNick(parameter);
if (user_to_prefix)
chan->SetPrefix(user_to_prefix, modechar, mh->GetPrefixRank(), adding);
chan->SetPrefix(user_to_prefix, modechar, adding);
}
for (ModeWatchIter watchers = modewatchers[handler_id].begin(); watchers != modewatchers[handler_id].end(); watchers++)
@ -978,6 +943,7 @@ void ModeHandler::RemoveMode(Channel* channel, irc::modestacker* stack)
ModeParser::ModeParser(InspIRCd* Instance) : ServerInstance(Instance)
{
ModeHandler::ServerInstance = Instance;
ModeHandler* modes[] =
{
new ModeChannelSecret(Instance),

View File

@ -25,8 +25,9 @@
#include "hashcomp.h"
#include "modes/cmode_b.h"
ModeChannelBan::ModeChannelBan(InspIRCd* Instance) : ModeHandler(Instance, NULL, 'b', 1, 1, true, MODETYPE_CHANNEL, false)
ModeChannelBan::ModeChannelBan(InspIRCd* Instance) : ModeHandler(NULL, 'b', PARAM_ALWAYS, MODETYPE_CHANNEL)
{
list = true;
}
ModeAction ModeChannelBan::OnModeChange(User* source, User*, Channel* channel, std::string &parameter, bool adding)

View File

@ -19,8 +19,12 @@
#include "modules.h"
#include "modes/cmode_h.h"
ModeChannelHalfOp::ModeChannelHalfOp(InspIRCd* Instance) : ModeHandler(Instance, NULL, 'h', 1, 1, true, MODETYPE_CHANNEL, false, '%', '@', TR_NICK)
ModeChannelHalfOp::ModeChannelHalfOp(InspIRCd* Instance) : ModeHandler(NULL, 'h', PARAM_ALWAYS, MODETYPE_CHANNEL)
{
list = true;
prefix = '%';
levelrequired = OP_VALUE;
m_paramtype = TR_NICK;
}
unsigned int ModeChannelHalfOp::GetPrefixRank()

View File

@ -17,7 +17,7 @@
#include "users.h"
#include "modes/cmode_k.h"
ModeChannelKey::ModeChannelKey(InspIRCd* Instance) : ModeHandler(Instance, NULL, 'k', 1, 1, false, MODETYPE_CHANNEL, false)
ModeChannelKey::ModeChannelKey(InspIRCd* Instance) : ModeHandler(NULL, 'k', PARAM_ALWAYS, MODETYPE_CHANNEL)
{
}

View File

@ -17,7 +17,7 @@
#include "users.h"
#include "modes/cmode_l.h"
ModeChannelLimit::ModeChannelLimit(InspIRCd* Instance) : ModeHandler(Instance, NULL, 'l', 1, 0, false, MODETYPE_CHANNEL, false)
ModeChannelLimit::ModeChannelLimit(InspIRCd* Instance) : ModeHandler(NULL, 'l', PARAM_SETONLY, MODETYPE_CHANNEL)
{
}

View File

@ -19,8 +19,12 @@
#include "modules.h"
#include "modes/cmode_o.h"
ModeChannelOp::ModeChannelOp(InspIRCd* Instance) : ModeHandler(Instance, NULL, 'o', 1, 1, true, MODETYPE_CHANNEL, false, '@', '@', TR_NICK)
ModeChannelOp::ModeChannelOp(InspIRCd* Instance) : ModeHandler(NULL, 'o', PARAM_ALWAYS, MODETYPE_CHANNEL)
{
list = true;
prefix = '@';
levelrequired = OP_VALUE;
m_paramtype = TR_NICK;
}
unsigned int ModeChannelOp::GetPrefixRank()

View File

@ -17,7 +17,7 @@
#include "users.h"
#include "modes/cmode_t.h"
ModeChannelTopicOps::ModeChannelTopicOps(InspIRCd* Instance) : ModeHandler(Instance, NULL, 't', 0, 0, false, MODETYPE_CHANNEL, false)
ModeChannelTopicOps::ModeChannelTopicOps(InspIRCd* Instance) : ModeHandler(NULL, 't', PARAM_NONE, MODETYPE_CHANNEL)
{
}

View File

@ -20,8 +20,12 @@
#include "modules.h"
#include "modes/cmode_v.h"
ModeChannelVoice::ModeChannelVoice(InspIRCd* Instance) : ModeHandler(Instance, NULL, 'v', 1, 1, true, MODETYPE_CHANNEL, false, '+', '%', TR_NICK)
ModeChannelVoice::ModeChannelVoice(InspIRCd* Instance) : ModeHandler(NULL, 'v', PARAM_ALWAYS, MODETYPE_CHANNEL)
{
list = true;
prefix = '+';
levelrequired = HALFOP_VALUE;
m_paramtype = TR_NICK;
}
unsigned int ModeChannelVoice::GetPrefixRank()

View File

@ -17,7 +17,7 @@
#include "users.h"
#include "modes/umode_i.h"
ModeUserInvisible::ModeUserInvisible(InspIRCd* Instance) : SimpleUserModeHandler(Instance, NULL, 'i')
ModeUserInvisible::ModeUserInvisible(InspIRCd* Instance) : SimpleUserModeHandler(NULL, 'i')
{
}

View File

@ -17,8 +17,9 @@
#include "users.h"
#include "modes/umode_o.h"
ModeUserOperator::ModeUserOperator(InspIRCd* Instance) : ModeHandler(Instance, NULL, 'o', 0, 0, false, MODETYPE_USER, true)
ModeUserOperator::ModeUserOperator(InspIRCd* Instance) : ModeHandler(NULL, 'o', PARAM_NONE, MODETYPE_USER)
{
oper = true;
}
ModeAction ModeUserOperator::OnModeChange(User* source, User* dest, Channel*, std::string&, bool adding)

View File

@ -17,8 +17,9 @@
#include "users.h"
#include "modes/umode_s.h"
ModeUserServerNoticeMask::ModeUserServerNoticeMask(InspIRCd* Instance) : ModeHandler(Instance, NULL, 's', 1, 0, false, MODETYPE_USER, true)
ModeUserServerNoticeMask::ModeUserServerNoticeMask(InspIRCd* Instance) : ModeHandler(NULL, 's', PARAM_SETONLY, MODETYPE_USER)
{
oper = true;
}
ModeAction ModeUserServerNoticeMask::OnModeChange(User* source, User* dest, Channel*, std::string &parameter, bool adding)

View File

@ -17,7 +17,7 @@
#include "users.h"
#include "modes/umode_w.h"
ModeUserWallops::ModeUserWallops(InspIRCd* Instance) : SimpleUserModeHandler(Instance, NULL, 'w')
ModeUserWallops::ModeUserWallops(InspIRCd* Instance) : SimpleUserModeHandler(NULL, 'w')
{
}

View File

@ -18,7 +18,10 @@
class AuditoriumMode : public ModeHandler
{
public:
AuditoriumMode(InspIRCd* Instance, Module* Creator) : ModeHandler(Instance, Creator, 'u', 0, 0, false, MODETYPE_CHANNEL, false, 0, '@') { }
AuditoriumMode(InspIRCd* Instance, Module* Creator) : ModeHandler(Creator, 'u', PARAM_NONE, MODETYPE_CHANNEL)
{
levelrequired = OP_VALUE;
}
ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding)
{

View File

@ -20,7 +20,7 @@
class BotMode : public SimpleUserModeHandler
{
public:
BotMode(InspIRCd* Instance, Module* Creator) : SimpleUserModeHandler(Instance, Creator, 'B') { }
BotMode(InspIRCd* Instance, Module* Creator) : SimpleUserModeHandler(Creator, 'B') { }
};
class ModuleBotMode : public Module

View File

@ -127,7 +127,7 @@ struct CallerIDExtInfo : public ExtensionItem
class User_g : public SimpleUserModeHandler
{
public:
User_g(InspIRCd* Instance, Module* Creator) : SimpleUserModeHandler(Instance, Creator, 'g') { }
User_g(InspIRCd* Instance, Module* Creator) : SimpleUserModeHandler(Creator, 'g') { }
};
class CommandAccept : public Command

View File

@ -26,7 +26,7 @@ typedef std::map<irc::string,irc::string> censor_t;
class CensorUser : public SimpleUserModeHandler
{
public:
CensorUser(InspIRCd* Instance, Module* Creator) : SimpleUserModeHandler(Instance, Creator, 'G') { }
CensorUser(InspIRCd* Instance, Module* Creator) : SimpleUserModeHandler(Creator, 'G') { }
};
/** Handles channel mode +G

View File

@ -119,8 +119,14 @@ class ChanFounder : public ModeHandler, public FounderProtectBase
{
public:
ChanFounder(InspIRCd* Instance, Module* Creator, char my_prefix, bool &depriv_self, bool &depriv_others)
: ModeHandler(Instance, Creator, 'q', 1, 1, true, MODETYPE_CHANNEL, false, my_prefix, 0, TR_NICK),
FounderProtectBase(Instance, 'q', "founder", 386, 387, depriv_self, depriv_others) { }
: ModeHandler(Creator, 'q', PARAM_ALWAYS, MODETYPE_CHANNEL),
FounderProtectBase(Instance, 'q', "founder", 386, 387, depriv_self, depriv_others)
{
ModeHandler::list = true;
prefix = my_prefix;
levelrequired = FOUNDER_VALUE;
m_paramtype = TR_NICK;
}
unsigned int GetPrefixRank()
{
@ -194,8 +200,14 @@ class ChanProtect : public ModeHandler, public FounderProtectBase
{
public:
ChanProtect(InspIRCd* Instance, Module* Creator, char my_prefix, bool &depriv_self, bool &depriv_others)
: ModeHandler(Instance, Creator, 'a', 1, 1, true, MODETYPE_CHANNEL, false, my_prefix, 0, TR_NICK),
FounderProtectBase(Instance,'a',"protected user", 388, 389, depriv_self, depriv_others) { }
: ModeHandler(Creator, 'a', PARAM_ALWAYS, MODETYPE_CHANNEL),
FounderProtectBase(Instance,'a',"protected user", 388, 389, depriv_self, depriv_others)
{
ModeHandler::list = true;
prefix = my_prefix;
levelrequired = PROTECT_VALUE;
m_paramtype = TR_NICK;
}
unsigned int GetPrefixRank()
{

View File

@ -64,7 +64,7 @@ class CloakUser : public ModeHandler
}
CloakUser(InspIRCd* Instance, Module* source, Module* Hash)
: ModeHandler(Instance, source, 'x', 0, 0, false, MODETYPE_USER, false), HashProvider(Hash),
: ModeHandler(source, 'x', PARAM_NONE, MODETYPE_USER), HashProvider(Hash),
ext("cloaked_host", source)
{
}

View File

@ -20,7 +20,7 @@
class PrivacyMode : public ModeHandler
{
public:
PrivacyMode(InspIRCd* Instance, Module* Creator) : ModeHandler(Instance, Creator, 'c', 0, 0, false, MODETYPE_USER, false) { }
PrivacyMode(InspIRCd* Instance, Module* Creator) : ModeHandler(Creator, 'c', PARAM_NONE, MODETYPE_USER) { }
ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding)
{

View File

@ -20,7 +20,7 @@
class User_d : public ModeHandler
{
public:
User_d(InspIRCd* Instance, Module* Creator) : ModeHandler(Instance, Creator, 'd', 0, 0, false, MODETYPE_USER, false) { }
User_d(InspIRCd* Instance, Module* Creator) : ModeHandler(Creator, 'd', PARAM_NONE, MODETYPE_USER) { }
ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding)
{

View File

@ -19,7 +19,10 @@ class DelayJoinMode : public ModeHandler
private:
CUList empty;
public:
DelayJoinMode(InspIRCd* Instance, Module* Parent) : ModeHandler(Instance, Parent, 'D', 0, 0, false, MODETYPE_CHANNEL, false, 0, '@') {};
DelayJoinMode(InspIRCd* Instance, Module* Parent) : ModeHandler(Parent, 'D', PARAM_NONE, MODETYPE_CHANNEL)
{
levelrequired = OP_VALUE;
}
ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding);
};

View File

@ -22,7 +22,11 @@ class DelayMsgMode : public ModeHandler
CUList empty;
public:
LocalIntExt jointime;
DelayMsgMode(InspIRCd* Instance, Module* Parent) : ModeHandler(Instance, Parent, 'd', 1, 0, false, MODETYPE_CHANNEL, false, 0, '@'), jointime("delaymsg", Parent) {};
DelayMsgMode(InspIRCd* Instance, Module* Parent) : ModeHandler(Parent, 'd', PARAM_SETONLY, MODETYPE_CHANNEL)
, jointime("delaymsg", Parent)
{
levelrequired = OP_VALUE;
}
ModePair ModeSet(User*, User*, Channel* channel, const std::string &parameter)
{

View File

@ -22,7 +22,10 @@ static std::map<irc::string, std::string> helpop_map;
class Helpop : public ModeHandler
{
public:
Helpop(InspIRCd* Instance, Module* Creator) : ModeHandler(Instance, Creator, 'h', 0, 0, false, MODETYPE_USER, true) { }
Helpop(InspIRCd* Instance, Module* Creator) : ModeHandler(Creator, 'h', PARAM_NONE, MODETYPE_USER)
{
oper = true;
}
ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding)
{

View File

@ -20,7 +20,7 @@
class HideChans : public ModeHandler
{
public:
HideChans(InspIRCd* Instance, Module* Creator) : ModeHandler(Instance, Creator, 'I', 0, 0, false, MODETYPE_USER, false) { }
HideChans(InspIRCd* Instance, Module* Creator) : ModeHandler(Creator, 'I', PARAM_NONE, MODETYPE_USER) { }
ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding)
{

View File

@ -20,7 +20,10 @@
class HideOper : public ModeHandler
{
public:
HideOper(InspIRCd* Instance, Module* Creator) : ModeHandler(Instance, Creator, 'H', 0, 0, false, MODETYPE_USER, true) { }
HideOper(InspIRCd* Instance, Module* Creator) : ModeHandler(Creator, 'H', PARAM_NONE, MODETYPE_USER)
{
oper = true;
}
ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding)
{

View File

@ -1,5 +1,5 @@
/* +------------------------------------+
* | Inspire Internet Relay Chat Daemon |
* | Inspire Internet Relay Chat Daemon
* +------------------------------------+
*
* InspIRCd: (C) 2002-2009 InspIRCd Development Team
@ -19,8 +19,9 @@
class InvisibleMode : public ModeHandler
{
public:
InvisibleMode(InspIRCd* Instance, Module* Creator) : ModeHandler(Instance, Creator, 'Q', 0, 0, false, MODETYPE_USER, true)
InvisibleMode(InspIRCd* Instance, Module* Creator) : ModeHandler(Creator, 'Q', PARAM_NONE, MODETYPE_USER)
{
oper = true;
}
~InvisibleMode()

View File

@ -87,7 +87,7 @@ class JoinFlood : public ModeHandler
{
public:
SimpleExtItem<joinfloodsettings> ext;
JoinFlood(InspIRCd* Instance, Module* Creator) : ModeHandler(Instance, Creator, 'j', 1, 0, false, MODETYPE_CHANNEL, false),
JoinFlood(InspIRCd* Instance, Module* Creator) : ModeHandler(Creator, 'j', PARAM_SETONLY, MODETYPE_CHANNEL),
ext("joinflood", Creator) { }
ModePair ModeSet(User* source, User* dest, Channel* channel, const std::string &parameter)

View File

@ -31,7 +31,7 @@ class KickRejoin : public ModeHandler
{
public:
SimpleExtItem<delaylist> ext;
KickRejoin(InspIRCd* Instance, Module* Creator) : ModeHandler(Instance, Creator, 'J', 1, 0, false, MODETYPE_CHANNEL, false),
KickRejoin(InspIRCd* Instance, Module* Creator) : ModeHandler(Creator, 'J', PARAM_SETONLY, MODETYPE_CHANNEL),
ext("norejoinusers", Creator) { }
ModePair ModeSet(User* source, User* dest, Channel* channel, const std::string &parameter)

View File

@ -77,7 +77,7 @@ class MsgFlood : public ModeHandler
{
public:
SimpleExtItem<floodsettings> ext;
MsgFlood(InspIRCd* Instance, Module* Creator) : ModeHandler(Instance, Creator, 'f', 1, 0, false, MODETYPE_CHANNEL, false),
MsgFlood(InspIRCd* Instance, Module* Creator) : ModeHandler(Creator, 'f', PARAM_SETONLY, MODETYPE_CHANNEL),
ext("messageflood", Creator) { }
ModePair ModeSet(User* source, User* dest, Channel* channel, const std::string &parameter)

View File

@ -91,7 +91,7 @@ class NickFlood : public ModeHandler
{
public:
SimpleExtItem<nickfloodsettings> ext;
NickFlood(InspIRCd* Instance, Module* Creator) : ModeHandler(Instance, Creator, 'F', 1, 0, false, MODETYPE_CHANNEL, false),
NickFlood(InspIRCd* Instance, Module* Creator) : ModeHandler(Creator, 'F', PARAM_SETONLY, MODETYPE_CHANNEL),
ext("nickflood", Creator) { }
ModePair ModeSet(User* source, User* dest, Channel* channel, const std::string &parameter)

View File

@ -18,7 +18,7 @@
class NoCTCP : public ModeHandler
{
public:
NoCTCP(InspIRCd* Instance, Module* Creator) : ModeHandler(Instance, Creator, 'C', 0, 0, false, MODETYPE_CHANNEL, false) { }
NoCTCP(InspIRCd* Instance, Module* Creator) : ModeHandler(Creator, 'C', PARAM_NONE, MODETYPE_CHANNEL) { }
ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding)
{

View File

@ -18,7 +18,7 @@
class NoNicks : public ModeHandler
{
public:
NoNicks(InspIRCd* Instance, Module* Creator) : ModeHandler(Instance, Creator, 'N', 0, 0, false, MODETYPE_CHANNEL, false) { }
NoNicks(InspIRCd* Instance, Module* Creator) : ModeHandler(Creator, 'N', PARAM_NONE, MODETYPE_CHANNEL) { }
ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding)
{

View File

@ -105,9 +105,12 @@ class CommandOjoin : public Command
class NetworkPrefix : public ModeHandler
{
public:
NetworkPrefix(InspIRCd* Instance, Module* parent)
: ModeHandler(Instance, parent, 'Y', 1, 1, true, MODETYPE_CHANNEL, false, NPrefix, 0, TR_NICK)
NetworkPrefix(Module* parent) : ModeHandler(parent, 'Y', PARAM_ALWAYS, MODETYPE_CHANNEL)
{
list = true;
prefix = NPrefix;
levelrequired = 0xFFFFFFFF;
m_paramtype = TR_NICK;
}
ModePair ModeSet(User* source, User* dest, Channel* channel, const std::string &parameter)
@ -249,7 +252,7 @@ class ModuleOjoin : public Module
OnRehash(NULL);
/* Initialise module variables */
np = new NetworkPrefix(Me, this);
np = new NetworkPrefix(this);
if (!ServerInstance->Modes->AddMode(np))
{

View File

@ -19,7 +19,7 @@ class OperChans : public ModeHandler
{
public:
/* This is an oper-only mode */
OperChans(InspIRCd* Instance, Module* Creator) : ModeHandler(Instance, Creator, 'O', 0, 0, false, MODETYPE_CHANNEL, true) { }
OperChans(InspIRCd* Instance, Module* Creator) : ModeHandler(Creator, 'O', PARAM_NONE, MODETYPE_CHANNEL) { oper = true; }
ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding)
{

View File

@ -24,7 +24,13 @@
class OperPrefixMode : public ModeHandler
{
public:
OperPrefixMode(InspIRCd* Instance, Module* Creator, char pfx) : ModeHandler(Instance, Creator, 'y', 1, 1, true, MODETYPE_CHANNEL, false, pfx, pfx, TR_NICK) { }
OperPrefixMode(InspIRCd* Instance, Module* Creator, char pfx) : ModeHandler(Creator, 'y', PARAM_ALWAYS, MODETYPE_CHANNEL)
{
list = true;
prefix = pfx;
levelrequired = OPERPREFIX_VALUE;
m_paramtype = TR_NICK;
}
unsigned int GetPrefixRank()
{

View File

@ -83,7 +83,7 @@ static bool WriteDatabase(InspIRCd *ServerInstance)
class PermChannel : public ModeHandler
{
public:
PermChannel(InspIRCd* Instance, Module* Creator) : ModeHandler(Instance, Creator, 'P', 0, 0, false, MODETYPE_CHANNEL, false) { }
PermChannel(InspIRCd* Instance, Module* Creator) : ModeHandler(Creator, 'P', PARAM_NONE, MODETYPE_CHANNEL) { }
ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding)
{

View File

@ -20,7 +20,7 @@
class Redirect : public ModeHandler
{
public:
Redirect(InspIRCd* Instance, Module* Creator) : ModeHandler(Instance, Creator, 'L', 1, 0, false, MODETYPE_CHANNEL, false) { }
Redirect(InspIRCd* Instance, Module* Creator) : ModeHandler(Creator, 'L', PARAM_SETONLY, MODETYPE_CHANNEL) { }
ModePair ModeSet(User* source, User* dest, Channel* channel, const std::string &parameter)
{

View File

@ -22,7 +22,7 @@ class Channel_r : public ModeHandler
{
public:
Channel_r(InspIRCd* Instance, Module* Creator) : ModeHandler(Instance, Creator, 'r', 0, 0, false, MODETYPE_CHANNEL, false) { }
Channel_r(InspIRCd* Instance, Module* Creator) : ModeHandler(Creator, 'r', PARAM_NONE, MODETYPE_CHANNEL) { }
ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding)
{
@ -52,7 +52,7 @@ class User_r : public ModeHandler
{
public:
User_r(InspIRCd* Instance, Module* Creator) : ModeHandler(Instance, Creator, 'r', 0, 0, false, MODETYPE_USER, false) { }
User_r(InspIRCd* Instance, Module* Creator) : ModeHandler(Creator, 'r', PARAM_NONE, MODETYPE_USER) { }
ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding)
{
@ -86,7 +86,7 @@ class AChannel_R : public SimpleChannelModeHandler
class AUser_R : public SimpleUserModeHandler
{
public:
AUser_R(InspIRCd* Instance, Module* Creator) : SimpleUserModeHandler(Instance, Creator, 'R') { }
AUser_R(InspIRCd* Instance, Module* Creator) : SimpleUserModeHandler(Creator, 'R') { }
};
/** Channel mode +M - unidentified users cannot message channel

View File

@ -20,7 +20,7 @@
class ServProtectMode : public ModeHandler
{
public:
ServProtectMode(InspIRCd* Instance, Module* Creator) : ModeHandler(Instance, Creator, 'k', 0, 0, false, MODETYPE_USER, true) { }
ServProtectMode(InspIRCd* Instance, Module* Creator) : ModeHandler(Creator, 'k', PARAM_NONE, MODETYPE_USER) { oper = true; }
ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding)
{
@ -34,8 +34,6 @@ class ServProtectMode : public ModeHandler
*/
return MODEACTION_DENY;
}
bool NeedsOper() { return true; }
};
class ModuleServProtectMode : public Module

View File

@ -20,7 +20,10 @@
class SeeWhois : public ModeHandler
{
public:
SeeWhois(InspIRCd* Instance, Module* Creator, bool IsOpersOnly) : ModeHandler(Instance, Creator, 'W', 0, 0, false, MODETYPE_USER, IsOpersOnly) { }
SeeWhois(InspIRCd* Instance, Module* Creator, bool IsOpersOnly) : ModeHandler(Creator, 'W', PARAM_NONE, MODETYPE_USER)
{
oper = IsOpersOnly;
}
ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding)
{

View File

@ -21,7 +21,7 @@
class SSLMode : public ModeHandler
{
public:
SSLMode(InspIRCd* Instance, Module* Creator) : ModeHandler(Instance, Creator, 'z', 0, 0, false, MODETYPE_CHANNEL, false) { }
SSLMode(InspIRCd* Instance, Module* Creator) : ModeHandler(Creator, 'z', PARAM_NONE, MODETYPE_CHANNEL) { }
ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding)
{

View File

@ -28,7 +28,7 @@ class ChannelStripColor : public SimpleChannelModeHandler
class UserStripColor : public SimpleUserModeHandler
{
public:
UserStripColor(InspIRCd* Instance, Module* Creator) : SimpleUserModeHandler(Instance, Creator, 'S') { }
UserStripColor(InspIRCd* Instance, Module* Creator) : SimpleUserModeHandler(Creator, 'S') { }
};