}
else
{
- source->WriteNumeric(500, "%s :Only a server may modify the +r channel mode", source->nick.c_str());
+ source->WriteNumeric(500, ":Only a server may modify the +r channel mode");
}
return MODEACTION_DENY;
}
}
else
{
- source->WriteNumeric(500, "%s :Only a server may modify the +r user mode", source->nick.c_str());
+ source->WriteNumeric(500, ":Only a server may modify the +r user mode");
}
return MODEACTION_DENY;
}
AChannel_M(Module* Creator) : SimpleChannelModeHandler(Creator, "regmoderated", 'M') { }
};
+static bool ReadCGIIRCExt(const char* extname, User* user, const std::string*& out)
+{
+ ExtensionItem* wiext = ServerInstance->Extensions.GetItem(extname);
+ if (!wiext)
+ return false;
+
+ if (wiext->creator->ModuleSourceFile != "m_cgiirc.so")
+ return false;
+
+ StringExtItem* stringext = static_cast<StringExtItem*>(wiext);
+ std::string* addr = stringext->get(user);
+ if (!addr)
+ return false;
+
+ out = addr;
+ return true;
+}
+
class AccountExtItemImpl : public AccountExtItem
{
public:
{
// Logged in
if (IS_LOCAL(user))
- user->WriteNumeric(900, "%s %s %s :You are now logged in as %s",
- user->nick.c_str(), user->GetFullHost().c_str(), value.c_str(), value.c_str());
+ {
+ const std::string* host = &user->dhost;
+ if (user->registered != REG_ALL)
+ {
+ if (!ReadCGIIRCExt("cgiirc_webirc_hostname", user, host))
+ {
+ ReadCGIIRCExt("cgiirc_webirc_ip", user, host);
+ }
+ }
+
+ user->WriteNumeric(900, "%s!%s@%s %s :You are now logged in as %s",
+ user->nick.c_str(), user->ident.c_str(), host->c_str(), value.c_str(), value.c_str());
+ }
AccountEvent(creator, user, value).Send();
}
Channel_r m4;
User_r m5;
AccountExtItemImpl accountname;
+ bool checking_ban;
public:
ModuleServicesAccount() : m1(this), m2(this), m3(this), m4(this), m5(this),
accountname(this)
if (account)
{
- ServerInstance->SendWhoisLine(source, dest, 330, "%s %s %s :is logged in as", source->nick.c_str(), dest->nick.c_str(), account->c_str());
+ ServerInstance->SendWhoisLine(source, dest, 330, "%s %s :is logged in as", dest->nick.c_str(), account->c_str());
}
if (dest->IsModeSet(m5))
{
/* user is registered */
- ServerInstance->SendWhoisLine(source, dest, 307, "%s %s :is a registered nick", source->nick.c_str(), dest->nick.c_str());
+ ServerInstance->SendWhoisLine(source, dest, 307, "%s :is a registered nick", dest->nick.c_str());
}
}
if (c->IsModeSet(m2) && !is_registered && res != MOD_RES_ALLOW)
{
// user messaging a +M channel and is not registered
- user->WriteNumeric(477, user->nick+" "+c->name+" :You need to be identified to a registered account to message this channel");
+ user->WriteNumeric(477, c->name+" :You need to be identified to a registered account to message this channel");
return MOD_RES_DENY;
}
}
if (u->IsModeSet(m3) && !is_registered)
{
// user messaging a +R user and is not registered
- user->WriteNumeric(477, ""+ user->nick +" "+ u->nick +" :You need to be identified to a registered account to message this user");
+ user->WriteNumeric(477, u->nick +" :You need to be identified to a registered account to message this user");
return MOD_RES_DENY;
}
}
ModResult OnCheckBan(User* user, Channel* chan, const std::string& mask) CXX11_OVERRIDE
{
- static bool checking = false;
- if (checking)
+ if (checking_ban)
return MOD_RES_PASSTHRU;
if ((mask.length() > 2) && (mask[1] == ':'))
/* If we made it this far we know the user isn't registered
so just deny if it matches */
- checking = true;
+ checking_ban = true;
bool result = chan->CheckBan(user, mask.substr(2));
- checking = false;
+ checking_ban = false;
if (result)
return MOD_RES_DENY;
if (!is_registered)
{
// joining a +R channel and not identified
- user->WriteNumeric(477, user->nick + " " + chan->name + " :You need to be identified to a registered account to join this channel");
+ user->WriteNumeric(477, chan->name + " :You need to be identified to a registered account to join this channel");
return MOD_RES_DENY;
}
}
};
MODULE_INIT(ModuleServicesAccount)
-