/* $ModDesc: Gives /cban, aka C:lines. Think Q:lines, for channels. */
-Server *Srv;
-vector<CBan> cbans;
+extern time_t TIME;
class CBan
{
std::string reason;
public:
- CBan(std::string chname, std::string reason, unsigned long expiry)
+ CBan(std::string cn, std::string rs, unsigned long ex)
{
-
+ chname = cn;
+ reason = rs;
+ expiry = ex;
}
std::string GetName()
{
- return chname;
+ return this->chname;
}
std::string GetReason()
{
- return reason;
+ return this->reason;
}
unsigned long GetExpiry()
{
- return expiry;
+ return this->expiry;
}
};
+/* cbans is declared here, as our type is right above. Don't try move it. */
+vector<CBan> cbans;
+
class cmd_cban : public command_t
{
private:
Server *Srv;
public:
- cmd_cban () : command_t("CBAN", 'o', 1)
+ cmd_cban (Server* Me) : command_t("CBAN", 'o', 1)
{
this->source = "m_cban.so";
+ this->Srv = Me;
}
void Handle(char **parameters, int pcnt, userrec *user)
if (pcnt == 1)
{
/* form: CBAN #channel removes a CBAN */
+ for (vector<CBan>::iterator myiter; myiter < cbans.end(); myiter++)
+ {
+ if (parameters[0] == (*myiter).GetName())
+ {
+ cbans.erase(myiter);
+ break;
+ }
+ }
}
else if (pcnt >= 2)
{
/* full form to add a CBAN */
/* XXX - checking on chnames */
chname = parameters[0];
- expiry = TIME + Srv->Duration(parameters[1]);
+ expiry = TIME + Srv->CalcDuration(parameters[1]);
reason = parameters[2];
CBan meow(chname, reason, expiry);
- cbans.push_back(meow)
+ cbans.push_back(meow);
}
}
};
class ModuleCBan : public Module
{
cmd_cban* mycommand;
+ Server* Srv;
public:
ModuleCBan(Server* Me) : Module::Module(Me)
{
Srv = Me;
- mycommand = new cmd_cban();
+ mycommand = new cmd_cban(Srv);
Srv->AddCommand(mycommand);
}
- virtual int OnUserPreJoin (userrec *user, chanrec *chan, const char *cname)
+ virtual int OnUserPreJoin(userrec *user, chanrec *chan, const char *cname)
{
/* check cbans in here, and apply as necessary. */
+ log(DEBUG,"In OnUserPreJoin cbans.size() == %d",cbans.size());
std::string chname = cname;
for (unsigned int a = 0; a < cbans.size(); a++)
{
+ log(DEBUG,"m_cban: DEBUG: checking %s against %s in OnPreUserJoin()", chname.c_str(), cbans[a].GetName().c_str());
if (chname == cbans[a].GetName())
{
/* matches CBAN */
+ WriteOpers("DENY join");
return 1;
}
}
+ log(DEBUG,"DONE checking, allowed");
+
/* Allow the change. */
return 0;
}