X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_restrictbanned.cpp;h=ca8c3a426a2003500090d5e6e59758e441948d91;hb=2df56b811b362dbf5a05a0bc7b0eee5ee4d77a40;hp=51ff39772bf3d8f4dcaaf91d4dcdaa439a9fe556;hpb=2e52ff280dca14d1598b84fab7a8c2e93fa30910;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_restrictbanned.cpp b/src/modules/m_restrictbanned.cpp index 51ff39772..ca8c3a426 100644 --- a/src/modules/m_restrictbanned.cpp +++ b/src/modules/m_restrictbanned.cpp @@ -2,24 +2,15 @@ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * - * InspIRCd is copyright (C) 2002-2006 ChatSpike-Dev. - * E-mail: - * - * - * - * Written by Craig Edwards, Craig McLure, and others. + * 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. * * --------------------------------------------------- */ -using namespace std; - -#include "users.h" -#include "channels.h" -#include "modules.h" - #include "inspircd.h" /* $ModDesc: Restricts banned users in a channel. May not speak, etc. */ @@ -28,31 +19,29 @@ class ModuleRestrictBanned : public Module { private: public: - ModuleRestrictBanned(InspIRCd* Me) : Module::Module(Me) + ModuleRestrictBanned(InspIRCd* Me) : Module(Me) { + Implementation eventlist[] = { I_OnLocalTopicChange, I_OnUserPreNick, I_OnUserPreNotice, I_OnUserPreMessage }; + ServerInstance->Modules->Attach(eventlist, this, 4); } - + virtual ~ModuleRestrictBanned() { } - + virtual Version GetVersion() { - return Version(1,1,0,1,VF_VENDOR,API_VERSION); + return Version("$Id$",VF_VENDOR,API_VERSION); } - void Implements(char* List) - { - List[I_OnLocalTopicChange] = List[I_OnUserPreNick] = List[I_OnUserPreNotice] = List[I_OnUserPreMessage] = 1; - } - int CheckRestricted(userrec *user, chanrec *channel, const std::string &action) + int CheckRestricted(User *user, Channel *channel, const std::string &action) { /* aren't local? we don't care. */ if (!IS_LOCAL(user)) return 0; - if (channel->IsBanned(user) && channel->GetStatus(user) < STATUS_VOICE) + if (channel->GetStatus(user) < STATUS_VOICE && channel->IsBanned(user)) { /* banned, boned. drop the message. */ user->WriteServ("NOTICE "+std::string(user->nick)+" :*** You may not " + action + ", as you are banned on channel " + channel->name); @@ -62,42 +51,41 @@ class ModuleRestrictBanned : public Module return 0; } - virtual int OnUserPreNick(userrec *user, const std::string &newnick) + virtual int OnUserPreNick(User *user, const std::string &newnick) { /* if they aren't local, we don't care */ if (!IS_LOCAL(user)) return 0; + /* Allow changes to UID */ + if (isdigit(newnick[0])) + return 0; + /* bit of a special case. */ - for (std::vector::iterator i = user->chans.begin(); i != user->chans.end(); i++) + for (UCListIter i = user->chans.begin(); i != user->chans.end(); i++) { - if (((ucrec*)(*i))->channel != NULL) - { - chanrec *channel = ((ucrec*)(*i))->channel; - - if (CheckRestricted(user, channel, "change your nickname") == 1) - return 1; - } + if (CheckRestricted(user, i->first, "change your nickname") == 1) + return 1; } return 0; } - virtual int OnLocalTopicChange(userrec *user, chanrec *channel, const std::string &topic) + virtual int OnLocalTopicChange(User *user, Channel *channel, const std::string &topic) { return CheckRestricted(user, channel, "change the topic"); } - - virtual int OnUserPreMessage(userrec* user,void* dest,int target_type, std::string &text, char status, CUList &exempt_list) + + virtual int OnUserPreMessage(User* user,void* dest,int target_type, std::string &text, char status, CUList &exempt_list) { return OnUserPreNotice(user,dest,target_type,text,status,exempt_list); } - virtual int OnUserPreNotice(userrec* user,void* dest,int target_type, std::string &text, char status, CUList &exempt_list) + virtual int OnUserPreNotice(User* user,void* dest,int target_type, std::string &text, char status, CUList &exempt_list) { if (target_type == TYPE_CHANNEL) { - chanrec *channel = (chanrec *)dest; + Channel *channel = (Channel *)dest; return CheckRestricted(user, channel, "message the channel"); } @@ -106,28 +94,4 @@ class ModuleRestrictBanned : public Module } }; - -class ModuleRestrictBannedFactory : public ModuleFactory -{ - public: - ModuleRestrictBannedFactory() - { - } - - ~ModuleRestrictBannedFactory() - { - } - - virtual Module * CreateModule(InspIRCd* Me) - { - return new ModuleRestrictBanned(Me); - } - -}; - - -extern "C" void * init_module( void ) -{ - return new ModuleRestrictBannedFactory; -} - +MODULE_INIT(ModuleRestrictBanned)