/* * 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 * Copyright (C) 2005 Robin Burchell * * 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)