summaryrefslogtreecommitdiff
path: root/modules/pseudoclients/nickserv.cpp
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2012-02-14 15:13:27 -0500
committerAdam <Adam@anope.org>2012-02-14 15:13:27 -0500
commita9772cde21407c89abd161d51aff45267f87b1fb (patch)
tree9e57ba6c121d3843888917d968dd4f5d030b57cf /modules/pseudoclients/nickserv.cpp
parent086790d6331357022f4da17c76b26b9fc6e2ad90 (diff)
Clean up and reorganize our header files
Diffstat (limited to 'modules/pseudoclients/nickserv.cpp')
-rw-r--r--modules/pseudoclients/nickserv.cpp54
1 files changed, 54 insertions, 0 deletions
diff --git a/modules/pseudoclients/nickserv.cpp b/modules/pseudoclients/nickserv.cpp
index c486c2e0b..163fcc6af 100644
--- a/modules/pseudoclients/nickserv.cpp
+++ b/modules/pseudoclients/nickserv.cpp
@@ -16,6 +16,60 @@
static BotInfo *NickServ;
+class NickServCollide;
+class NickServRelease;
+
+typedef std::map<Anope::string, NickServCollide *> nickservcollides_map;
+typedef std::map<Anope::string, NickServRelease *> nickservreleases_map;
+
+static nickservcollides_map NickServCollides;
+static nickservreleases_map NickServReleases;
+
+/** Timer for colliding nicks to force people off of nicknames
+ */
+class CoreExport NickServCollide : public Timer
+{
+ dynamic_reference<User> u;
+ Anope::string nick;
+
+ public:
+ /** Default constructor
+ * @param nick The nick we're colliding
+ * @param delay How long to delay before kicking the user off the nick
+ */
+ NickServCollide(User *user, time_t delay) : Timer(delay), u(user), nick(u->nick)
+ {
+ /* Erase the current collide and use the new one */
+ nickservcollides_map::iterator nit = NickServCollides.find(user->nick);
+ if (nit != NickServCollides.end())
+ delete nit->second;
+
+ NickServCollides.insert(std::make_pair(nick, this));
+ }
+
+ /** Default destructor
+ */
+ virtual ~NickServCollide()
+ {
+ NickServCollides.erase(this->nick);
+ }
+
+ /** Called when the delay is up
+ * @param t The current time
+ */
+ void Tick(time_t t)
+ {
+ if (!u)
+ return;
+ /* If they identified or don't exist anymore, don't kill them. */
+ NickAlias *na = findnick(u->nick);
+ if (!na || u->Account() == na->nc || u->my_signon > this->GetSetTime())
+ return;
+
+ u->Collide(na);
+ }
+};
+
class MyNickServService : public NickServService
{
public: