]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/coremods/core_user/core_user.h
Use the default OnParameterMissing in ModeUserServerNoticeMask.
[user/henk/code/inspircd.git] / src / coremods / core_user / core_user.h
index 9c63e6592342d61a1280a52c3543cbba16890a7a..8289ad5a80e958070e0a65a4b9bfd96bb49400a1 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * InspIRCd -- Internet Relay Chat Daemon
  *
+ *   Copyright (C) 2017-2019 Sadie Powell <sadie@witchery.services>
  *   Copyright (C) 2014 Attila Molnar <attilamolnar@hush.com>
  *
  * This file is part of InspIRCd.  InspIRCd is free software: you can
@@ -20,6 +21,8 @@
 #pragma once
 
 #include "inspircd.h"
+#include "listmode.h"
+#include "modules/away.h"
 
 class MessageWrapper
 {
@@ -49,6 +52,9 @@ class MessageWrapper
  */
 class CommandAway : public Command
 {
+ private:
+       Away::EventProvider awayevprov;
+
  public:
        /** Constructor for away.
         */
@@ -58,13 +64,35 @@ class CommandAway : 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);
-       RouteDescriptor GetRouting(User* user, const std::vector<std::string>& parameters);
+       CmdResult Handle(User* user, const Params& parameters) CXX11_OVERRIDE;
+       RouteDescriptor GetRouting(User* user, const Params& parameters) CXX11_OVERRIDE;
 };
 
+/** Handle /ISON.
+ */
+class CommandIson : public SplitCommand
+{
+ public:
+       /** Constructor for ison.
+        */
+       CommandIson(Module* parent)
+               : SplitCommand(parent, "ISON", 1)
+       {
+               allow_empty_last_param = false;
+               syntax = "<nick> [<nick>]+";
+       }
+       /** 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 HandleLocal(LocalUser* user, const Params& parameters) CXX11_OVERRIDE;
+};
+
+
 /** Handle /NICK.
  */
-class CommandNick : public Command
+class CommandNick : public SplitCommand
 {
  public:
        /** Constructor for nick.
@@ -76,7 +104,7 @@ class CommandNick : 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;
 };
 
 /** Handle /PART.
@@ -95,14 +123,17 @@ class CommandPart : 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);
-       RouteDescriptor GetRouting(User* user, const std::vector<std::string>& parameters);
+       CmdResult Handle(User* user, const Params& parameters) CXX11_OVERRIDE;
+       RouteDescriptor GetRouting(User* user, const Params& parameters) CXX11_OVERRIDE;
 };
 
 /** Handle /QUIT.
  */
 class CommandQuit : public Command
 {
+ private:
+       StringExtItem operquit;
+
  public:
        MessageWrapper msgwrap;
 
@@ -115,9 +146,9 @@ class CommandQuit : 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;
 
-       RouteDescriptor GetRouting(User* user, const std::vector<std::string>& parameters);
+       RouteDescriptor GetRouting(User* user, const Params& parameters) CXX11_OVERRIDE;
 };
 
 /** Handle /USER.
@@ -134,5 +165,71 @@ class CommandUser : 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;
+
+       /** Run the OnUserRegister hook if the user has sent both NICK and USER. Called after an unregistered user
+        * successfully executes the USER or the NICK command.
+        * @param user User to inspect and possibly pass to the OnUserRegister hook
+        * @return CMD_FAILURE if OnUserRegister was called and it returned MOD_RES_DENY, CMD_SUCCESS in every other case
+        * (i.e. if the hook wasn't fired because the user still needs to send NICK/USER or if it was fired and finished with
+        * a non-MOD_RES_DENY result).
+        */
+       static CmdResult CheckRegister(LocalUser* user);
+};
+
+/** Handle /USERHOST.
+ */
+class CommandUserhost : public Command
+{
+       UserModeReference hideopermode;
+
+ public:
+       /** Constructor for userhost.
+        */
+       CommandUserhost(Module* parent)
+               : Command(parent,"USERHOST", 1)
+               , hideopermode(parent, "hideoper")
+       {
+               allow_empty_last_param = false;
+               syntax = "<nick> [<nick>]+";
+       }
+       /** 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(User* user, const Params& parameters) CXX11_OVERRIDE;
+};
+
+/** User mode +s
+ */
+class ModeUserServerNoticeMask : public ModeHandler
+{
+       /** Process a snomask modifier string, e.g. +abc-de
+        * @param user The target user
+        * @param input A sequence of notice mask characters
+        * @return The cleaned mode sequence which can be output,
+        * e.g. in the above example if masks c and e are not
+        * valid, this function will return +ab-d
+        */
+       std::string ProcessNoticeMasks(User* user, const std::string& input);
+
+ public:
+       ModeUserServerNoticeMask(Module* Creator);
+       ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding) CXX11_OVERRIDE;
+
+       /** Create a displayable mode string of the snomasks set on a given user
+        * @param user The user whose notice masks to format
+        * @return The notice mask character sequence
+        */
+       std::string GetUserParameter(const User* user) const CXX11_OVERRIDE;
+};
+
+/** User mode +o
+ */
+class ModeUserOperator : public ModeHandler
+{
+ public:
+       ModeUserOperator(Module* Creator);
+       ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding) CXX11_OVERRIDE;
 };