]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/mode.cpp
Annotations
[user/henk/code/inspircd.git] / src / mode.cpp
index ddc2d4d16c573fbc461b65a1be72d5a59516745e..ceb801c695a04f3f920310c00e52badc4e0962f6 100644 (file)
@@ -271,6 +271,8 @@ void ModeParser::Process(const char** parameters, int pcnt, userrec *user, bool
 
        ServerInstance->Log(DEBUG,"ModeParser::Process start");
 
+       LastParse = "";
+
        /* Special case for displaying the list for listmodes,
         * e.g. MODE #chan b, or MODE #chan +b without a parameter
         */
@@ -510,17 +512,11 @@ void ModeParser::Process(const char** parameters, int pcnt, userrec *user, bool
                                {
                                        targetchannel->WriteChannelWithServ(ServerInstance->Config->ServerName, "MODE %s %s%s", targetchannel->name, output_sequence.c_str(), parameter_list.str().c_str());
                                        this->LastParse = targetchannel->name;
-                                       LastParse.append(" ");
-                                       LastParse.append(output_sequence);
-                                       LastParse.append(parameter_list.str());
                                }
                                else
                                {
                                        targetuser->WriteServ("MODE %s %s%s",targetuser->nick,output_sequence.c_str(), parameter_list.str().c_str());
                                        this->LastParse = targetuser->nick;
-                                       LastParse.append(" ");
-                                       LastParse.append(output_sequence);
-                                       LastParse.append(parameter_list.str());
                                }
                        }
                        else
@@ -531,20 +527,18 @@ void ModeParser::Process(const char** parameters, int pcnt, userrec *user, bool
                                        targetchannel->WriteChannel(user,"MODE %s %s%s",targetchannel->name,output_sequence.c_str(),parameter_list.str().c_str());
                                        FOREACH_MOD(I_OnMode,OnMode(user, targetchannel, TYPE_CHANNEL, output_sequence + parameter_list.str()));
                                        this->LastParse = targetchannel->name;
-                                       LastParse.append(" ");
-                                       LastParse.append(output_sequence);
-                                       LastParse.append(parameter_list.str());
                                }
                                else
                                {
                                        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));
                                        this->LastParse = targetuser->nick;
-                                       LastParse.append(" ");
-                                       LastParse.append(output_sequence);
-                                       LastParse.append(parameter_list.str());
                                }
                        }
+
+                       LastParse.append(" ");
+                       LastParse.append(output_sequence);
+                       LastParse.append(parameter_list.str());
                }
        }
 }
@@ -740,7 +734,7 @@ std::string ModeParser::ModeString(userrec* user, chanrec* channel)
                {
                        ModePair ret;
                        ret = mh->ModeSet(NULL, user, channel, user->nick);
-                       if (ret.first)
+                       if ((ret.first) && (ret.second == user->nick))
                        {
                                pars.append(" ");
                                pars.append(user->nick);