* See mode.h
* @param channel The channel to remove all instances of the mode from
*/
- virtual void RemoveMode(Channel* channel)
+ virtual void RemoveMode(Channel* channel, irc::modestacker* stack)
{
modelist* el;
channel->GetExt(infokey, el);
for (modelist::iterator it = el->begin(); it != el->end(); it++)
{
- modestack.Push(this->GetModeChar(), assign(it->mask));
+ 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++)
/** See mode.h
*/
- virtual void RemoveMode(User*)
+ virtual void RemoveMode(User*, irc::modestacker* stack)
{
/* Listmodes dont get set on users */
}
/** Handle the list mode.
* See mode.h
*/
- virtual ModeAction OnModeChange(User* source, User*, Channel* channel, std::string ¶meter, bool adding)
+ virtual ModeAction OnModeChange(User* source, User*, Channel* channel, std::string ¶meter, bool adding, bool servermode)
{
// Try and grab the list
modelist* el;
// And now add the mask onto the list...
ListItem e;
e.mask = assign(parameter);
- e.nick = source->nick;
+ e.nick = servermode ? ServerInstance->Config->ServerName : source->nick;
e.time = stringtime();
el->push_back(e);
/* List is full, give subclass a chance to send a custom message */
if (!TellListTooLong(source, channel, parameter))
{
- source->WriteServ("478 %s %s %s :Channel ban/ignore list is full", source->nick, channel->name, parameter.c_str());
+ source->WriteNumeric(478, "%s %s %s :Channel ban/ignore list is full", source->nick, channel->name, parameter.c_str());
}
parameter = "";