+ // Adding - XXX todo make this respect <insane> tag perhaps..
+ unsigned long duration;
+ if (!InspIRCd::Duration(parameters[1], duration))
+ {
+ user->WriteNotice("*** Invalid duration for CBan.");
+ return CMD_FAILURE;
+ }
+ const char *reason = (parameters.size() > 2) ? parameters[2].c_str() : "No reason supplied";
+ CBan* r = new CBan(ServerInstance->Time(), duration, user->nick.c_str(), reason, parameters[0].c_str());
+
+ if (ServerInstance->XLines->AddLine(r, user))
+ {
+ if (!duration)
+ {
+ ServerInstance->SNO->WriteGlobalSno('x', "%s added permanent CBan for %s: %s", user->nick.c_str(), parameters[0].c_str(), reason);
+ }
+ else
+ {
+ ServerInstance->SNO->WriteGlobalSno('x', "%s added timed CBan for %s, expires in %s (on %s): %s",
+ user->nick.c_str(), parameters[0].c_str(), InspIRCd::DurationString(duration).c_str(),
+ InspIRCd::TimeString(ServerInstance->Time() + duration).c_str(), reason);
+ }
+ }
+ else
+ {
+ delete r;
+ user->WriteNotice("*** CBan for " + parameters[0] + " already exists");
+ return CMD_FAILURE;
+ }