*/
virtual void DisplayList(User* user, Channel* channel);
+ /** In the event that the mode should be given a parameter, and no parameter was provided, this method is called.
+ * This allows you to give special information to the user, or handle this any way you like.
+ * @param user The user issuing the mode change
+ * @param dest For user mode changes, the target of the mode. For channel mode changes, NULL.
+ * @param channel For channel mode changes, the target of the mode. For user mode changes, NULL.
+ */
+ virtual void OnParameterMissing(User* user, User* dest, Channel* channel);
+
/**
* If your mode is a listmode, this method will be called to display an empty list (just the end of list numeric)
* @param user The user issuing the command
void SetNeededPrefix(char needsprefix);
};
+/** A prebuilt mode handler which handles a simple user mode, e.g. no parameters, usable by any user, with no extra
+ * behaviour to the mode beyond the basic setting and unsetting of the mode, not allowing the mode to be set if it
+ * is already set and not allowing it to be unset if it is already unset.
+ * An example of a simple user mode is user mode +w.
+ */
+class CoreExport SimpleUserModeHandler : public ModeHandler
+{
+ public:
+ SimpleUserModeHandler(InspIRCd* Instance, char modeletter);
+ virtual ~SimpleUserModeHandler();
+ virtual ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string ¶meter, bool adding, bool servermode = false);
+};
+
+/** A prebuilt mode handler which handles a simple channel mode, e.g. no parameters, usable by any user, with no extra
+ * behaviour to the mode beyond the basic setting and unsetting of the mode, not allowing the mode to be set if it
+ * is already set and not allowing it to be unset if it is already unset.
+ * An example of a simple channel mode is channel mode +s.
+ */
+class CoreExport SimpleChannelModeHandler : public ModeHandler
+{
+ public:
+ SimpleChannelModeHandler(InspIRCd* Instance, char modeletter);
+ virtual ~SimpleChannelModeHandler();
+ virtual ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string ¶meter, bool adding, bool servermode = false);
+};
+
/**
* The ModeWatcher class can be used to alter the behaviour of a mode implemented
* by the core or by another module. To use ModeWatcher, derive a class from it,
*/
std::string LastParse;
+ unsigned int sent[256];
+
+ unsigned int seq;
+
public:
/** The constructor initializes all the RFC basic modes by using ModeParserAddMode().
/** Process a set of mode changes from a server or user.
* @param parameters The parameters of the mode change, in the format
* they would be from a MODE command.
- * @param pcnt The number of items in the parameters array
* @param user The user setting or removing the modes. When the modes are set
* by a server, an 'uninitialized' User is used, where *user::nick == NULL
* and *user->server == NULL.
* @param servermode True if a server is setting the mode.
*/
- void Process(const char* const* parameters, int pcnt, User *user, bool servermode);
+ void Process(const std::vector<std::string>& parameters, User *user, bool servermode);
/** Find the mode handler for a given mode and type.
* @param modeletter mode letter to search for