+ /** Remove all instances of the mode from a channel.
+ * See mode.h
+ * @param channel The channel to remove all instances of the mode from
+ */
+ virtual void RemoveMode(Channel* channel, irc::modestacker* stack)
+ {
+ modelist* el;
+ channel->GetExt(infokey, el);
+ if (el)
+ {
+ irc::modestacker modestack(false);
+ std::deque<std::string> stackresult;
+ std::vector<std::string> mode_junk;
+ mode_junk.push_back(channel->name);
+
+ for (modelist::iterator it = el->begin(); it != el->end(); it++)
+ {
+ if (stack)
+ stack->Push(this->GetModeChar(), assign(it->mask));
+ else
+ modestack.Push(this->GetModeChar(), assign(it->mask));
+ }
+
+ if (stack)
+ return;
+
+ while (modestack.GetStackedLine(stackresult))
+ {
+ for (size_t j = 0; j < stackresult.size(); j++)
+ {
+ mode_junk.push_back(stackresult[j]);
+ }
+
+ ServerInstance->SendMode(mode_junk, ServerInstance->FakeClient);
+ }
+ }
+ }
+
+ /** See mode.h
+ */
+ virtual void RemoveMode(User*, irc::modestacker* stack)
+ {
+ /* Listmodes dont get set on users */
+ }
+
+ /** Perform a rehash of this mode's configuration data
+ */