X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_services.cpp;h=0e5c6b58883da76b461dac5e82fedcae84e7c85c;hb=52acbb466b84a1cd161b1c111f855d6f0419fff3;hp=b746f64924ae5d203a64ac60a7cf4fb4671da0b7;hpb=2e52ff280dca14d1598b84fab7a8c2e93fa30910;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_services.cpp b/src/modules/m_services.cpp index b746f6492..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; } @@ -229,18 +222,21 @@ class ModuleServices : public Module 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,7 +251,7 @@ 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; } } @@ -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; }