]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_remove.cpp
Add m_clearchan which removes users from a channel without sending n*(n+1)/2 QUIT...
[user/henk/code/inspircd.git] / src / modules / m_remove.cpp
index 48f0f02764108f05a4cbb0b335d7ddf06c56055c..ed9b6ce253876f7e3ebb8969431cda6b613288a3 100644 (file)
@@ -60,7 +60,10 @@ class RemoveBase : public Command
                const std::string& username = parameters[neworder ? 1 : 0];
 
                /* Look up the user we're meant to be removing from the channel */
-               target = ServerInstance->FindNick(username);
+               if (IS_LOCAL(user))
+                       target = ServerInstance->FindNickOnly(username);
+               else
+                       target = ServerInstance->FindNick(username);
 
                /* And the channel we're meant to be removing them from */
                channel = ServerInstance->FindChan(channame);
@@ -68,7 +71,7 @@ class RemoveBase : public Command
                /* Fix by brain - someone needs to learn to validate their input! */
                if ((!target) || (target->registered != REG_ALL) || (!channel))
                {
-                       user->WriteNumeric(ERR_NOSUCHNICK, "%s %s :No such nick/channel", user->nick.c_str(), !channel ? channame.c_str() : username.c_str());
+                       user->WriteNumeric(ERR_NOSUCHNICK, "%s :No such nick/channel", !channel ? channame.c_str() : username.c_str());
                        return CMD_FAILURE;
                }
 
@@ -81,9 +84,9 @@ class RemoveBase : public Command
                int ulevel = channel->GetPrefixValue(user);
                int tlevel = channel->GetPrefixValue(target);
 
-               if (ServerInstance->ULine(target->server))
+               if (target->server->IsULine())
                {
-                       user->WriteNumeric(482, "%s %s :Only a u-line may remove a u-line from a channel.", user->nick.c_str(), channame.c_str());
+                       user->WriteNumeric(482, "%s :Only a u-line may remove a u-line from a channel.", channame.c_str());
                        return CMD_FAILURE;
                }
 
@@ -126,7 +129,7 @@ class RemoveBase : public Command
                else
                {
                        /* m_nokicks.so was loaded and +Q was set, block! */
-                       user->WriteServ( "484 %s %s :Can't remove user %s from channel (nokicks mode is set)", user->nick.c_str(), channel->name.c_str(), target->nick.c_str());
+                       user->WriteNumeric(ERR_RESTRICTED, "%s :Can't remove user %s from channel (nokicks mode is set)", channel->name.c_str(), target->nick.c_str());
                        return CMD_FAILURE;
                }