* | Inspire Internet Relay Chat Daemon |
* +------------------------------------+
*
- * InspIRCd: (C) 2002-2009 InspIRCd Development Team
+ * InspIRCd: (C) 2002-2010 InspIRCd Development Team
* See: http://wiki.inspircd.org/Credits
*
* This program is free but copyrighted software; see
*/
class Channel_r : public ModeHandler
{
-
public:
- Channel_r(Module* Creator) : ModeHandler(Creator, 'r', PARAM_NONE, MODETYPE_CHANNEL) { }
+ Channel_r(Module* Creator) : ModeHandler(Creator, "c_registered", 'r', PARAM_NONE, MODETYPE_CHANNEL) { }
ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string ¶meter, bool adding)
{
// only a u-lined server may add or remove the +r mode.
- if (IS_REMOTE(source) || ServerInstance->ULine(source->nick.c_str()) || ServerInstance->ULine(source->server))
+ if (!IS_LOCAL(source) || ServerInstance->ULine(source->nick.c_str()) || ServerInstance->ULine(source->server))
{
// Only change the mode if it's not redundant
if ((adding && !channel->IsModeSet('r')) || (!adding && channel->IsModeSet('r')))
{
public:
- User_r(Module* Creator) : ModeHandler(Creator, 'r', PARAM_NONE, MODETYPE_USER) { }
+ User_r(Module* Creator) : ModeHandler(Creator, "u_registered", 'r', PARAM_NONE, MODETYPE_USER) { }
ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string ¶meter, bool adding)
{
- if (IS_REMOTE(source) || ServerInstance->ULine(source->nick.c_str()) || ServerInstance->ULine(source->server))
+ if (!IS_LOCAL(source) || ServerInstance->ULine(source->nick.c_str()) || ServerInstance->ULine(source->server))
{
if ((adding && !dest->IsModeSet('r')) || (!adding && dest->IsModeSet('r')))
{
class AChannel_R : public SimpleChannelModeHandler
{
public:
- AChannel_R(Module* Creator) : SimpleChannelModeHandler(Creator, 'R') { }
+ AChannel_R(Module* Creator) : SimpleChannelModeHandler(Creator, "reginvite", 'R') { }
};
/** User mode +R - unidentified users cannot message
class AUser_R : public SimpleUserModeHandler
{
public:
- AUser_R(Module* Creator) : SimpleUserModeHandler(Creator, 'R') { }
+ AUser_R(Module* Creator) : SimpleUserModeHandler(Creator, "regdeaf", 'R') { }
};
/** Channel mode +M - unidentified users cannot message channel
class AChannel_M : public SimpleChannelModeHandler
{
public:
- AChannel_M(Module* Creator) : SimpleChannelModeHandler(Creator, 'M') { }
+ AChannel_M(Module* Creator) : SimpleChannelModeHandler(Creator, "regmoderated", 'M') { }
};
class ModuleServicesAccount : public Module
AUser_R m3;
Channel_r m4;
User_r m5;
- StringExtItem accountname;
+ AccountExtItem accountname;
public:
ModuleServicesAccount() : m1(this), m2(this), m3(this), m4(this), m5(this),
accountname("accountname", this)
{
+ }
- if (!ServerInstance->Modes->AddMode(&m1) || !ServerInstance->Modes->AddMode(&m2) ||
- !ServerInstance->Modes->AddMode(&m3) || !ServerInstance->Modes->AddMode(&m4) ||
- !ServerInstance->Modes->AddMode(&m5))
- throw ModuleException("Some other module has claimed our modes!");
-
- Extensible::Register(&accountname);
+ void init()
+ {
+ ServerInstance->Modules->AddService(m1);
+ ServerInstance->Modules->AddService(m2);
+ ServerInstance->Modules->AddService(m3);
+ ServerInstance->Modules->AddService(m4);
+ ServerInstance->Modules->AddService(m5);
+ ServerInstance->Modules->AddService(accountname);
Implementation eventlist[] = { I_OnWhois, I_OnUserPreMessage, I_OnUserPreNotice, I_OnUserPreJoin, I_OnCheckBan,
- I_OnSyncUser, I_OnUserQuit, I_OnCleanup, I_OnDecodeMetaData, I_On005Numeric, I_OnUserPostNick };
+ I_OnDecodeMetaData, I_On005Numeric, I_OnUserPostNick, I_OnSetConnectClass };
- ServerInstance->Modules->Attach(eventlist, this, 10);
+ ServerInstance->Modules->Attach(eventlist, this, 9);
}
void On005Numeric(std::string &t)
if (target_type == TYPE_CHANNEL)
{
Channel* c = (Channel*)dest;
+ ModResult res = ServerInstance->OnCheckExemption(user,c,"regmoderated");
- if (c->IsModeSet('M') && !is_registered)
+ if (c->IsModeSet('M') && !is_registered && res != MOD_RES_ALLOW)
{
// user messaging a +M channel and is not registered
user->WriteNumeric(477, ""+std::string(user->nick)+" "+std::string(c->name)+" :You need to be identified to a registered account to message this channel");
dest->WriteNumeric(900, "%s %s %s :You are now logged in as %s",
dest->nick.c_str(), dest->GetFullHost().c_str(), account->c_str(), account->c_str());
- AccountData ac;
- ac.user = dest;
- ac.account = *account;
- Event n((char*)&ac, this, "account_login");
- n.Send();
+ AccountEvent(this, dest, *account).Send();
}
}
}
- ~ModuleServicesAccount()
+ ModResult OnSetConnectClass(LocalUser* user, ConnectClass* myclass)
{
+ if (myclass->config->getBool("requireaccount") && !accountname.get(user))
+ return MOD_RES_DENY;
+ return MOD_RES_PASSTHRU;
}
Version GetVersion()
{
- return Version("Povides support for ircu-style services accounts, including chmode +R, etc.",VF_COMMON|VF_VENDOR,API_VERSION);
+ return Version("Povides support for ircu-style services accounts, including chmode +R, etc.",VF_OPTCOMMON|VF_VENDOR);
}
};