diff options
-rw-r--r-- | src/channels.cpp | 21 | ||||
-rw-r--r-- | src/users.cpp | 2 |
2 files changed, 22 insertions, 1 deletions
diff --git a/src/channels.cpp b/src/channels.cpp index 9335fe251..8ca993f2b 100644 --- a/src/channels.cpp +++ b/src/channels.cpp @@ -440,6 +440,27 @@ chanrec* add_channel(userrec *user, const char* cn, const char* key, bool overri log(DEBUG,"add_channel: user channel max exceeded: %s %s",user->nick,cname); WriteServ(user->fd,"405 %s %s :You are on too many channels",user->nick, cname); + + if (created == 2) + { + log(DEBUG,"BLAMMO, Whacking channel."); + /* Things went seriously pear shaped, so take this away. bwahaha. */ + chan_hash::iterator n = chanlist.find(cname); + if (n != chanlist.end()) + { + Ptr->DelUser((char*)user); + delete Ptr; + chanlist.erase(n); + for (unsigned int index =0; index < user->chans.size(); index++) + { + if (user->chans[index].channel == Ptr) + { + user->chans[index].channel == NULL; + user->chans[index].uc_modes = 0; + } + } + } + } return NULL; } diff --git a/src/users.cpp b/src/users.cpp index c89286273..a4be86c9e 100644 --- a/src/users.cpp +++ b/src/users.cpp @@ -397,6 +397,7 @@ void kill_link(userrec *user,const char* r) log(DEBUG,"closing fd %lu",(unsigned long)user->fd); if (user->registered == 7) { + purge_empty_chans(user); FOREACH_MOD(I_OnUserQuit,OnUserQuit(user,reason)); WriteCommonExcept(user,"QUIT :%s",reason); } @@ -425,7 +426,6 @@ void kill_link(userrec *user,const char* r) // this must come before the WriteOpers so that it doesnt try to fill their buffer with anything // if they were an oper with +s. if (user->registered == 7) { - purge_empty_chans(user); // fix by brain: only show local quits because we only show local connects (it just makes SENSE) if (user->fd > -1) WriteOpers("*** Client exiting: %s!%s@%s [%s]",user->nick,user->ident,user->host,reason); |