]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/mode.cpp
auto-set +s when +n is set (as +n requires +s) - allow +n to be 'set twice' allowing...
[user/henk/code/inspircd.git] / src / mode.cpp
index 8351ab2e0bde21d22a941a54e8d10a2a12c5b62d..23cbe5ccb299437b4834205a34f1ba23f73ce660 100644 (file)
@@ -496,7 +496,7 @@ void ModeParser::Process(const char** parameters, int pcnt, userrec *user, bool
                                }
                                else
                                {
-                                       targetuser->WriteServ("MODE %s %s",targetuser->nick,output_sequence.c_str());
+                                       targetuser->WriteServ("MODE %s %s%s",targetuser->nick,output_sequence.c_str(), parameter_list.str().c_str());
                                }
                        }
                        else
@@ -509,7 +509,7 @@ void ModeParser::Process(const char** parameters, int pcnt, userrec *user, bool
                                }
                                else
                                {
-                                       user->WriteTo(targetuser,"MODE %s %s",targetuser->nick,output_sequence.c_str());
+                                       user->WriteTo(targetuser,"MODE %s %s%s",targetuser->nick,output_sequence.c_str(), parameter_list.str().c_str());
                                        FOREACH_MOD(I_OnMode,OnMode(user, targetuser, TYPE_USER, output_sequence));
                                }
                        }
@@ -666,6 +666,31 @@ ModeHandler* ModeParser::FindPrefix(unsigned const char pfxletter)
        return NULL;
 }
 
+std::string ModeParser::ModeString(userrec* user, chanrec* channel)
+{
+       std::string types;
+       std::string pars;
+
+       for (unsigned char mode = 'A'; mode <= 'z'; mode++)
+       {
+               unsigned char pos = (mode-65) | MASK_CHANNEL;
+               ModeHandler* mh = modehandlers[pos];
+               if ((mh) && (mh->GetNumParams(true)) && (mh->GetNumParams(false)))
+               {
+                       ModePair ret;
+                       ret = mh->ModeSet(NULL, user, channel, user->nick);
+                       if (ret.first)
+                       {
+                               pars.append(" ");
+                               pars.append(user->nick);
+                               types.push_back(mh->GetModeChar());
+                       }
+               }
+       }
+
+       return types+pars;
+}
+
 std::string ModeParser::ChanModes()
 {
        std::string type1;      /* Listmodes EXCEPT those with a prefix */