diff options
author | w00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7> | 2008-09-06 13:36:44 +0000 |
---|---|---|
committer | w00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7> | 2008-09-06 13:36:44 +0000 |
commit | 3fab57d9eccd07997449f9df00f25292b192f816 (patch) | |
tree | 23539f4f8a7befb98052c4b58b268df230109670 | |
parent | 26dd7011744e38cfd61089c23d148c5b10654522 (diff) |
Add m_operinvex, adds first use for extended invex (added by Brain). Allows for +I O:opertypemask, +b O:opertype, +e O:opertype.
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@10416 e03df62e-2008-0410-955e-edbf42e46eb7
-rw-r--r-- | src/modules/m_operinvex.cpp | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/src/modules/m_operinvex.cpp b/src/modules/m_operinvex.cpp new file mode 100644 index 000000000..57d983fe7 --- /dev/null +++ b/src/modules/m_operinvex.cpp @@ -0,0 +1,83 @@ +/* +------------------------------------+ + * | Inspire Internet Relay Chat Daemon | + * +------------------------------------+ + * + * InspIRCd: (C) 2002-2008 InspIRCd Development Team + * See: http://www.inspircd.org/wiki/index.php/Credits + * + * This program is free but copyrighted software; see + * the file COPYING for details. + * + * --------------------------------------------------- + */ + +#include "inspircd.h" +#include "u_listmode.h" + +/* $ModDep: ../../include/u_listmode.h */ + +/* $ModDesc: Implements extban/invex +I O: - opertype bans */ + +class ModuleGecosBan : public Module +{ + private: + public: + ModuleGecosBan(InspIRCd* Me) : Module(Me) + { + Implementation eventlist[] = { I_OnUserPreJoin, I_On005Numeric }; + ServerInstance->Modules->Attach(eventlist, this, 2); + } + + virtual ~ModuleGecosBan() + { + } + + virtual Version GetVersion() + { + return Version("$Id$", VF_VENDOR, API_VERSION); + } + + virtual int OnCheckInvite(User *user, Channel *c) + { + if (!IS_LOCAL(user) || !IS_OPER(user)) + return 0; + + Module* ExceptionModule = ServerInstance->Modules->Find("m_inviteexception.so"); + if (ExceptionModule) + { + if (ListModeRequest(this, ExceptionModule, user->oper, 'O', c).Send()) + { + // Oper type is exempt + return 1; + } + } + + return 0; + } + + virtual int OnUserPreJoin(User *user, Channel *c, const char *cname, std::string &privs, const std::string &key) + { + if (!IS_LOCAL(user) || !IS_OPER(user)) + return 0; + + if (!c) + return 0; + + if (c->IsExtBanned(user->oper, 'O')) + { + user->WriteNumeric(ERR_BANNEDFROMCHAN, "%s %s :Cannot join channel (You're banned)", user->nick.c_str(), c->name.c_str()); + return 1; + } + + return 0; + } + + virtual void On005Numeric(std::string &output) + { + ServerInstance->AddExtBanChar('O'); + } +}; + + +MODULE_INIT(ModuleGecosBan) + |