+ }
+ return std::make_pair(false, parameter);
+ }
+
+ /** Display the list for this mode
+ * @param user The user to send the list to
+ * @param channel The channel the user is requesting the list for
+ */
+ virtual void DisplayList(User* user, Channel* channel)
+ {
+ modelist* el = extItem.get(channel);
+ if (el)
+ {
+ for (modelist::reverse_iterator it = el->rbegin(); it != el->rend(); ++it)
+ {
+ user->WriteNumeric(listnumeric, "%s %s %s %s %s", user->nick.c_str(), channel->name.c_str(), it->mask.c_str(), (it->nick.length() ? it->nick.c_str() : ServerInstance->Config->ServerName.c_str()), it->time.c_str());
+ }
+ }
+ user->WriteNumeric(endoflistnumeric, "%s %s :%s", user->nick.c_str(), channel->name.c_str(), endofliststring.c_str());
+ }
+
+ virtual void DisplayEmptyList(User* user, Channel* channel)
+ {
+ user->WriteNumeric(endoflistnumeric, "%s %s :%s", user->nick.c_str(), channel->name.c_str(), endofliststring.c_str());
+ }
+
+ /** 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 = extItem.get(channel);
+ if (el)
+ {
+ irc::modestacker modestack(false);
+
+ for (modelist::iterator it = el->begin(); it != el->end(); it++)
+ {
+ if (stack)
+ stack->Push(this->GetModeChar(), it->mask);
+ else
+ modestack.Push(this->GetModeChar(), it->mask);
+ }
+
+ if (stack)
+ return;
+
+ std::vector<std::string> stackresult;
+ stackresult.push_back(channel->name);
+ while (modestack.GetStackedLine(stackresult))