Allow <connect autojoin=""> to override the m_conn_join channel list

git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@12398 e03df62e-2008-0410-955e-edbf42e46eb7
This commit is contained in:
danieldg 2010-02-08 14:51:26 +00:00
parent 39b8524e2c
commit ca0b7b42bd

View File

@ -17,36 +17,11 @@
class ModuleConnJoin : public Module
{
private:
std::string JoinChan;
std::vector<std::string> Joinchans;
int tokenize(const std::string &str, std::vector<std::string> &tokens)
{
// skip delimiters at beginning.
std::string::size_type lastPos = str.find_first_not_of(",", 0);
// find first "non-delimiter".
std::string::size_type pos = str.find_first_of(",", lastPos);
while (std::string::npos != pos || std::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:
ModuleConnJoin()
{
OnRehash(NULL);
Implementation eventlist[] = { I_OnPostConnect, I_OnRehash };
ServerInstance->Modules->Attach(eventlist, this, 2);
void init()
{
Implementation eventlist[] = { I_OnPostConnect };
ServerInstance->Modules->Attach(eventlist, this, 1);
}
void Prioritize()
@ -54,21 +29,7 @@ class ModuleConnJoin : public Module
ServerInstance->Modules->SetPriority(this, I_OnPostConnect, PRIORITY_LAST);
}
virtual void OnRehash(User* user)
{
ConfigReader conf;
JoinChan = conf.ReadValue("autojoin", "channel", 0);
Joinchans.clear();
if (!JoinChan.empty())
tokenize(JoinChan,Joinchans);
}
virtual ~ModuleConnJoin()
{
}
virtual Version GetVersion()
Version GetVersion()
{
return Version("Forces users to join the specified channel(s) on connect", VF_VENDOR);
}
@ -77,11 +38,19 @@ class ModuleConnJoin : public Module
{
if (!IS_LOCAL(user))
return;
for(std::vector<std::string>::iterator it = Joinchans.begin(); it != Joinchans.end(); it++)
if (ServerInstance->IsChannel(it->c_str(), ServerInstance->Config->Limits.ChanMax))
Channel::JoinUser(user, it->c_str(), false, "", false, ServerInstance->Time());
}
std::string chanlist = ServerInstance->Config->ConfValue("autojoin")->getString("channel");
chanlist = user->GetClass()->config->getString("autojoin", chanlist);
irc::commasepstream chans(chanlist);
std::string chan;
while (chans.GetToken(chan))
{
if (ServerInstance->IsChannel(chan.c_str(), ServerInstance->Config->Limits.ChanMax))
Channel::JoinUser(user, chan.c_str(), false, "", false, ServerInstance->Time());
}
}
};