#include "inspircd.h"
-/* $ModDesc: Implements config tags which allow changing characters allowed in channel names */
-
static std::bitset<256> allowedmap;
class NewIsChannelHandler : public HandlerBase1<bool, const std::string&>
{
public:
- NewIsChannelHandler() { }
- ~NewIsChannelHandler() { }
bool Call(const std::string&);
};
NewIsChannelHandler myhandler;
caller1<bool, const std::string&> rememberer;
bool badchan;
+ ChanModeReference permchannelmode;
public:
- ModuleChannelNames() : rememberer(ServerInstance->IsChannel), badchan(false)
+ ModuleChannelNames()
+ : rememberer(ServerInstance->IsChannel)
+ , badchan(false)
+ , permchannelmode(this, "permanent")
{
}
void init() CXX11_OVERRIDE
{
ServerInstance->IsChannel = &myhandler;
- Implementation eventlist[] = { I_OnRehash, I_OnUserKick };
- ServerInstance->Modules->Attach(eventlist, this, sizeof(eventlist)/sizeof(Implementation));
- OnRehash(NULL);
}
void ValidateChans()
{
badchan = true;
std::vector<Channel*> chanvec;
- for (chan_hash::const_iterator i = ServerInstance->chanlist->begin(); i != ServerInstance->chanlist->end(); ++i)
+ const chan_hash& chans = ServerInstance->GetChans();
+ for (chan_hash::const_iterator i = chans.begin(); i != chans.end(); ++i)
{
if (!ServerInstance->IsChannel(i->second->name))
chanvec.push_back(i->second);
while (c2 != chanvec.rend())
{
Channel* c = *c2++;
- if (c->IsModeSet('P') && c->GetUserCounter())
+ if (c->IsModeSet(permchannelmode) && c->GetUserCounter())
{
std::vector<std::string> modes;
modes.push_back(c->name);
- modes.push_back("-P");
+ modes.push_back(std::string("-") + permchannelmode->GetModeChar());
ServerInstance->Modes->Process(modes, ServerInstance->FakeClient);
}
badchan = false;
}
- void OnRehash(User* user) CXX11_OVERRIDE
+ void ReadConfig(ConfigStatus& status) CXX11_OVERRIDE
{
ConfigTag* tag = ServerInstance->Config->ConfValue("channames");
std::string denyToken = tag->getString("denyrange");
std::string allowToken = tag->getString("allowrange");
+
+ if (!denyToken.compare(0, 2, "0-"))
+ denyToken[0] = '1';
+ if (!allowToken.compare(0, 2, "0-"))
+ allowToken[0] = '1';
+
allowedmap.set();
irc::portparser denyrange(denyToken, false);