X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_services.cpp;h=0e5c6b58883da76b461dac5e82fedcae84e7c85c;hb=02c6ce1ad09a7471a6b03dc00bac4b843d157489;hp=1ae3c099266757652696974d66d2925b139ce213;hpb=7f9c6c5118261eac40d9bae22ac2c0ede670512d;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_services.cpp b/src/modules/m_services.cpp index 1ae3c0992..0e5c6b588 100644 --- a/src/modules/m_services.cpp +++ b/src/modules/m_services.cpp @@ -2,24 +2,19 @@ * | 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-2007 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 "inspircd.h" #include "users.h" #include "channels.h" #include "modules.h" -#include "inspircd.h" static bool kludgeme = false; @@ -38,14 +33,12 @@ class Channel_r : public ModeHandler // only a u-lined server may add or remove the +r mode. if ((ServerInstance->ULine(source->nick)) || (ServerInstance->ULine(source->server)) || (!*source->server || (strchr(source->nick,'.')))) { - ServerInstance->Log(DEBUG,"Allowing cmode +r, server and nick are: '%s','%s'",source->nick,source->server); channel->SetMode('r',adding); return MODEACTION_ALLOW; } else { - ServerInstance->Log(DEBUG,"Only a server can set chanmode +r, server and nick are: '%s','%s'",source->nick,source->server); - source->WriteServ("500 "+std::string(source->nick)+" :Only a server may modify the +r channel mode"); + source->WriteServ("500 %s :Only a server may modify the +r channel mode", source->nick); return MODEACTION_DENY; } } @@ -65,7 +58,6 @@ class User_r : public ModeHandler { if ((adding && !dest->IsModeSet('r')) || (!adding && dest->IsModeSet('r'))) { - ServerInstance->Log(DEBUG,"Allowing umode +r, server and nick are: '%s','%s'",source->nick,source->server); dest->SetMode('r',adding); return MODEACTION_ALLOW; } @@ -73,8 +65,7 @@ class User_r : public ModeHandler } else { - ServerInstance->Log(DEBUG,"Only a server can set umode +r, server and nick are: '%s','%s'",source->nick, source->server); - source->WriteServ("500 "+std::string(source->nick)+" :Only a server may modify the +r user mode"); + source->WriteServ("500 %s :Only a server may modify the +r user mode", source->nick); return MODEACTION_DENY; } } @@ -182,7 +173,7 @@ class ModuleServices : public Module User_R* m5; public: ModuleServices(InspIRCd* Me) - : Module::Module(Me) + : Module(Me) { m1 = new Channel_r(ServerInstance); @@ -190,11 +181,13 @@ class ModuleServices : public Module m3 = new Channel_M(ServerInstance); m4 = new User_r(ServerInstance); m5 = new User_R(ServerInstance); - ServerInstance->AddMode(m1, 'r'); - ServerInstance->AddMode(m2, 'R'); - ServerInstance->AddMode(m3, 'M'); - ServerInstance->AddMode(m4, 'r'); - ServerInstance->AddMode(m5, 'R'); + + if (!ServerInstance->AddMode(m1, 'r') || !ServerInstance->AddMode(m2, 'R') || !ServerInstance->AddMode(m3, 'M') + || !ServerInstance->AddMode(m4, 'r') || !ServerInstance->AddMode(m5, 'R')) + { + throw ModuleException("Could not add user and channel modes!"); + } + kludgeme = false; } @@ -204,7 +197,7 @@ class ModuleServices : public Module if (dest->IsModeSet('r')) { /* user is registered */ - source->WriteServ("307 %s %s :is a registered nick", source->nick, dest->nick); + ServerInstance->SendWhoisLine(source, dest, 307, "%s %s :is a registered nick", source->nick, dest->nick); } } @@ -227,20 +220,23 @@ class ModuleServices : public Module } } - virtual int OnUserPreMessage(userrec* user,void* dest,int target_type, std::string &text, char status) + virtual int OnUserPreMessage(userrec* user,void* dest,int target_type, std::string &text, char status, CUList &exempt_list) { + if (!IS_LOCAL(user)) + return 0; + if (target_type == TYPE_CHANNEL) { chanrec* c = (chanrec*)dest; if ((c->IsModeSet('M')) && (!user->IsModeSet('r'))) { - if ((ServerInstance->ULine(user->nick)) || (ServerInstance->ULine(user->server)) || (!strcmp(user->server,""))) + if ((ServerInstance->ULine(user->nick)) || (ServerInstance->ULine(user->server))) { // user is ulined, can speak regardless return 0; } // user messaging a +M channel and is not registered - user->WriteServ("477 "+std::string(user->nick)+" "+std::string(c->name)+" :You need a registered nickname to speak on this channel"); + user->WriteServ("477 %s %s :You need a registered nickname to speak on this channel", user->nick, c->name); return 1; } } @@ -255,16 +251,16 @@ class ModuleServices : public Module return 0; } // user messaging a +R user and is not registered - user->WriteServ("477 "+std::string(user->nick)+" "+std::string(u->nick)+" :You need a registered nickname to message this user"); + user->WriteServ("477 %s %s :You need a registered nickname to message this user", user->nick, u->nick); return 1; } } return 0; } - virtual int OnUserPreNotice(userrec* user,void* dest,int target_type, std::string &text, char status) + virtual int OnUserPreNotice(userrec* user,void* dest,int target_type, std::string &text, char status, CUList &exempt_list) { - return OnUserPreMessage(user,dest,target_type,text,status); + return OnUserPreMessage(user,dest,target_type,text,status, exempt_list); } virtual int OnUserPreJoin(userrec* user, chanrec* chan, const char* cname, std::string &privs) @@ -281,7 +277,7 @@ class ModuleServices : public Module return 0; } // joining a +R channel and not identified - user->WriteServ("477 "+std::string(user->nick)+" "+std::string(chan->name)+" :You need a registered nickname to join this channel"); + user->WriteServ("477 %s %s :You need a registered nickname to join this channel", user->nick, chan->name); return 1; } } @@ -330,7 +326,7 @@ class ModuleServicesFactory : public ModuleFactory }; -extern "C" void * init_module( void ) +extern "C" DllExport void * init_module( void ) { return new ModuleServicesFactory; }