]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_invisible.cpp
Fix iteration of oper blocks by SSLINFO
[user/henk/code/inspircd.git] / src / modules / m_invisible.cpp
index 12e0cfa84ffecc52e11d40b3b1548404cce6da30..abedaf0ce6494a27be916c14c1b035e3143e9a7b 100644 (file)
@@ -2,7 +2,7 @@
  *       | Inspire Internet Relay Chat Daemon
  *       +------------------------------------+
  *
- *  InspIRCd: (C) 2002-2009 InspIRCd Development Team
+ *  InspIRCd: (C) 2002-2010 InspIRCd Development Team
  * See: http://wiki.inspircd.org/Credits
  *
  * This program is free but copyrighted software; see
@@ -41,10 +41,6 @@ class InvisibleMode : public ModeHandler
                        if (m && adding)
                                m->OnUserQuit(dest, "Connection closed", "Connection closed");
 
-                       /* This has to come after setting/unsetting the handler */
-                       if (m && !adding)
-                               m->OnPostConnect(dest);
-
                        /* User appears to vanish or appear from nowhere */
                        for (UCListIter f = dest->chans.begin(); f != dest->chans.end(); f++)
                        {
@@ -53,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++)
                                {
@@ -61,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());
                                        }
                                }
                        }
@@ -123,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();
@@ -136,7 +139,7 @@ class ModuleInvisible : public Module
 
 Version ModuleInvisible::GetVersion()
 {
-       return Version("Allows opers to join channels invisibly", VF_COMMON | VF_VENDOR);
+       return Version("Allows opers to join channels invisibly", VF_VENDOR);
 }
 
 static void BuildExcept(Membership* memb, CUList& excepts)