X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_services.cpp;h=929c45f901ad4b7e30f76a15db06f10040ca744f;hb=eb4229deed0281ae566ef7e55a144e5d3183a4b2;hp=74c2bf2dc4cc12ebda00a2b39cfa6f13e1b23eff;hpb=740b09e2aee345c6fde199986d8eab6e0db224e3;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_services.cpp b/src/modules/m_services.cpp index 74c2bf2dc..929c45f90 100644 --- a/src/modules/m_services.cpp +++ b/src/modules/m_services.cpp @@ -37,6 +37,25 @@ class ModuleServices : public Module Srv->AddExtendedMode('R',MT_CLIENT,false,0,0); Srv->AddExtendedMode('M',MT_CHANNEL,false,0,0); } + + virtual void On005Numeric(std::string &output) + { + std::stringstream line(output); + std::string temp1, temp2; + while (!line.eof()) + { + line >> temp1; + if (temp1.substr(0,10) == "CHANMODES=") + { + // append the chanmode to the end + temp1 = temp1.substr(10,temp1.length()); + temp1 = "CHANMODES=" + temp1 + "rRM"; + } + temp2 = temp2 + temp1 + " "; + } + if (temp2.length()) + output = temp2.substr(0,temp2.length()-1); + } virtual int OnExtendedMode(userrec* user, void* target, char modechar, int type, bool mode_on, string_list ¶ms) { @@ -46,7 +65,7 @@ class ModuleServices : public Module if (type == MT_CHANNEL) { // only a u-lined server may add or remove the +r mode. - if ((Srv->IsUlined(user->nick)) || (Srv->IsUlined(user->server))) + if ((Srv->IsUlined(user->nick)) || (Srv->IsUlined(user->server)) || (!strcmp(user->server,""))) { return 1; } @@ -57,13 +76,13 @@ class ModuleServices : public Module } else { - if (!strcmp(user->server,"")) + if ((Srv->IsUlined(user->nick)) || (Srv->IsUlined(user->server)) || (!strcmp(user->server,""))) { return 1; } else { - Srv->SendServ(user->fd,"500 "+std::string(user->nick)+" :Only a server may modify the +r user mode"); + Srv->SendServ(user->fd,"500 "+std::string(user->nick)+" :Only a U-Lined server may modify the +r user mode"); } } } @@ -85,14 +104,14 @@ class ModuleServices : public Module return 0; } - virtual int OnUserPreMessage(userrec* user,void* dest,int target_type, std::string text) + virtual int OnUserPreMessage(userrec* user,void* dest,int target_type, std::string &text) { if (target_type == TYPE_CHANNEL) { chanrec* c = (chanrec*)dest; if ((c->IsCustomModeSet('M')) && (!strchr(user->modes,'r'))) { - if ((Srv->IsUlined(user->nick)) || (Srv->IsUlined(user->server))) + if ((Srv->IsUlined(user->nick)) || (Srv->IsUlined(user->server)) || (!strcmp(user->server,""))) { // user is ulined, can speak regardless return 0; @@ -120,7 +139,7 @@ class ModuleServices : public Module return 0; } - virtual int OnUserPreNotice(userrec* user,void* dest,int target_type, std::string text) + virtual int OnUserPreNotice(userrec* user,void* dest,int target_type, std::string &text) { if (target_type == TYPE_CHANNEL) { @@ -184,7 +203,7 @@ class ModuleServices : public Module virtual Version GetVersion() { - return Version(1,0,0,0); + return Version(1,0,0,0,VF_STATIC|VF_VENDOR); } virtual void OnUserConnect(userrec* user)