summaryrefslogtreecommitdiff
path: root/modules/pseudoclients/chanserv.cpp
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2013-08-11 17:14:39 -0400
committerAdam <Adam@anope.org>2013-08-11 17:14:39 -0400
commitf1956b039d3c7be38ad03fbb79be6a4eed440cf0 (patch)
tree483b29cf3c67af4742945213eb88a173ae5b6d6a /modules/pseudoclients/chanserv.cpp
parent53d5b7c29ea2f0164b562549cef579fe2b276abf (diff)
Remove channels from accesss lists when they expire/drop
Diffstat (limited to 'modules/pseudoclients/chanserv.cpp')
-rw-r--r--modules/pseudoclients/chanserv.cpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/modules/pseudoclients/chanserv.cpp b/modules/pseudoclients/chanserv.cpp
index 07d997aa4..e1d98e64c 100644
--- a/modules/pseudoclients/chanserv.cpp
+++ b/modules/pseudoclients/chanserv.cpp
@@ -199,6 +199,32 @@ class ChanServCore : public Module, public ChanServService
}
}
+ void OnDelChan(ChannelInfo *ci) anope_override
+ {
+ /* remove access entries that are this channel */
+
+ std::deque<Anope::string> chans;
+ ci->GetChannelReferences(chans);
+
+ for (unsigned i = 0; i < chans.size(); ++i)
+ {
+ ChannelInfo *c = ChannelInfo::Find(chans[i]);
+ if (!c)
+ continue;
+
+ for (unsigned j = 0; j < c->GetAccessCount(); ++j)
+ {
+ ChanAccess *a = c->GetAccess(j);
+
+ if (a->mask.equals_ci(ci->name))
+ {
+ delete a;
+ break;
+ }
+ }
+ }
+ }
+
EventReturn OnPreHelp(CommandSource &source, const std::vector<Anope::string> &params) anope_override
{
if (!params.empty() || source.c || source.service != *ChanServ)