/** Generate a shun
*/
- XLine* Generate(time_t set_time, long duration, std::string source, std::string reason, std::string xline_specific_mask) CXX11_OVERRIDE
+ XLine* Generate(time_t set_time, unsigned long duration, const std::string& source, const std::string& reason, const std::string& xline_specific_mask) CXX11_OVERRIDE
{
return new Shun(set_time, duration, source, reason, xline_specific_mask);
}
if (parameters.size() == 1)
{
- if (ServerInstance->XLines->DelLine(parameters[0].c_str(), "SHUN", user))
+ std::string reason;
+
+ if (ServerInstance->XLines->DelLine(parameters[0].c_str(), "SHUN", reason, user))
{
- ServerInstance->SNO->WriteToSnoMask('x', "%s removed SHUN on %s", user->nick.c_str(), parameters[0].c_str());
+ ServerInstance->SNO->WriteToSnoMask('x', "%s removed SHUN on %s: %s", user->nick.c_str(), parameters[0].c_str(), reason.c_str());
}
- else if (ServerInstance->XLines->DelLine(target.c_str(), "SHUN", user))
+ else if (ServerInstance->XLines->DelLine(target.c_str(), "SHUN", reason, user))
{
- ServerInstance->SNO->WriteToSnoMask('x',"%s removed SHUN on %s", user->nick.c_str(), target.c_str());
+ ServerInstance->SNO->WriteToSnoMask('x', "%s removed SHUN on %s: %s", user->nick.c_str(), target.c_str(), reason.c_str());
}
else
{
std::string expr;
if (parameters.size() > 2)
{
- duration = InspIRCd::Duration(parameters[1]);
+ if (!InspIRCd::Duration(parameters[1], duration))
+ {
+ user->WriteNotice("*** Invalid duration for SHUN.");
+ return CMD_FAILURE;
+ }
expr = parameters[2];
}
else
else
{
delete r;
- user->WriteNotice("*** Shun for " + target + " already exists");
+ user->WriteNotice("*** Shun for " + target + " already exists.");
return CMD_FAILURE;
}
}