]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/coremods/core_user/cmd_mode.cpp
Merge pull request #976 from SaberUK/master+fix-xline-db
[user/henk/code/inspircd.git] / src / coremods / core_user / cmd_mode.cpp
index f1e857fc13b9e6eee8c36fac64d34eae1d73c262..190983d13047b28d9f2cd6568d3d9ae933148d2b 100644 (file)
@@ -143,11 +143,16 @@ void CommandMode::DisplayCurrentModes(User* user, User* targetuser, Channel* tar
                if (targetuser == user || user->HasPrivPermission("users/auspex"))
                {
                        // Display user's current mode string
-                       user->WriteNumeric(RPL_UMODEIS, ":+%s", targetuser->FormatModes());
+                       // XXX: Use WriteServ() because WriteNumeric() assumes the target (i.e. next word after the number)
+                       // is 'user' and puts his nick there which is not what we want
+                       user->WriteServ("%03d %s :+%s", RPL_UMODEIS, targetuser->nick.c_str(), targetuser->FormatModes());
                        if (targetuser->IsOper())
                        {
                                ModeHandler* snomask = ServerInstance->Modes->FindMode('s', MODETYPE_USER);
-                               user->WriteNumeric(RPL_SNOMASKIS, "%s :Server notice mask", snomask->GetUserParameter(user).c_str());
+                               std::string snomaskstr = snomask->GetUserParameter(user);
+                               // snomaskstr is empty if the snomask mode isn't set, otherwise it begins with a '+'.
+                               // In the former case output a "+", not an empty string.
+                               user->WriteServ("%03d %s %s%s :Server notice mask", RPL_SNOMASKIS, targetuser->nick.c_str(), (snomaskstr.empty() ? "+" : ""), snomaskstr.c_str());
                        }
                }
                else