* +------------------------------------+
*
* InspIRCd: (C) 2002-2009 InspIRCd Development Team
- * See: http://www.inspircd.org/wiki/index.php/Credits
+ * See: http://wiki.inspircd.org/Credits
*
* This program is free but copyrighted software; see
* the file COPYING for details.
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!");
- Implementation eventlist[] = { I_OnWhois, I_OnUserPreMessage, I_OnUserPreNotice, I_OnUserPreJoin,
+ Implementation eventlist[] = { I_OnWhois, I_OnUserPreMessage, I_OnUserPreNotice, I_OnUserPreJoin, I_OnCheckBan,
I_OnSyncUserMetaData, I_OnUserQuit, I_OnCleanup, I_OnDecodeMetaData, I_On005Numeric, I_OnUserPostNick };
ServerInstance->Modules->Attach(eventlist, this, 10);
if (account)
{
- if (c->IsExtBanned(*account, 'M'))
+ if (c->GetExtBanStatus(*account, 'M') < 0)
{
// may not speak (text is deliberately vague, so they don't know which restriction to evade)
user->WriteNumeric(477, ""+std::string(user->nick)+" "+std::string(c->name)+" :You may not speak in this channel");
return 0;
}
+ virtual int OnCheckBan(User* user, Channel* chan)
+ {
+ std::string* account;
+ if (!user->GetExt("accountname", account))
+ return 0;
+ return chan->GetExtBanStatus(*account, 'R');
+ }
+
virtual int OnUserPreNotice(User* user,void* dest,int target_type, std::string &text, char status, CUList &exempt_list)
{
return OnUserPreMessage(user, dest, target_type, text, status, exempt_list);
return 1;
}
}
-
- if (account)
- {
- if (chan->IsExtBanned(*account, 'R'))
- {
- // may not join
- user->WriteNumeric(ERR_BANNEDFROMCHAN, "%s %s :Cannot join channel (You're banned)", user->nick.c_str(), chan->name.c_str());
- return 1;
- }
- }
}
return 0;
}
{
User* dest = (User*)target;
- /* logging them out? */
- if (extdata.empty())
- {
- std::string* account;
- dest->GetExt("accountname", account);
- if (account)
- {
- dest->Shrink("accountname");
- delete account;
- }
+ std::string* account;
+ if (dest->GetExt("accountname", account)) {
+ // remove old account so that we can set new (or leave unset)
+ dest->Shrink("accountname");
+ delete account;
}
- else
+
+ if (!extdata.empty())
{
- // if they dont already have an accountname field, accept the remote server's
- std::string* text;
- if (!dest->GetExt("accountname", text))
- {
- text = new std::string(extdata);
- // remove any accidental leading/trailing spaces
- trim(*text);
- dest->Extend("accountname", text);
-
- if (IS_LOCAL(dest))
- dest->WriteNumeric(900, "%s %s %s :You are now logged in as %s", dest->nick.c_str(), dest->GetFullHost().c_str(), text->c_str(), text->c_str());
-
- AccountData ac;
- ac.user = dest;
- ac.account = *text;
- Event n((char*)&ac, this, "account_login");
- n.Send(ServerInstance);
- }
+ account = new std::string(extdata);
+ // remove any accidental leading/trailing spaces
+ trim(*account);
+ dest->Extend("accountname", account);
+
+ if (IS_LOCAL(dest))
+ 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(ServerInstance);
}
}
}