]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - src/modules/m_operjoin.cpp
5290086fe4b2f321d590999e3290b189f6dae9c5
[user/henk/code/inspircd.git] / src / modules / m_operjoin.cpp
1 /*
2  * InspIRCd -- Internet Relay Chat Daemon
3  *
4  *   Copyright (C) 2013 Sadie Powell <sadie@witchery.services>
5  *   Copyright (C) 2012-2014 Attila Molnar <attilamolnar@hush.com>
6  *   Copyright (C) 2012 Robby <robby@chatbelgie.be>
7  *   Copyright (C) 2009 Uli Schlachter <psychon@inspircd.org>
8  *   Copyright (C) 2009 Daniel De Graaf <danieldg@inspircd.org>
9  *   Copyright (C) 2008 Thomas Stagner <aquanight@inspircd.org>
10  *   Copyright (C) 2007-2008 Dennis Friis <peavey@inspircd.org>
11  *   Copyright (C) 2006-2007 Craig Edwards <brain@inspircd.org>
12  *
13  * This file is part of InspIRCd.  InspIRCd is free software: you can
14  * redistribute it and/or modify it under the terms of the GNU General Public
15  * License as published by the Free Software Foundation, version 2.
16  *
17  * This program is distributed in the hope that it will be useful, but WITHOUT
18  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
19  * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
20  * details.
21  *
22  * You should have received a copy of the GNU General Public License
23  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
24  */
25
26
27 #include "inspircd.h"
28
29 class ModuleOperjoin : public Module
30 {
31                 std::vector<std::string> operChans;
32                 bool override;
33
34         public:
35                 void ReadConfig(ConfigStatus& status) CXX11_OVERRIDE
36                 {
37                         ConfigTag* tag = ServerInstance->Config->ConfValue("operjoin");
38
39                         override = tag->getBool("override", false);
40                         irc::commasepstream ss(tag->getString("channel"));
41                         operChans.clear();
42
43                         for (std::string channame; ss.GetToken(channame); )
44                                 operChans.push_back(channame);
45                 }
46
47                 Version GetVersion() CXX11_OVERRIDE
48                 {
49                         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);
50                 }
51
52                 void OnPostOper(User* user, const std::string &opertype, const std::string &opername) CXX11_OVERRIDE
53                 {
54                         LocalUser* localuser = IS_LOCAL(user);
55                         if (!localuser)
56                                 return;
57
58                         for (std::vector<std::string>::const_iterator i = operChans.begin(); i != operChans.end(); ++i)
59                                 if (ServerInstance->IsChannel(*i))
60                                         Channel::JoinUser(localuser, *i, override);
61
62                         irc::commasepstream ss(localuser->oper->getConfig("autojoin"));
63                         for (std::string channame; ss.GetToken(channame); )
64                         {
65                                 if (ServerInstance->IsChannel(channame))
66                                         Channel::JoinUser(localuser, channame, override);
67                         }
68                 }
69 };
70
71 MODULE_INIT(ModuleOperjoin)