diff options
author | danieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7> | 2010-02-08 14:51:26 +0000 |
---|---|---|
committer | danieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7> | 2010-02-08 14:51:26 +0000 |
commit | ca0b7b42bddc6d8d0eecd011323a255ca6e3de25 (patch) | |
tree | c2bc5b6a3d7f5d3859eedf8d627b218fd327f832 /src | |
parent | 39b8524e2ce10e2a6be4b431b8057e13376f1f85 (diff) |
Allow <connect autojoin=""> to override the m_conn_join channel list
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@12398 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src')
-rw-r--r-- | src/modules/m_conn_join.cpp | 65 |
1 files changed, 17 insertions, 48 deletions
diff --git a/src/modules/m_conn_join.cpp b/src/modules/m_conn_join.cpp index caf964567..7c6e06e5d 100644 --- a/src/modules/m_conn_join.cpp +++ b/src/modules/m_conn_join.cpp @@ -17,36 +17,11 @@ class ModuleConnJoin : public Module { - private: - std::string JoinChan; - std::vector<std::string> Joinchans; - - - int tokenize(const std::string &str, std::vector<std::string> &tokens) - { - // skip delimiters at beginning. - std::string::size_type lastPos = str.find_first_not_of(",", 0); - // find first "non-delimiter". - std::string::size_type pos = str.find_first_of(",", lastPos); - - while (std::string::npos != pos || std::string::npos != lastPos) - { - // found a token, add it to the vector. - tokens.push_back(str.substr(lastPos, pos - lastPos)); - // skip delimiters. Note the "not_of" - lastPos = str.find_first_not_of(",", pos); - // find next "non-delimiter" - pos = str.find_first_of(",", lastPos); - } - return tokens.size(); - } - public: - ModuleConnJoin() - { - OnRehash(NULL); - Implementation eventlist[] = { I_OnPostConnect, I_OnRehash }; - ServerInstance->Modules->Attach(eventlist, this, 2); + void init() + { + Implementation eventlist[] = { I_OnPostConnect }; + ServerInstance->Modules->Attach(eventlist, this, 1); } void Prioritize() @@ -54,21 +29,7 @@ class ModuleConnJoin : public Module ServerInstance->Modules->SetPriority(this, I_OnPostConnect, PRIORITY_LAST); } - - virtual void OnRehash(User* user) - { - ConfigReader conf; - JoinChan = conf.ReadValue("autojoin", "channel", 0); - Joinchans.clear(); - if (!JoinChan.empty()) - tokenize(JoinChan,Joinchans); - } - - virtual ~ModuleConnJoin() - { - } - - virtual Version GetVersion() + Version GetVersion() { return Version("Forces users to join the specified channel(s) on connect", VF_VENDOR); } @@ -77,11 +38,19 @@ class ModuleConnJoin : public Module { if (!IS_LOCAL(user)) return; - for(std::vector<std::string>::iterator it = Joinchans.begin(); it != Joinchans.end(); it++) - if (ServerInstance->IsChannel(it->c_str(), ServerInstance->Config->Limits.ChanMax)) - Channel::JoinUser(user, it->c_str(), false, "", false, ServerInstance->Time()); - } + std::string chanlist = ServerInstance->Config->ConfValue("autojoin")->getString("channel"); + chanlist = user->GetClass()->config->getString("autojoin", chanlist); + + irc::commasepstream chans(chanlist); + std::string chan; + + while (chans.GetToken(chan)) + { + if (ServerInstance->IsChannel(chan.c_str(), ServerInstance->Config->Limits.ChanMax)) + Channel::JoinUser(user, chan.c_str(), false, "", false, ServerInstance->Time()); + } + } }; |