diff options
author | Adam <Adam@anope.org> | 2014-10-06 13:52:43 -0400 |
---|---|---|
committer | Adam <Adam@anope.org> | 2014-10-06 14:06:36 -0400 |
commit | be928b5bbc3f77050c4042bde151b370f4dd01e9 (patch) | |
tree | 300ffb7552430b8dd0fddc95e17c588cde668632 | |
parent | 31bc1d6b828f400a3e4f4fc56657b54f58e3ce1e (diff) |
Clean up collide timers on identify, otherwise you can login and logout before the timer tick which will still enforce the collide
-rw-r--r-- | modules/pseudoclients/nickserv.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/modules/pseudoclients/nickserv.cpp b/modules/pseudoclients/nickserv.cpp index a7941fc51..c299c0da3 100644 --- a/modules/pseudoclients/nickserv.cpp +++ b/modules/pseudoclients/nickserv.cpp @@ -11,6 +11,9 @@ #include "module.h" +class NickServCollide; +static std::set<NickServCollide *> collides; + /** Timer for colliding nicks to force people off of nicknames */ class NickServCollide : public Timer @@ -23,6 +26,17 @@ class NickServCollide : public Timer public: NickServCollide(Module *me, NickServService *nss, User *user, NickAlias *nick, time_t delay) : Timer(me, delay), service(nss), u(user), ts(user->timestamp), na(nick) { + collides.insert(this); + } + + ~NickServCollide() + { + collides.erase(this); + } + + User *GetUser() + { + return u; } void Tick(time_t t) anope_override @@ -344,6 +358,16 @@ class NickServCore : public Module, public NickServService "Your privacy is respected; this e-mail won't be given to\n" "any third-party person."), Config->StrictPrivmsg.c_str(), NickServ->nick.c_str()); } + + for (std::set<NickServCollide *>::iterator it = collides.begin(); it != collides.end(); ++it) + { + NickServCollide *c = *it; + if (c->GetUser() == u) + { + delete c; + break; + } + } } void OnNickGroup(User *u, NickAlias *target) anope_override |