X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_operjoin.cpp;h=5290086fe4b2f321d590999e3290b189f6dae9c5;hb=0a6b1e1a7de92e078a98f0b955d2624e5b85e4c1;hp=d69112eba611993748a75109455351edc15c6810;hpb=bab14f0dd2345c9d7dcbc47c918563709e1ac094;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_operjoin.cpp b/src/modules/m_operjoin.cpp index d69112eba..5290086fe 100644 --- a/src/modules/m_operjoin.cpp +++ b/src/modules/m_operjoin.cpp @@ -1 +1,71 @@ -/* +------------------------------------+ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * * InspIRCd: (C) 2002-2007 InspIRCd Development Team * See: http://www.inspircd.org/wiki/index.php/Credits * * This program is free but copyrighted software; see * the file COPYING for details. * * --------------------------------------------------- */ #include "inspircd.h" #include "users.h" #include "channels.h" #include "modules.h" /* $ModDesc: Forces opers to join the specified channel(s) on oper-up */ class ModuleOperjoin : public Module { private: std::string operChan; std::vector operChans; 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: ModuleOperjoin(InspIRCd* Me) : Module(Me) { OnRehash(NULL, ""); } void Implements(char* List) { List[I_OnPostOper] = List[I_OnRehash] = 1; } virtual void OnRehash(userrec* user, const std::string ¶meter) { ConfigReader* conf = new ConfigReader(ServerInstance); operChan = conf->ReadValue("operjoin", "channel", 0); operChans.clear(); if (!operChan.empty()) tokenize(operChan,operChans); DELETE(conf); } virtual ~ModuleOperjoin() { } virtual Version GetVersion() { return Version(1,1,0,1,VF_VENDOR,API_VERSION); } virtual void OnPostOper(userrec* user, const std::string &opertype) { if (!IS_LOCAL(user)) return; for(std::vector::iterator it = operChans.begin(); it != operChans.end(); it++) if (ServerInstance->IsChannel(it->c_str())) chanrec::JoinUser(ServerInstance, user, it->c_str(), false, "", ServerInstance->Time(true)); } }; MODULE_INIT(ModuleOperjoin) \ No newline at end of file +/* + * InspIRCd -- Internet Relay Chat Daemon + * + * Copyright (C) 2013 Sadie Powell + * Copyright (C) 2012-2014 Attila Molnar + * Copyright (C) 2012 Robby + * Copyright (C) 2009 Uli Schlachter + * Copyright (C) 2009 Daniel De Graaf + * Copyright (C) 2008 Thomas Stagner + * Copyright (C) 2007-2008 Dennis Friis + * Copyright (C) 2006-2007 Craig Edwards + * + * This file is part of InspIRCd. InspIRCd is free software: you can + * redistribute it and/or modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation, version 2. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +#include "inspircd.h" + +class ModuleOperjoin : public Module +{ + std::vector operChans; + bool override; + + public: + void ReadConfig(ConfigStatus& status) CXX11_OVERRIDE + { + ConfigTag* tag = ServerInstance->Config->ConfValue("operjoin"); + + override = tag->getBool("override", false); + irc::commasepstream ss(tag->getString("channel")); + operChans.clear(); + + for (std::string channame; ss.GetToken(channame); ) + operChans.push_back(channame); + } + + Version GetVersion() CXX11_OVERRIDE + { + return Version("Allows the server administrator to force server operators to join one or more channels when logging into their server operator account.", VF_VENDOR); + } + + void OnPostOper(User* user, const std::string &opertype, const std::string &opername) CXX11_OVERRIDE + { + LocalUser* localuser = IS_LOCAL(user); + if (!localuser) + return; + + for (std::vector::const_iterator i = operChans.begin(); i != operChans.end(); ++i) + if (ServerInstance->IsChannel(*i)) + Channel::JoinUser(localuser, *i, override); + + irc::commasepstream ss(localuser->oper->getConfig("autojoin")); + for (std::string channame; ss.GetToken(channame); ) + { + if (ServerInstance->IsChannel(channame)) + Channel::JoinUser(localuser, channame, override); + } + } +}; + +MODULE_INIT(ModuleOperjoin)