]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/coremods/core_user/core_user.cpp
Implement IRCv3 message tag support.
[user/henk/code/inspircd.git] / src / coremods / core_user / core_user.cpp
index 103880a6ecb3a5422070862abbb8535d1fdab5f0..e4e7a5056d899b7adebad0ec3efafee9b4e6f73c 100644 (file)
 #include "inspircd.h"
 #include "core_user.h"
 
-class CommandMode : public Command
-{
- public:
-       /** Constructor for mode.
-        */
-       CommandMode(Module* parent)
-               : Command(parent, "MODE", 1)
-       {
-               syntax = "<target> <modes> {<mode-parameters>}";
-       }
-
-       /** Handle command.
-        * @param parameters The parameters to the command
-        * @param user The user issuing the command
-        * @return A value from CmdResult to indicate command success or failure.
-        */
-       CmdResult Handle(const std::vector<std::string>& parameters, User* user)
-       {
-               ServerInstance->Modes->Process(parameters, user, (IS_LOCAL(user) ? ModeParser::MODE_NONE : ModeParser::MODE_LOCALONLY));
-               return CMD_SUCCESS;
-       }
-
-       RouteDescriptor GetRouting(User* user, const std::vector<std::string>& parameters)
-       {
-               return (IS_LOCAL(user) ? ROUTE_LOCALONLY : ROUTE_BROADCAST);
-       }
-};
-
 /** Handle /PASS.
  */
 class CommandPass : public SplitCommand
@@ -68,12 +40,13 @@ class CommandPass : public SplitCommand
         * @param user The user issuing the command
         * @return A value from CmdResult to indicate command success or failure.
         */
-       CmdResult HandleLocal(const std::vector<std::string>& parameters, LocalUser *user)
+       CmdResult HandleLocal(LocalUser* user, const Params& parameters) CXX11_OVERRIDE
        {
                // Check to make sure they haven't registered -- Fix by FCS
                if (user->registered == REG_ALL)
                {
-                       user->WriteNumeric(ERR_ALREADYREGISTERED, ":You may not reregister");
+                       user->CommandFloodPenalty += 1000;
+                       user->WriteNumeric(ERR_ALREADYREGISTERED, "You may not reregister");
                        return CMD_FAILURE;
                }
                user->password = parameters[0];
@@ -84,15 +57,14 @@ class CommandPass : public SplitCommand
 
 /** Handle /PING.
  */
-class CommandPing : public Command
+class CommandPing : public SplitCommand
 {
  public:
        /** Constructor for ping.
         */
        CommandPing(Module* parent)
-               : Command(parent, "PING", 1, 2)
+               : SplitCommand(parent, "PING", 1, 2)
        {
-               Penalty = 0;
                syntax = "<servername> [:<servername>]";
        }
 
@@ -101,9 +73,10 @@ class CommandPing : public Command
         * @param user The user issuing the command
         * @return A value from CmdResult to indicate command success or failure.
         */
-       CmdResult Handle(const std::vector<std::string>& parameters, User* user)
+       CmdResult HandleLocal(LocalUser* user, const Params& parameters) CXX11_OVERRIDE
        {
-               user->WriteServ("PONG %s :%s", ServerInstance->Config->ServerName.c_str(), parameters[0].c_str());
+               ClientProtocol::Messages::Pong pong(parameters[0]);
+               user->Send(ServerInstance->GetRFCEvents().pong, pong);
                return CMD_SUCCESS;
        }
 };
@@ -127,11 +100,18 @@ class CommandPong : public Command
         * @param user The user issuing the command
         * @return A value from CmdResult to indicate command success or failure.
         */
-       CmdResult Handle(const std::vector<std::string>& parameters, User* user)
+       CmdResult Handle(User* user, const Params& parameters) CXX11_OVERRIDE
        {
                // set the user as alive so they survive to next ping
-               if (IS_LOCAL(user))
-                       IS_LOCAL(user)->lastping = 1;
+               LocalUser* localuser = IS_LOCAL(user);
+               if (localuser)
+               {
+                       // Increase penalty unless we've sent a PING and this is the reply
+                       if (localuser->lastping)
+                               localuser->CommandFloodPenalty += 1000;
+                       else
+                               localuser->lastping = 1;
+               }
                return CMD_SUCCESS;
        }
 };
@@ -168,11 +148,24 @@ class CoreModUser : public Module
        CommandPong cmdpong;
        CommandQuit cmdquit;
        CommandUser cmduser;
+       SimpleUserModeHandler invisiblemode;
+       ModeUserOperator operatormode;
+       ModeUserServerNoticeMask snomaskmode;
 
  public:
        CoreModUser()
-               : cmdaway(this), cmdmode(this), cmdnick(this), cmdpart(this), cmdpass(this), cmdping(this)
-               , cmdpong(this), cmdquit(this), cmduser(this)
+               : cmdaway(this)
+               , cmdmode(this)
+               , cmdnick(this)
+               , cmdpart(this)
+               , cmdpass(this)
+               , cmdping(this)
+               , cmdpong(this)
+               , cmdquit(this)
+               , cmduser(this)
+               , invisiblemode(this, "invisible", 'i')
+               , operatormode(this)
+               , snomaskmode(this)
        {
        }