X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_conn_join.cpp;h=7c6e06e5dd8017518500a7dee18aa43c99f16e44;hb=76f9f4b47a16888d93bdb6122de0e1f6d7965f4b;hp=f9c9423756c75ee239416ab4aead1516cf1406db;hpb=cadc11999ee28545e9beb92de116c151832af5c4;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_conn_join.cpp b/src/modules/m_conn_join.cpp index f9c942375..7c6e06e5d 100644 --- a/src/modules/m_conn_join.cpp +++ b/src/modules/m_conn_join.cpp @@ -2,8 +2,8 @@ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * - * InspIRCd: (C) 2002-2007 InspIRCd Development Team - * See: http://www.inspircd.org/wiki/index.php/Credits + * InspIRCd: (C) 2002-2010 InspIRCd Development Team + * See: http://wiki.inspircd.org/Credits * * This program is free but copyrighted software; see * the file COPYING for details. @@ -17,78 +17,40 @@ class ModuleConnJoin : public Module { - private: - std::string JoinChan; - std::vector Joinchans; - - - int tokenize(const string &str, std::vector &tokens) - { - // skip delimiters at beginning. - string::size_type lastPos = str.find_first_not_of(",", 0); - // find first "non-delimiter". - string::size_type pos = str.find_first_of(",", lastPos); - - while (string::npos != pos || 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(InspIRCd* Me) - : Module(Me) + void init() { - OnRehash(NULL, ""); - Implementation eventlist[] = { I_OnPostConnect, I_OnRehash }; - ServerInstance->Modules->Attach(eventlist, this, 2); + Implementation eventlist[] = { I_OnPostConnect }; + ServerInstance->Modules->Attach(eventlist, this, 1); } void Prioritize() { - ServerInstance->Modules->SetPriority(this, I_OnPostConnect, PRIO_LAST); + ServerInstance->Modules->SetPriority(this, I_OnPostConnect, PRIORITY_LAST); } - void Implements(char* List) + Version GetVersion() { - List[I_OnPostConnect] = List[I_OnRehash] = 1; + return Version("Forces users to join the specified channel(s) on connect", VF_VENDOR); } - virtual void OnRehash(User* user, const std::string ¶meter) - { - ConfigReader* conf = new ConfigReader(ServerInstance); - JoinChan = conf->ReadValue("autojoin", "channel", 0); - Joinchans.clear(); - if (!JoinChan.empty()) - tokenize(JoinChan,Joinchans); - DELETE(conf); - } - - virtual ~ModuleConnJoin() - { - } - - virtual Version GetVersion() - { - return Version(1,1,0,1,VF_VENDOR,API_VERSION); - } - - virtual void OnPostConnect(User* user) + void OnPostConnect(User* user) { if (!IS_LOCAL(user)) return; - for(std::vector::iterator it = Joinchans.begin(); it != Joinchans.end(); it++) - if (ServerInstance->IsChannel(it->c_str())) - Channel::JoinUser(ServerInstance, user, it->c_str(), false, "", ServerInstance->Time(true)); - } + 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()); + } + } };