summaryrefslogtreecommitdiff
path: root/src/channels.cpp
diff options
context:
space:
mode:
authorw00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7>2008-01-06 14:43:42 +0000
committerw00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7>2008-01-06 14:43:42 +0000
commite7f33ba1896482367d01379e84d5496631229741 (patch)
treea291b202a7ca4438b93857c1d502e59342803d12 /src/channels.cpp
parent860a3579257124d1d9cbc3081a2096726103e5d0 (diff)
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
Diffstat (limited to 'src/channels.cpp')
-rw-r--r--src/channels.cpp18
1 files changed, 15 insertions, 3 deletions
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;