X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_services.cpp;h=fc07708c2b80d53a1b357ee77ca6692fd110819a;hb=b7e299c2e10d915d5e59df4cb3f54951c8daa999;hp=bd656b042cbcb9e7ce120f85127b017b2d96f795;hpb=3a554ef1e9be9dbcf3de3301a4a6c2938d643bea;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_services.cpp b/src/modules/m_services.cpp index bd656b042..fc07708c2 100644 --- a/src/modules/m_services.cpp +++ b/src/modules/m_services.cpp @@ -11,10 +11,10 @@ * --------------------------------------------------- */ +#include "inspircd.h" #include "users.h" #include "channels.h" #include "modules.h" -#include "inspircd.h" static bool kludgeme = false; @@ -33,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; } } @@ -60,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; } @@ -68,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; } } @@ -177,7 +173,7 @@ class ModuleServices : public Module User_R* m5; public: ModuleServices(InspIRCd* Me) - : Module::Module(Me) + : Module(Me) { m1 = new Channel_r(ServerInstance); @@ -185,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; } @@ -211,7 +209,7 @@ class ModuleServices : public Module virtual void OnUserPostNick(userrec* user, const std::string &oldnick) { /* On nickchange, if they have +r, remove it */ - if (user->IsModeSet('r')) + if (user->IsModeSet('r') && irc::string(user->nick) != oldnick) { const char* modechange[2]; modechange[0] = user->nick; @@ -224,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; } } @@ -250,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; } } @@ -276,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; } } @@ -306,27 +307,4 @@ class ModuleServices : public Module }; -class ModuleServicesFactory : public ModuleFactory -{ - public: - ModuleServicesFactory() - { - } - - ~ModuleServicesFactory() - { - } - - virtual Module * CreateModule(InspIRCd* Me) - { - return new ModuleServices(Me); - } - -}; - - -extern "C" void * init_module( void ) -{ - return new ModuleServicesFactory; -} - +MODULE_INIT(ModuleServices)