]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_invisible.cpp
Sort CAPAB CHANMODES and USERMODES
[user/henk/code/inspircd.git] / src / modules / m_invisible.cpp
index 0c7cc4dc76e6b6e2396ea0b386e982f80e2f872d..602a45b49c942f4c95c250d27909c861ffc7b64e 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
@@ -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();
@@ -126,13 +133,13 @@ class ModuleInvisible : public Module
        void OnBuildNeighborList(User* source, UserChanList &include, std::map<User*,bool> &exceptions);
        ModResult OnUserPreNotice(User* user,void* dest,int target_type, std::string &text, char status, CUList &exempt_list);
        ModResult OnUserPreMessage(User* user,void* dest,int target_type, std::string &text, char status, CUList &exempt_list);
-       void OnSendWhoLine(User* source, User* user, Channel* channel, std::string& line);
+       void OnSendWhoLine(User* source, const std::vector<std::string>&, User* user, Channel* channel, std::string& line);
        void OnNamesListItem(User* issuer, Membership* memb, std::string &prefixes, std::string &nick);
 };
 
 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)
@@ -184,7 +191,7 @@ ModResult ModuleInvisible::OnUserPreMessage(User* user,void* dest,int target_typ
        return OnUserPreNotice(user, dest, target_type, text, status, exempt_list);
 }
 
-void ModuleInvisible::OnSendWhoLine(User* source, User* user, Channel* channel, std::string& line)
+void ModuleInvisible::OnSendWhoLine(User* source, const std::vector<std::string>& params, User* user, Channel* channel, std::string& line)
 {
        if (user->IsModeSet('Q') && !IS_OPER(source))
                line.clear();