-extern InspIRCd* ServerInstance;
-extern ServerConfig* Config;
-extern std::vector<Module*> modules;
-extern std::vector<ircd_module*> factory;
-extern int MODCOUNT;
-extern time_t TIME;
+ModeChannelVoice::ModeChannelVoice(InspIRCd* Instance) : ModeHandler(Instance, 'v', 1, 1, true, MODETYPE_CHANNEL, false, '+')
+{
+}
+
+unsigned int ModeChannelVoice::GetPrefixRank()
+{
+ return VOICE_VALUE;
+}
+
+ModePair ModeChannelVoice::ModeSet(User*, User*, Channel* channel, const std::string ¶meter)
+{
+ User* x = ServerInstance->FindNick(parameter);
+ if (x)
+ {
+ if (channel->GetStatusFlags(x) & UCMODE_VOICE)
+ {
+ return std::make_pair(true, x->nick);
+ }
+ else
+ {
+ return std::make_pair(false, parameter);
+ }
+ }
+ return std::make_pair(false, parameter);
+}
+
+void ModeChannelVoice::RemoveMode(Channel* channel, irc::modestacker* stack)
+{
+ CUList* clist = channel->GetVoicedUsers();
+ CUList copy;
+
+ for (CUList::iterator i = clist->begin(); i != clist->end(); i++)
+ {
+ User* n = i->first;
+ copy.insert(std::make_pair(n,n->nick));
+ }