]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_invisible.cpp
Delete modewatchers when unloading modules that use them to keep the server from...
[user/henk/code/inspircd.git] / src / modules / m_invisible.cpp
index 0c7cc4dc76e6b6e2396ea0b386e982f80e2f872d..b4a036d4315fc96cb8179d2c09d02b81c1f11bdb 100644 (file)
@@ -49,7 +49,11 @@ class InvisibleMode : public ModeHandler
 
                                snprintf(tb,MAXBUF,":%s %s %s", dest->GetFullHost().c_str(), adding ? "PART" : "JOIN", (*f)->name.c_str());
                                std::string out = tb;
-                               std::string n = ServerInstance->Modes->ModeString(dest, (*f));
+                               Membership* memb = (**f).GetUser(dest);
+                               std::string ms = memb->modes;
+                               for(unsigned int i=0; i < memb->modes.length(); i++)
+                                       ms.append(" ").append(dest->nick);
+
 
                                for (UserMembCIter i = ulist->begin(); i != ulist->end(); i++)
                                {
@@ -57,8 +61,8 @@ class InvisibleMode : public ModeHandler
                                        if (IS_LOCAL(i->first) && !IS_OPER(i->first))
                                        {
                                                i->first->Write(out);
-                                               if (!n.empty() && !adding)
-                                                       i->first->WriteServ("MODE %s +%s", (*f)->name.c_str(), n.c_str());
+                                               if (!ms.empty() && !adding)
+                                                       i->first->WriteServ("MODE %s +%s", (**f).name.c_str(), ms.c_str());
                                        }
                                }
                        }
@@ -119,6 +123,9 @@ class ModuleInvisible : public Module
 
        ~ModuleInvisible()
        {
+               /* XXX is this the best place to do this? */
+               if (!ServerInstance->Modes->DelModeWatcher(&ido))
+                       ServerInstance->Logs->Log("m_banredirect.so", DEBUG, "Failed to delete modewatcher!");
        };
 
        Version GetVersion();