mirror of
https://github.com/inspircd/inspircd.git
synced 2025-03-10 19:19:02 -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
|
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:
|
public:
|
||||||
ModuleConnJoin()
|
void init()
|
||||||
{
|
{
|
||||||
OnRehash(NULL);
|
Implementation eventlist[] = { I_OnPostConnect };
|
||||||
Implementation eventlist[] = { I_OnPostConnect, I_OnRehash };
|
ServerInstance->Modules->Attach(eventlist, this, 1);
|
||||||
ServerInstance->Modules->Attach(eventlist, this, 2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Prioritize()
|
void Prioritize()
|
||||||
@ -54,21 +29,7 @@ class ModuleConnJoin : public Module
|
|||||||
ServerInstance->Modules->SetPriority(this, I_OnPostConnect, PRIORITY_LAST);
|
ServerInstance->Modules->SetPriority(this, I_OnPostConnect, PRIORITY_LAST);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Version GetVersion()
|
||||||
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()
|
|
||||||
{
|
{
|
||||||
return Version("Forces users to join the specified channel(s) on connect", VF_VENDOR);
|
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))
|
if (!IS_LOCAL(user))
|
||||||
return;
|
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