mirror of
https://github.com/inspircd/inspircd.git
synced 2025-03-10 11:09:04 -04:00
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:
parent
39b8524e2c
commit
ca0b7b42bd
@ -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()
|
||||
void init()
|
||||
{
|
||||
OnRehash(NULL);
|
||||
Implementation eventlist[] = { I_OnPostConnect, I_OnRehash };
|
||||
ServerInstance->Modules->Attach(eventlist, this, 2);
|
||||
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());
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user