Implement Bug #533, Oper type-specific autojoins for m_operjoin via <type:autojoin>

git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@9789 e03df62e-2008-0410-955e-edbf42e46eb7
This commit is contained in:
aquanight 2008-05-21 23:15:40 +00:00
parent 7cf509e036
commit a15f95e586
2 changed files with 32 additions and 0 deletions

View File

@ -1995,6 +1995,11 @@
# might be set, even bans. Use "yes" or "no". #
# #
#<operjoin channel="#channel" override="no">
#
# Alternatively you can use the autojoin="channellist" in a <type> #
# tag to set specific autojoins for a type of oper, for example: #
#
#<type name="Helper" autojoin="#help" classes="...">
#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
# Oper MOTD module: Provides support for seperate message of the day

View File

@ -20,6 +20,7 @@ class ModuleOperjoin : public Module
private:
std::string operChan;
std::vector<std::string> operChans;
std::map<std::string, std::vector<std::string> > operTypeChans; // Channels specific to an oper type.
bool override;
int tokenize(const std::string &str, std::vector<std::string> &tokens)
@ -60,6 +61,18 @@ class ModuleOperjoin : public Module
if (!operChan.empty())
tokenize(operChan,operChans);
std::map<std::string, std::vector<std::string> >().swap(operTypeChans);
int olines = conf->Enumerate("type");
for (int index = 0; index < olines; ++index)
{
std::string chanList = conf->ReadValue("type", "autojoin", index);
if (!chanList.empty())
{
tokenize(chanList, operTypeChans[conf->ReadValue("type", "name", index)]);
}
}
delete conf;
}
@ -80,6 +93,20 @@ class ModuleOperjoin : public Module
for(std::vector<std::string>::iterator it = operChans.begin(); it != operChans.end(); it++)
if (ServerInstance->IsChannel(it->c_str()))
Channel::JoinUser(ServerInstance, user, it->c_str(), override, "", false, ServerInstance->Time());
std::map<std::string, std::vector<std::string> >::iterator i = operTypeChans.find(user->oper);
if (i != operTypeChans.end())
{
const std::vector<std::string>& list = i->second;
for (std::vector<std::string>::const_iterator it = list.begin(); it != list.end(); ++it)
{
if (ServerInstance->IsChannel(it->c_str()))
{
Channel::JoinUser(ServerInstance, user, it->c_str(), override, "", false, ServerInstance->Time());
}
}
}
}
};