*/
int levelrequired;
+ /** The prefix rank of this mode, used to compare prefix
+ * modes
+ */
+ unsigned int prefixrank;
+
public:
/**
* The constructor for ModeHandler initalizes the mode handler.
* PrefixModeValue enum and Channel::GetPrefixValue() for
* more information.
*/
- virtual unsigned int GetPrefixRank();
+ unsigned int GetPrefixRank() const { return prefixrank; }
/**
* Returns the mode's type
*/
ModeHandler::ModeHandler(Module* Creator, const std::string& Name, char modeletter, ParamSpec Params, ModeType type)
: ServiceProvider(Creator, Name, SERVICE_MODE), m_paramtype(TR_TEXT),
parameters_taken(Params), mode(modeletter), prefix(0), oper(false),
- list(false), m_type(type), levelrequired(HALFOP_VALUE)
+ list(false), m_type(type), levelrequired(HALFOP_VALUE), prefixrank(0)
{
}
{
}
-unsigned int ModeHandler::GetPrefixRank()
-{
- return 0;
-}
-
int ModeHandler::GetNumParams(bool adding)
{
switch (parameters_taken)
prefix = '@';
levelrequired = OP_VALUE;
m_paramtype = TR_NICK;
-}
-
-unsigned int ModeChannelOp::GetPrefixRank()
-{
- return OP_VALUE;
+ prefixrank = OP_VALUE;
}
ModeAction ModeChannelOp::OnModeChange(User* source, User*, Channel* channel, std::string ¶meter, bool adding)
prefix = '+';
levelrequired = HALFOP_VALUE;
m_paramtype = TR_NICK;
-}
-
-unsigned int ModeChannelVoice::GetPrefixRank()
-{
- return VOICE_VALUE;
+ prefixrank = VOICE_VALUE;
}
ModeAction ModeChannelVoice::OnModeChange(User* source, User*, Channel* channel, std::string ¶meter, bool adding)
{
public:
reference<ConfigTag> tag;
- int rank;
bool depriv;
+
CustomPrefixMode(Module* parent, ConfigTag* Tag)
: ModeHandler(parent, Tag->getString("name"), 0, PARAM_ALWAYS, MODETYPE_CHANNEL), tag(Tag)
{
prefix = v.c_str()[0];
v = tag->getString("letter");
mode = v.c_str()[0];
- rank = tag->getInt("rank");
- levelrequired = tag->getInt("ranktoset", rank);
+ prefixrank = tag->getInt("rank");
+ levelrequired = tag->getInt("ranktoset", prefixrank);
depriv = tag->getBool("depriv", true);
}
- unsigned int GetPrefixRank()
- {
- return rank;
- }
-
ModResult AccessCheck(User* src, Channel*, std::string& value, bool adding)
{
if (!adding && src->nick == value && depriv)
tags.first++;
CustomPrefixMode* mh = new CustomPrefixMode(this, tag);
modes.push_back(mh);
- if (mh->rank <= 0)
+ if (mh->GetPrefixRank() == 0)
throw ModuleException("Rank must be specified for prefix at " + tag->getTagLocation());
if (!isalpha(mh->GetModeChar()))
throw ModuleException("Mode must be a letter for prefix at " + tag->getTagLocation());
prefix = NPrefix;
levelrequired = INT_MAX;
m_paramtype = TR_NICK;
- }
-
- unsigned int GetPrefixRank()
- {
- return NETWORK_VALUE;
+ prefixrank = NETWORK_VALUE;
}
ModResult AccessCheck(User* source, Channel* channel, std::string ¶meter, bool adding)
prefix = pfx.empty() ? '!' : pfx[0];
levelrequired = OPERPREFIX_VALUE;
m_paramtype = TR_NICK;
- }
-
- unsigned int GetPrefixRank()
- {
- return OPERPREFIX_VALUE;
+ prefixrank = OPERPREFIX_VALUE;
}
ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string ¶meter, bool adding)