]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_operjoin.cpp
Fix IO hooking modules to use the new (not old) hooking call
[user/henk/code/inspircd.git] / src / modules / m_operjoin.cpp
index 21f9aae30815c48e18b50bff5318550a4429ada3..549194ef7a9afd118081459eeb9e888ac74ed130 100644 (file)
@@ -20,6 +20,7 @@ class ModuleOperjoin : public Module
        private:
                std::string operChan;
                std::vector<std::string> operChans;
+               std::map<std::string, std::vector<std::string> > operTypeChans; // Channels specific to an oper type.
                bool override;
 
                int tokenize(const std::string &str, std::vector<std::string> &tokens)
@@ -53,13 +54,25 @@ class ModuleOperjoin : public Module
                virtual void OnRehash(User* user, const std::string &parameter)
                {
                        ConfigReader* conf = new ConfigReader(ServerInstance);
-    
+
                        operChan = conf->ReadValue("operjoin", "channel", 0);
                        override = conf->ReadFlag("operjoin", "override", "0", 0);
                        operChans.clear();
                        if (!operChan.empty())
                                tokenize(operChan,operChans);
 
+                       std::map<std::string, std::vector<std::string> >().swap(operTypeChans);
+
+                       int olines = conf->Enumerate("type");
+                       for (int index = 0; index < olines; ++index)
+                       {
+                               std::string chanList = conf->ReadValue("type", "autojoin", index);
+                               if (!chanList.empty())
+                               {
+                                       tokenize(chanList, operTypeChans[conf->ReadValue("type", "name", index)]);
+                               }
+                       }
+
                        delete conf;
                }
 
@@ -69,7 +82,7 @@ class ModuleOperjoin : public Module
 
                virtual Version GetVersion()
                {
-                       return Version(1,2,0,1,VF_VENDOR,API_VERSION);
+                       return Version("$Id$", VF_VENDOR, API_VERSION);
                }
 
                virtual void OnPostOper(User* user, const std::string &opertype, const std::string &opername)
@@ -78,8 +91,22 @@ class ModuleOperjoin : public Module
                                return;
 
                        for(std::vector<std::string>::iterator it = operChans.begin(); it != operChans.end(); it++)
-                               if (ServerInstance->IsChannel(it->c_str()))
+                               if (ServerInstance->IsChannel(it->c_str(), ServerInstance->Config->Limits.ChanMax))
                                        Channel::JoinUser(ServerInstance, user, it->c_str(), override, "", false, ServerInstance->Time());
+
+                       std::map<std::string, std::vector<std::string> >::iterator i = operTypeChans.find(user->oper);
+
+                       if (i != operTypeChans.end())
+                       {
+                               const std::vector<std::string>& list = i->second;
+                               for (std::vector<std::string>::const_iterator it = list.begin(); it != list.end(); ++it)
+                               {
+                                       if (ServerInstance->IsChannel(it->c_str(), ServerInstance->Config->Limits.ChanMax))
+                                       {
+                                               Channel::JoinUser(ServerInstance, user, it->c_str(), override, "", false, ServerInstance->Time());
+                                       }
+                               }
+                       }
                }
 
 };