2 * InspIRCd -- Internet Relay Chat Daemon
4 * Copyright (C) 2010 Daniel De Graaf <danieldg@inspircd.org>
5 * Copyright (C) 2007 Dennis Friis <peavey@inspircd.org>
6 * Copyright (C) 2007 Robin Burchell <robin+git@viroteck.net>
7 * Copyright (C) 2007 Craig Edwards <craigedwards@brainbox.cc>
9 * This file is part of InspIRCd. InspIRCd is free software: you can
10 * redistribute it and/or modify it under the terms of the GNU General Public
11 * License as published by the Free Software Foundation, version 2.
13 * This program is distributed in the hope that it will be useful, but WITHOUT
14 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
18 * You should have received a copy of the GNU General Public License
19 * along with this program. If not, see <http://www.gnu.org/licenses/>.
25 static void JoinChannels(LocalUser* u, const std::string& chanlist)
27 irc::commasepstream chans(chanlist);
30 while (chans.GetToken(chan))
32 if (ServerInstance->IsChannel(chan))
33 Channel::JoinUser(u, chan);
37 class JoinTimer : public Timer
40 LocalUser* const user;
41 const std::string channels;
42 SimpleExtItem<JoinTimer>& ext;
45 JoinTimer(LocalUser* u, SimpleExtItem<JoinTimer>& ex, const std::string& chans, unsigned int delay)
46 : Timer(delay, ServerInstance->Time(), false)
47 , user(u), channels(chans), ext(ex)
49 ServerInstance->Timers->AddTimer(this);
52 bool Tick(time_t time) CXX11_OVERRIDE
54 if (user->chans.empty())
55 JoinChannels(user, channels);
62 class ModuleConnJoin : public Module
64 SimpleExtItem<JoinTimer> ext;
67 ModuleConnJoin() : ext("join_timer", this)
73 ServerInstance->Modules->SetPriority(this, I_OnPostConnect, PRIORITY_LAST);
76 Version GetVersion() CXX11_OVERRIDE
78 return Version("Forces users to join the specified channel(s) on connect", VF_VENDOR);
81 void OnPostConnect(User* user) CXX11_OVERRIDE
83 LocalUser* localuser = IS_LOCAL(user);
87 std::string chanlist = localuser->GetClass()->config->getString("autojoin");
88 unsigned int chandelay = localuser->GetClass()->config->getInt("autojoindelay", 0, 0, 60);
92 ConfigTag* tag = ServerInstance->Config->ConfValue("autojoin");
93 chanlist = tag->getString("channel");
94 chandelay = tag->getInt("delay", 0, 0, 60);
101 JoinChannels(localuser, chanlist);
103 ext.set(localuser, new JoinTimer(localuser, ext, chanlist, chandelay));
107 MODULE_INIT(ModuleConnJoin)