+ unsigned int i = 1;
+ std::vector<std::string> modes;
+ modes.push_back(parameters[0]);
+ modes.push_back("");
+ while (i < parameters.size())
+ {
+ std::string prop = parameters[i++];
+ bool plus = prop[0] != '-';
+ if (prop[0] == '+' || prop[0] == '-')
+ prop.erase(prop.begin());
+
+ for(char letter = 'A'; letter <= 'z'; letter++)
+ {
+ ModeHandler* mh = ServerInstance->Modes->FindMode(letter, MODETYPE_CHANNEL);
+ if (mh && mh->name == prop)
+ {
+ modes[1].append((plus ? "+" : "-") + std::string(1, letter));
+ if (mh->GetNumParams(plus))
+ {
+ if (i != parameters.size())
+ modes.push_back(parameters[i++]);
+ }
+ }
+ }
+ }
+ ServerInstance->Modes->Process(modes, src);
+ return CMD_SUCCESS;