]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/channels.cpp
Backport improved NAMES code into m_spy
[user/henk/code/inspircd.git] / src / channels.cpp
index bfd676429ead768a5229a678a9efbf266e5542a5..de698883fdf63a952574b435cec383c1fafa29b5 100644 (file)
@@ -301,8 +301,6 @@ chanrec* chanrec::JoinUser(InspIRCd* Instance, userrec *user, const char* cn, bo
                                }
                                if (Ptr->bans.size())
                                {
-                                       char mask[MAXBUF];
-                                       snprintf(mask, MAXBUF, "%s!%s@%s",user->nick, user->ident, user->GetIPString());
                                        if (Ptr->IsBanned(user))
                                        {
                                                user->WriteServ("474 %s %s :Cannot join channel (You're banned)",user->nick, Ptr->name);
@@ -387,33 +385,30 @@ chanrec* chanrec::JoinUser(InspIRCd* Instance, userrec *user, const char* cn, bo
 
 chanrec* chanrec::ForceChan(InspIRCd* Instance, chanrec* Ptr,ucrec *a,userrec* user, const std::string &privs)
 {
+       userrec* dummyuser = new userrec(Instance);
+       std::string nick = user->nick;
+
        a->uc_modes = 0;
+       dummyuser->SetFd(FD_MAGIC_NUMBER);
+
+       a->channel = Ptr;
+       Ptr->AddUser(user);
+       user->ModChannelCount(1);
 
        for (std::string::const_iterator x = privs.begin(); x != privs.end(); x++)
        {
                const char status = *x;
-               switch (status)
-               {
-                       case '@':
-                               a->uc_modes |= UCMODE_OP;
-                       break;
-                       case '%':
-                               a->uc_modes |= UCMODE_HOP;
-                       break;
-                       case '+':
-                               a->uc_modes |= UCMODE_VOICE;
-                       break;
-               }
                ModeHandler* mh = Instance->Modes->FindPrefix(status);
                if (mh)
                {
                        Ptr->SetPrefix(user, status, mh->GetPrefixRank(), true);
+                       /* Make sure that the mode handler knows this mode was now set */
+                       mh->OnModeChange(dummyuser, dummyuser, Ptr, nick, true);
                }
        }
 
-       a->channel = Ptr;
-       Ptr->AddUser(user);
-       user->ModChannelCount(1);
+       delete dummyuser;
+
        Ptr->WriteChannel(user,"JOIN :%s",Ptr->name);
 
        /* Theyre not the first ones in here, make sure everyone else sees the modes we gave the user */
@@ -432,6 +427,7 @@ chanrec* chanrec::ForceChan(InspIRCd* Instance, chanrec* Ptr,ucrec *a,userrec* u
                Ptr->UserList(user);
        }
        FOREACH_MOD_I(Instance,I_OnUserJoin,OnUserJoin(user,Ptr));
+       FOREACH_MOD_I(Instance,I_OnPostJoin,OnPostJoin(user,Ptr));
        return Ptr;
 }