#include "modes/cmode_l.h"
/* +o (channel op) */
#include "modes/cmode_o.h"
-/* +h (channel halfop) */
-#include "modes/cmode_h.h"
/* +v (channel voice) */
#include "modes/cmode_v.h"
/* +w (see wallops) */
#include "modes/umode_s.h"
ModeHandler::ModeHandler(Module* Creator, const std::string& Name, char modeletter, ParamSpec Params, ModeType type)
- : m_paramtype(TR_TEXT), parameters_taken(Params), mode(modeletter), prefix(0), oper(false),
- list(false), m_type(type), count(0), levelrequired(HALFOP_VALUE), creator(Creator), name(Name)
+ : ServiceProvider(Creator, Name, type == MODETYPE_CHANNEL ? SERVICE_CMODE : SERVICE_UMODE), m_paramtype(TR_TEXT),
+ parameters_taken(Params), mode(modeletter), prefix(0), oper(false),
+ list(false), m_type(type), count(0), levelrequired(HALFOP_VALUE)
{
}
return 0;
}
-char ModeHandler::GetModeChar()
-{
- return mode;
-}
-
std::string ModeHandler::GetUserParameter(User* user)
{
return "";
return MODEACTION_DENY;
}
+ModeAction ParamChannelModeHandler::OnModeChange(User* source, User* dest, Channel* channel, std::string ¶meter, bool adding)
+{
+ if (adding && !ParamValidate(parameter))
+ return MODEACTION_DENY;
+ std::string now = channel->GetModeParameter(this);
+ if (parameter == now)
+ return MODEACTION_DENY;
+ if (adding)
+ channel->SetModeParam(this, parameter);
+ else
+ channel->SetModeParam(this, "");
+ return MODEACTION_ALLOW;
+}
+
+bool ParamChannelModeHandler::ParamValidate(std::string& parameter)
+{
+ return true;
+}
+
ModeWatcher::ModeWatcher(Module* Creator, char modeletter, ModeType type)
: mode(modeletter), m_type(type), creator(Creator)
{
return type1 + "," + type2 + "," + type3 + "," + type4;
}
-std::string ModeParser::BuildPrefixes()
+std::string ModeParser::BuildPrefixes(bool lettersAndModes)
{
std::string mletters;
std::string mprefixes;
mprefixes = mprefixes + n->second.second;
}
- return "(" + mprefixes + ")" + mletters;
+ return lettersAndModes ? "(" + mprefixes + ")" + mletters : mletters;
}
bool ModeParser::AddModeWatcher(ModeWatcher* mw)
ModeParser::~ModeParser()
{
- ModeHandler* mh = FindMode('h', MODETYPE_CHANNEL);
- if (mh)
- {
- mh->cull();
- delete mh;
- }
}