From e7f33ba1896482367d01379e84d5496631229741 Mon Sep 17 00:00:00 2001 From: w00t Date: Sun, 6 Jan 2008 14:43:42 +0000 Subject: Permanent channels, currently conflicts with blockcaps (+P) and is untested git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@8650 e03df62e-2008-0410-955e-edbf42e46eb7 --- src/channels.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'src/channels.cpp') diff --git a/src/channels.cpp b/src/channels.cpp index 115afea52..c28ca23de 100644 --- a/src/channels.cpp +++ b/src/channels.cpp @@ -482,7 +482,11 @@ long Channel::PartUser(User *user, const char* reason) /* kill the record */ if (iter != ServerInstance->chanlist->end()) { - FOREACH_MOD(I_OnChannelDelete,OnChannelDelete(this)); + int MOD_RESULT = 0; + FOREACH_RESULT_I(ServerInstance,I_OnChannelPreDelete, OnChannelPreDelete(this)); + if (MOD_RESULT == 1) + return 1; // delete halted by module + FOREACH_MOD(I_OnChannelDelete, OnChannelDelete(this)); ServerInstance->chanlist->erase(iter); } return 0; @@ -528,7 +532,11 @@ long Channel::ServerKickUser(User* user, const char* reason, bool triggerevents) /* kill the record */ if (iter != ServerInstance->chanlist->end()) { - FOREACH_MOD(I_OnChannelDelete,OnChannelDelete(this)); + int MOD_RESULT = 0; + FOREACH_RESULT_I(ServerInstance,I_OnChannelPreDelete, OnChannelPreDelete(this)); + if (MOD_RESULT == 1) + return 1; // delete halted by module + FOREACH_MOD(I_OnChannelDelete, OnChannelDelete(this)); ServerInstance->chanlist->erase(iter); } return 0; @@ -606,7 +614,11 @@ long Channel::KickUser(User *src, User *user, const char* reason) /* kill the record */ if (iter != ServerInstance->chanlist->end()) { - FOREACH_MOD(I_OnChannelDelete,OnChannelDelete(this)); + int MOD_RESULT = 0; + FOREACH_RESULT_I(ServerInstance,I_OnChannelPreDelete, OnChannelPreDelete(this)); + if (MOD_RESULT == 1) + return 1; // delete halted by module + FOREACH_MOD(I_OnChannelDelete, OnChannelDelete(this)); ServerInstance->chanlist->erase(iter); } return 0; -- cgit v1.2.3