]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/builtinmodes.h
umode_s Rewrite ProcessNoticeMasks() and remove a few related useless functions
[user/henk/code/inspircd.git] / include / builtinmodes.h
index ab1da8740a6890742729bb2fc9bbab52d3a38718..b1e5c3ccd10bd87005b96eefcfcba902cd699267 100644 (file)
 
 #include "mode.h"
 #include "channels.h"
+#include "listmode.h"
 
 /** Channel mode +b
  */
-class ModeChannelBan : public ModeHandler
+class ModeChannelBan : public ListModeBase
 {
- private:
-       BanItem b;
  public:
-       ModeChannelBan();
-       ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding);
-       std::string& AddBan(User *user,std::string& dest,Channel *chan,int status);
-       std::string& DelBan(User *user,std::string& dest,Channel *chan,int status);
-       void DisplayList(User* user, Channel* channel);
-       void DisplayEmptyList(User* user, Channel* channel);
-       void RemoveMode(User* user, irc::modestacker* stack = NULL);
-       void RemoveMode(Channel* channel, irc::modestacker* stack = NULL);
+       ModeChannelBan()
+               : ListModeBase(NULL, "ban", 'b', "End of channel ban list", 367, 368, true, "maxbans")
+       {
+       }
 };
 
 /** Channel mode +i
@@ -57,11 +52,8 @@ class ModeChannelKey : public ModeHandler
  public:
        ModeChannelKey();
        ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding);
-       void RemoveMode(Channel* channel, irc::modestacker* stack = NULL);
-       void RemoveMode(User* user, irc::modestacker* stack = NULL);
 };
 
-
 /** Channel mode +l
  */
 class ModeChannelLimit : public ParamChannelModeHandler
@@ -101,8 +93,6 @@ class ModeChannelOp : public ModeHandler
        ModeChannelOp();
        ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding);
        unsigned int GetPrefixRank();
-       void RemoveMode(Channel* channel, irc::modestacker* stack = NULL);
-       void RemoveMode(User* user, irc::modestacker* stack = NULL);
 };
 
 /** Channel mode +p
@@ -144,8 +134,6 @@ class ModeChannelVoice : public ModeHandler
        ModeChannelVoice();
        ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding);
        unsigned int GetPrefixRank();
-       void RemoveMode(User* user, irc::modestacker* stack = NULL);
-       void RemoveMode(Channel* channel, irc::modestacker* stack = NULL);
 };
 
 /** User mode +i
@@ -158,14 +146,28 @@ class ModeUserInvisible : public SimpleUserModeHandler
        }
 };
 
-/** User mode +n
+/** 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();
        ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding);
        void OnParameterMissing(User* user, User* dest, Channel* channel);
+
+       /** 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(User* user);
 };