mirror of
https://github.com/inspircd/inspircd.git
synced 2025-03-10 02:59:01 -04:00
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:
parent
7cf509e036
commit
a15f95e586
@ -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
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user