diff options
author | om <om@e03df62e-2008-0410-955e-edbf42e46eb7> | 2006-03-05 17:46:45 +0000 |
---|---|---|
committer | om <om@e03df62e-2008-0410-955e-edbf42e46eb7> | 2006-03-05 17:46:45 +0000 |
commit | 43b5f0b7ab91435eba02a5391c1c495b31d01fb5 (patch) | |
tree | 5258f91355fd9eb8f36c0dc25ed6a02872599d41 /src | |
parent | 46bd3bb94a4278f450a66c05f4b5fb1d55cc9578 (diff) |
Add block caps module, I'm kinda between the extremes of 'Brain' and 'normal' here. Aka it compiles but I have nfi if it works :P
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@3465 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src')
-rw-r--r-- | src/modules/m_blockcaps.cpp | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/src/modules/m_blockcaps.cpp b/src/modules/m_blockcaps.cpp new file mode 100644 index 000000000..7bfa041d9 --- /dev/null +++ b/src/modules/m_blockcaps.cpp @@ -0,0 +1,121 @@ +/* +------------------------------------+ + * | Inspire Internet Relay Chat Daemon | + * +------------------------------------+ + * + * InspIRCd is copyright (C) 2002-2006 ChatSpike-Dev. + * E-mail: + * <brain@chatspike.net> + * <Craig@chatspike.net> + * <omster@gmail.com> + * + * Written by Craig Edwards, Craig McLure, and others. + * This program is free but copyrighted software; see + * the file COPYING for details. + * + * --------------------------------------------------- + */ + +#include "users.h" +#include "channels.h" +#include "modules.h" +#include "helperfuncs.h" + +/* $ModDesc: Provides support for unreal-style channel mode +c */ + +class ModuleBlockCAPS : public Module +{ + Server *Srv; +public: + + ModuleBlockCAPS(Server* Me) : Module::Module(Me) + { + Srv = Me; + Srv->AddExtendedMode('P', MT_CHANNEL, false, 0, 0); + } + + void Implements(char* List) + { + List[I_On005Numeric] = List[I_OnUserPreMessage] = List[I_OnUserPreNotice] = List[I_OnExtendedMode] = 1; + } + + virtual void On005Numeric(std::string &output) + { + InsertMode(output, "P", 4); + } + + virtual int OnUserPreMessage(userrec* user,void* dest,int target_type, std::string &text, char status) + { + if (target_type == TYPE_CHANNEL) + { + chanrec* c = (chanrec*)dest; + + if (c->IsCustomModeSet('P')) + { + for(unsigned int i = 0; i < text.length(); i++) + { + if((text[i] <= 'A') || (text[i] >= 'Z')) + { + return 0; + } + } + + WriteServ(user->fd, "404 %s %s :Can't send all-CAPS to channel (+P set)", user->nick, c->name); + return 1; + } + } + return 0; + } + + virtual int OnUserPreNotice(userrec* user,void* dest,int target_type, std::string &text, char status) + { + return OnUserPreMessage(user,dest,target_type,text,status); + } + + virtual int OnExtendedMode(userrec* user, void* target, char modechar, int type, bool mode_on, string_list ¶ms) + { + // check if this is our mode character... + if ((modechar == 'P') && (type == MT_CHANNEL)) + { + log(DEBUG,"Allowing P change"); + return 1; + } + else + { + return 0; + } + } + + virtual ~ModuleBlockCAPS() + { + } + + virtual Version GetVersion() + { + return Version(1,0,0,0,VF_STATIC|VF_VENDOR); + } +}; + + +class ModuleBlockCAPSFactory : public ModuleFactory +{ + public: + ModuleBlockCAPSFactory() + { + } + + ~ModuleBlockCAPSFactory() + { + } + + virtual Module * CreateModule(Server* Me) + { + return new ModuleBlockCAPS(Me); + } + +}; + + +extern "C" void * init_module( void ) +{ + return new ModuleBlockCAPSFactory; +} |