- CUList* cl = channel->GetUsers();
- std::string item = "cm_network_" + std::string(channel->name);
- std::vector<std::string> mode_junk;
- mode_junk.push_back(channel->name);
- irc::modestacker modestack(ServerInstance, false);
- std::deque<std::string> stackresult;
-
- for (CUList::iterator i = cl->begin(); i != cl->end(); i++)
- {
- if (i->first->GetExt(item))
- {
- if (stack)
- stack->Push(this->GetModeChar(), i->first->nick);
- else
- modestack.Push(this->GetModeChar(), i->first->nick);
- }
- }
-
- if (stack)
- return;
-
- while (modestack.GetStackedLine(stackresult))
- {
- mode_junk.insert(mode_junk.end(), stackresult.begin(), stackresult.end());
- ServerInstance->SendMode(mode_junk, ServerInstance->FakeClient);
- mode_junk.erase(mode_junk.begin() + 1, mode_junk.end());
- }
- }
-
- User* FindAndVerify(std::string ¶meter, Channel* channel)
- {
- User* theuser = ServerInstance->FindNick(parameter);
- if ((!theuser) || (!channel->HasUser(theuser)))
- {
- parameter.clear();
- return NULL;
- }
- return theuser;
- }
-
- ModeAction HandleChange(User* source, User* theuser, bool adding, Channel* channel, std::string ¶meter)
- {
- std::string item = "cm_network_" + std::string(channel->name);
-
- if (adding)
- {
- if (!theuser->GetExt(item))
- {
- theuser->Extend(item);
- parameter = theuser->nick;
- return MODEACTION_ALLOW;
- }
- }
- else
- {
- if (theuser->GetExt(item))
- {
- theuser->Shrink(item);
- parameter = theuser->nick;
- return MODEACTION_ALLOW;
- }
- }
- return MODEACTION_DENY;