X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_hostcycle.cpp;h=0f7405dcc8b83f45ca93428cffeadc97c3f343c0;hb=93fa544b2671b078cf81ac04fbb4b48d5e2d1677;hp=d4def647347e9e3fa0fbf4366cc85390661afa54;hpb=903a0075d3c123b16128b9f8f2eb36878c28e282;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_hostcycle.cpp b/src/modules/m_hostcycle.cpp index d4def6473..0f7405dcc 100644 --- a/src/modules/m_hostcycle.cpp +++ b/src/modules/m_hostcycle.cpp @@ -19,12 +19,15 @@ #include "inspircd.h" +#include "modules/cap.h" class ModuleHostCycle : public Module { + Cap::Reference chghostcap; + /** Send fake quit/join/mode messages for host or ident cycle. */ - static void DoHostCycle(User* user, const std::string& newident, const std::string& newhost, const char* quitmsg) + void DoHostCycle(User* user, const std::string& newident, const std::string& newhost, const char* quitmsg) { // GetFullHost() returns the original data at the time this function is called const std::string quitline = ":" + user->GetFullHost() + " QUIT :" + quitmsg; @@ -37,10 +40,12 @@ class ModuleHostCycle : public Module FOREACH_MOD(OnBuildNeighborList, (user, include_chans, exceptions)); + // Users shouldn't see themselves quitting when host cycling + exceptions.erase(user); for (std::map::iterator i = exceptions.begin(); i != exceptions.end(); ++i) { LocalUser* u = IS_LOCAL(i->first); - if (u && !u->quitting) + if ((u) && (!u->quitting) && (!chghostcap.get(u))) { if (i->second) { @@ -80,6 +85,8 @@ class ModuleHostCycle : public Module continue; if (u->already_sent == silent_id) continue; + if (chghostcap.get(u)) + continue; if (u->already_sent != seen_id) { @@ -95,9 +102,14 @@ class ModuleHostCycle : public Module } public: + ModuleHostCycle() + : chghostcap(this, "chghost") + { + } + void OnChangeIdent(User* user, const std::string& newident) CXX11_OVERRIDE { - DoHostCycle(user, newident, user->dhost, "Changing ident"); + DoHostCycle(user, newident, user->GetDisplayedHost(), "Changing ident"); } void OnChangeHost(User* user, const std::string& newhost) CXX11_OVERRIDE