mirror of
https://github.com/inspircd/inspircd.git
synced 2025-03-09 18:49:03 -04:00
Add and document <permchannels> block for m_permchannels, which creates a channel on startup. Fixes bug #511.
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@10271 e03df62e-2008-0410-955e-edbf42e46eb7
This commit is contained in:
parent
8d7e3fab28
commit
8eae84e3ba
@ -1008,6 +1008,9 @@
|
||||
# channels -may- need support from your Services package to function
|
||||
# properly with them. This adds channel mode +P.
|
||||
#<module name="m_permchannels.so">
|
||||
#
|
||||
# You may also create channels on startup by using the <permchannels> block.
|
||||
#<permchannels channel="#opers" modes="is" topic="Opers only.">
|
||||
|
||||
#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
|
||||
# PostgreSQL module: Allows other SQL modules to access PgSQL databases
|
||||
|
@ -64,6 +64,8 @@ public:
|
||||
}
|
||||
Implementation eventlist[] = { I_OnChannelPreDelete };
|
||||
ServerInstance->Modules->Attach(eventlist, this, 1);
|
||||
|
||||
OnRehash(NULL, "");
|
||||
}
|
||||
|
||||
virtual ~ModulePermanentChannels()
|
||||
@ -72,6 +74,60 @@ public:
|
||||
delete p;
|
||||
}
|
||||
|
||||
virtual void OnRehash(User *user, const std::string ¶meter)
|
||||
{
|
||||
/*
|
||||
* Process config-defined list of permanent channels.
|
||||
* -- w00t
|
||||
*/
|
||||
ConfigReader MyConf(ServerInstance);
|
||||
for (int i = 0; i < MyConf.Enumerate("permchannels"); i++)
|
||||
{
|
||||
std::string channel = MyConf.ReadValue("permchannels", "channel", i);
|
||||
std::string topic = MyConf.ReadValue("permchannels", "topic", i);
|
||||
std::string modes = MyConf.ReadValue("permchannels", "modes", i);
|
||||
|
||||
if (channel.empty() || topic.empty())
|
||||
{
|
||||
ServerInstance->Logs->Log("blah", DEBUG, "Malformed permchannels tag with empty topic or channel name.");
|
||||
continue;
|
||||
}
|
||||
|
||||
Channel *c = ServerInstance->FindChan(channel);
|
||||
|
||||
if (!c)
|
||||
{
|
||||
c = new Channel(ServerInstance, channel, ServerInstance->Time());
|
||||
c->SetTopic(NULL, topic, true);
|
||||
ServerInstance->Logs->Log("blah", DEBUG, "Added %s with topic %s", channel.c_str(), topic.c_str());
|
||||
|
||||
if (modes.empty())
|
||||
continue;
|
||||
|
||||
irc::spacesepstream list(modes);
|
||||
std::string modeseq;
|
||||
std::string par;
|
||||
|
||||
list.GetToken(modeseq);
|
||||
|
||||
// XXX bleh, should we pass this to the mode parser instead? ugly. --w00t
|
||||
for (std::string::iterator n = modeseq.begin(); n != modeseq.end(); ++n)
|
||||
{
|
||||
ModeHandler* mode = ServerInstance->Modes->FindMode(*n, MODETYPE_CHANNEL);
|
||||
if (mode)
|
||||
{
|
||||
if (mode->GetNumParams(true))
|
||||
list.GetToken(par);
|
||||
else
|
||||
par.clear();
|
||||
|
||||
mode->OnModeChange(ServerInstance->FakeClient, ServerInstance->FakeClient, c, par, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
virtual Version GetVersion()
|
||||
{
|
||||
return Version(1,2,0,0,VF_COMMON|VF_VENDOR,API_VERSION);
|
||||
|
Loading…
x
Reference in New Issue
Block a user