/* * 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 { private: std::vector operChans; bool override; public: ModuleOperjoin() : Module(VF_VENDOR, "Allows the server administrator to force server operators to join one or more channels when logging into their server operator account.") { } void ReadConfig(ConfigStatus& status) override { auto 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); } void OnPostOper(User* user, const std::string &opertype, const std::string &opername) override { LocalUser* localuser = IS_LOCAL(user); if (!localuser) return; for (const auto& operchan : operChans) { if (ServerInstance->Channels.IsChannel(operchan)) Channel::JoinUser(localuser, operchan, override); } irc::commasepstream ss(localuser->oper->getConfig("autojoin")); for (std::string channame; ss.GetToken(channame); ) { if (ServerInstance->Channels.IsChannel(channame)) Channel::JoinUser(localuser, channame, override); } } }; MODULE_INIT(ModuleOperjoin)