diff options
author | danieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7> | 2009-10-20 04:40:50 +0000 |
---|---|---|
committer | danieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7> | 2009-10-20 04:40:50 +0000 |
commit | 7bb73d2e63c1ec31a2af58b57c05bbce39c4dd59 (patch) | |
tree | 171fa519a338f2f00c0b667b6ce2c3b7c402dcd7 | |
parent | 9b8c61e7e73b6bac60adeb3aa4f4d8127b813558 (diff) |
Fix channel deletion on user quit and automatic removal of mode "z"
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11934 e03df62e-2008-0410-955e-edbf42e46eb7
-rw-r--r-- | src/channels.cpp | 46 | ||||
-rw-r--r-- | src/modules.cpp | 2 |
2 files changed, 17 insertions, 31 deletions
diff --git a/src/channels.cpp b/src/channels.cpp index 0e45de33f..d7f8f372e 100644 --- a/src/channels.cpp +++ b/src/channels.cpp @@ -135,6 +135,22 @@ void Channel::DelUser(User* user) delete a->second; userlist.erase(a); } + + if (userlist.empty()) + { + ModResult res; + FIRST_MOD_RESULT(OnChannelPreDelete, res, (this)); + if (res == MOD_RES_DENY) + return; + chan_hash::iterator iter = ServerInstance->chanlist->find(this->name); + /* kill the record */ + if (iter != ServerInstance->chanlist->end()) + { + FOREACH_MOD(I_OnChannelDelete, OnChannelDelete(this)); + ServerInstance->chanlist->erase(iter); + } + ServerInstance->GlobalCulls.AddItem(this); + } } bool Channel::HasUser(User* user) @@ -466,21 +482,6 @@ void Channel::PartUser(User *user, std::string &reason) } this->DelUser(user); - if (userlist.empty()) - { - ModResult res; - FIRST_MOD_RESULT(OnChannelPreDelete, res, (this)); - if (res == MOD_RES_DENY) - return; - chan_hash::iterator iter = ServerInstance->chanlist->find(this->name); - /* kill the record */ - if (iter != ServerInstance->chanlist->end()) - { - FOREACH_MOD(I_OnChannelDelete, OnChannelDelete(this)); - ServerInstance->chanlist->erase(iter); - } - ServerInstance->GlobalCulls.AddItem(this); - } } void Channel::ServerKickUser(User* user, const char* reason, const std::string& servername) @@ -545,21 +546,6 @@ void Channel::KickUser(User *src, User *user, const char* reason) } this->DelUser(user); - if (userlist.empty()) - { - ModResult res; - FIRST_MOD_RESULT(OnChannelPreDelete, res, (this)); - if (res == MOD_RES_DENY) - return; - chan_hash::iterator iter = ServerInstance->chanlist->find(this->name); - /* kill the record */ - if (iter != ServerInstance->chanlist->end()) - { - FOREACH_MOD(I_OnChannelDelete, OnChannelDelete(this)); - ServerInstance->chanlist->erase(iter); - } - ServerInstance->GlobalCulls.AddItem(this); - } } void Channel::WriteChannel(User* user, const char* text, ...) diff --git a/src/modules.cpp b/src/modules.cpp index eb76897a2..a0eb9e19e 100644 --- a/src/modules.cpp +++ b/src/modules.cpp @@ -480,7 +480,7 @@ void ModuleManager::DoSafeUnload(Module* mod) mod->OnCleanup(TYPE_USER,u->second); u->second->doUnhookExtensions(items); } - for(char m='A'; m < 'z'; m++) + for(char m='A'; m <= 'z'; m++) { ModeHandler* mh; mh = ServerInstance->Modes->FindMode(m, MODETYPE_USER); |