]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/mode.cpp
Clean up the FileReader class and all of the modules that use it.
[user/henk/code/inspircd.git] / src / mode.cpp
index cd5c1d1580f08e43a4cae3e637e95377c47f90f2..b4bb72c42a9480de52378bfd9e6ceb2e625e0a5d 100644 (file)
@@ -184,22 +184,6 @@ void ModeWatcher::AfterMode(User*, User*, Channel*, const std::string&, bool, Mo
 {
 }
 
-User* ModeParser::SanityChecks(User *user, const char *dest, Channel *chan, int)
-{
-       User *d;
-       if ((!user) || (!dest) || (!chan) || (!*dest))
-       {
-               return NULL;
-       }
-       d = ServerInstance->FindNick(dest);
-       if (!d)
-       {
-               user->WriteNumeric(ERR_NOSUCHNICK, "%s %s :No such nick/channel",user->nick.c_str(), dest);
-               return NULL;
-       }
-       return d;
-}
-
 void ModeParser::DisplayCurrentModes(User *user, User* targetuser, Channel* targetchannel, const char* text)
 {
        if (targetchannel)
@@ -629,6 +613,7 @@ bool ModeParser::AddMode(ModeHandler* mh)
                return false;
 
        modehandlers[pos] = mh;
+       RecreateModeListFor004Numeric();
        return true;
 }
 
@@ -671,6 +656,7 @@ bool ModeParser::DelMode(ModeHandler* mh)
        }
 
        modehandlers[pos] = NULL;
+       RecreateModeListFor004Numeric();
 
        return true;
 }
@@ -689,52 +675,25 @@ ModeHandler* ModeParser::FindMode(unsigned const char modeletter, ModeType mt)
        return modehandlers[pos];
 }
 
-std::string ModeParser::UserModeList()
+std::string ModeParser::CreateModeList(ModeType mt, bool needparam)
 {
-       char modestr[256];
-       int pointer = 0;
+       std::string modestr;
+       unsigned char mask = ((mt == MODETYPE_CHANNEL) ? MASK_CHANNEL : MASK_USER);
 
        for (unsigned char mode = 'A'; mode <= 'z'; mode++)
        {
-               unsigned char pos = (mode-65) | MASK_USER;
+               unsigned char pos = (mode-65) | mask;
 
-               if (modehandlers[pos])
-                       modestr[pointer++] = mode;
+               if ((modehandlers[pos]) && ((!needparam) || (modehandlers[pos]->GetNumParams(true))))
+                       modestr.push_back(mode);
        }
-       modestr[pointer++] = 0;
-       return modestr;
-}
-
-std::string ModeParser::ChannelModeList()
-{
-       char modestr[256];
-       int pointer = 0;
 
-       for (unsigned char mode = 'A'; mode <= 'z'; mode++)
-       {
-               unsigned char pos = (mode-65) | MASK_CHANNEL;
-
-               if (modehandlers[pos])
-                       modestr[pointer++] = mode;
-       }
-       modestr[pointer++] = 0;
        return modestr;
 }
 
-std::string ModeParser::ParaModeList()
+void ModeParser::RecreateModeListFor004Numeric()
 {
-       char modestr[256];
-       int pointer = 0;
-
-       for (unsigned char mode = 'A'; mode <= 'z'; mode++)
-       {
-               unsigned char pos = (mode-65) | MASK_CHANNEL;
-
-               if ((modehandlers[pos]) && (modehandlers[pos]->GetNumParams(true)))
-                       modestr[pointer++] = mode;
-       }
-       modestr[pointer++] = 0;
-       return modestr;
+       Cached004ModeList = CreateModeList(MODETYPE_USER) + " " + CreateModeList(MODETYPE_CHANNEL) + " " + CreateModeList(MODETYPE_CHANNEL, true);
 }
 
 ModeHandler* ModeParser::FindPrefix(unsigned const char pfxletter)