+unsigned int ModeChannelOp::GetPrefixRank()
+{
+ return OP_VALUE;
+}
+
+ModePair ModeChannelOp::ModeSet(userrec* source, userrec* dest, chanrec* channel, const std::string ¶meter)
+{
+ userrec* x = ServerInstance->FindNick(parameter);
+ if (x)
+ {
+ if (channel->GetStatusFlags(x) & UCMODE_OP)
+ {
+ return std::make_pair(true, x->nick);
+ }
+ else
+ {
+ return std::make_pair(false, parameter);
+ }
+ }
+ return std::make_pair(false, parameter);
+}
+
+
+void ModeChannelOp::RemoveMode(chanrec* channel)
+{
+ CUList* list = channel->GetOppedUsers();
+ CUList copy;
+ char moderemove[MAXBUF];
+ userrec* n = new userrec(ServerInstance);
+ n->SetFd(FD_MAGIC_NUMBER);
+
+ for (CUList::iterator i = list->begin(); i != list->end(); i++)
+ {
+ userrec* n = i->second;
+ copy.insert(std::make_pair(n,n));
+ }
+ for (CUList::iterator i = copy.begin(); i != copy.end(); i++)
+ {
+ sprintf(moderemove,"-%c",this->GetModeChar());
+ const char* parameters[] = { channel->name, moderemove, i->second->nick };
+ ServerInstance->SendMode(parameters, 3, n);
+ }
+ delete n;
+}
+
+void ModeChannelOp::RemoveMode(userrec* user)