chanrec* targetchannel = ServerInstance->FindChan(parameters[0]);
userrec* targetuser = ServerInstance->FindNick(parameters[0]);
- ServerInstance->Log(DEBUG,"ModeParser::Process start");
+ ServerInstance->Log(DEBUG,"ModeParser::Process start: pcnt=%d",pcnt);
+ for (int j = 0; j < pcnt; j++)
+ ServerInstance->Log(DEBUG," parameters[%d] = '%s'", j, parameters[j]);
LastParse = "";
/* This mode expects a parameter, do we have any parameters left in our list to use? */
if (parameter_counter < pcnt)
{
+ ServerInstance->Log(DEBUG,"parameter_counter = %d, pcnt = %d", parameter_counter, pcnt);
parameter = parameters[parameter_counter++];
/* Yerk, invalid! */
else
{
user->WriteTo(targetuser,"MODE %s %s%s",targetuser->nick,output_sequence.c_str(), parameter_list.str().c_str());
- FOREACH_MOD(I_OnMode,OnMode(user, targetuser, TYPE_USER, output_sequence));
+ FOREACH_MOD(I_OnMode,OnMode(user, targetuser, TYPE_USER, output_sequence + parameter_list.str()));
this->LastParse = targetuser->nick;
}
}
std::string types;
std::string pars;
+ if (!channel || !user)
+ return "";
+
for (unsigned char mode = 'A'; mode <= 'z'; mode++)
{
unsigned char pos = (mode-65) | MASK_CHANNEL;
{
ModePair ret;
ret = mh->ModeSet(NULL, user, channel, user->nick);
- ServerInstance->Log(DEBUG,"first='%d' second='%s'",ret.first,ret.second.c_str());
if ((ret.first) && (ret.second == user->nick))
{
pars.append(" ");
if (!mw)
return false;
- if ((mw->GetModeType() < 'A') || (mw->GetModeType() > 'z'))
+ if ((mw->GetModeChar() < 'A') || (mw->GetModeChar() > 'z'))
return false;
mw->GetModeType() == MODETYPE_USER ? mask = MASK_USER : mask = MASK_CHANNEL;
ModeWatchIter a = find(modewatchers[pos].begin(),modewatchers[pos].end(),mw);
if (a == modewatchers[pos].end())
+ {
+ ServerInstance->Log(DEBUG, "ModeParser::DelModeWatcher: Couldn't find watcher for mode %c in list", mw->GetModeChar());
return false;
+ }
modewatchers[pos].erase(a);
ServerInstance->Log(DEBUG,"ModeParser::DelModeWatcher: stopped watching mode %c",mw->GetModeChar());
if (user->IsModeSet(this->GetModeChar()))
{
- userrec* n = new userrec(ServerInstance);
-
sprintf(moderemove,"-%c",this->GetModeChar());
- n->SetFd(FD_MAGIC_NUMBER);
-
- ServerInstance->SendMode(parameters, 2, n);
-
- delete n;
+ ServerInstance->Parser->CallHandler("MODE", parameters, 2, user);
}
}
this->AddMode(new ModeUserOperator(Instance), 'o');
this->AddMode(new ModeUserServerNoticeMask(Instance), 'n');
}
-