]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/channels.cpp
Provide a facility for modules to flag a config file completed
[user/henk/code/inspircd.git] / src / channels.cpp
index 8f0d2d744bf0f5ceba8872aa4b59baafb4c66359..14f0f55f101246008e29c8aed33bb9bbc7b32779 100644 (file)
@@ -11,6 +11,8 @@
  * ---------------------------------------------------
  */
 
+/* $Core: libIRCDchannels */
+
 #include "inspircd.h"
 #include <stdarg.h>
 #include "wildcard.h"
@@ -196,7 +198,7 @@ void Channel::SetDefaultModes()
  * add a channel to a user, creating the record for it if needed and linking
  * it to the user record 
  */
-Channel* Channel::JoinUser(InspIRCd* Instance, User *user, const char* cn, bool override, const char* key, time_t TS)
+Channel* Channel::JoinUser(InspIRCd* Instance, User *user, const char* cn, bool override, const char* key, bool bursting, time_t TS)
 {
        if (!user || !cn)
                return NULL;
@@ -357,10 +359,10 @@ Channel* Channel::JoinUser(InspIRCd* Instance, User *user, const char* cn, bool
                }
        }
 
-       return Channel::ForceChan(Instance, Ptr, user, privs);
+       return Channel::ForceChan(Instance, Ptr, user, privs, bursting);
 }
 
-Channel* Channel::ForceChan(InspIRCd* Instance, Channel* Ptr, User* user, const std::string &privs)
+Channel* Channel::ForceChan(InspIRCd* Instance, Channel* Ptr, User* user, const std::string &privs, bool bursting)
 {
        std::string nick = user->nick;
        bool silent = false;
@@ -403,7 +405,7 @@ Channel* Channel::ForceChan(InspIRCd* Instance, Channel* Ptr, User* user, const
                }
        }
 
-       FOREACH_MOD_I(Instance,I_OnUserJoin,OnUserJoin(user, Ptr, silent));
+       FOREACH_MOD_I(Instance,I_OnUserJoin,OnUserJoin(user, Ptr, bursting, silent));
 
        if (!silent)
                Ptr->WriteChannel(user,"JOIN :%s",Ptr->name);
@@ -833,6 +835,14 @@ void Channel::UserList(User *user, CUList *ulist)
        FOREACH_RESULT(I_OnUserList,OnUserList(user, this, ulist));
        if (MOD_RESULT == 1)
                return;
+       if (MOD_RESULT != -1)
+       {
+               if ((this->IsModeSet('s')) && (!this->HasUser(user)))
+               {
+                       user->WriteServ("401 %s %s :No such nick/channel",user->nick, this->name);
+                       return;
+               }
+       }
 
        dlen = curlen = snprintf(list,MAXBUF,"353 %s %c %s :", user->nick, this->IsModeSet('s') ? '@' : this->IsModeSet('p') ? '*' : '=',  this->name);