+
+ // read our config options (main config file)
+ FirstInGetsFounder = Conf->ReadFlag("options","noservices",0);
+ }
+
+ void Implements(char* List)
+ {
+ List[I_On005Numeric] = List[I_OnUserKick] = List[I_OnUserPart] = List[I_OnRehash] = List[I_OnUserJoin] = List[I_OnAccessCheck] = List[I_OnExtendedMode] = List[I_OnSendList] = List[I_OnSyncChannel] = 1;
+ }
+
+ virtual void On005Numeric(std::string &output)
+ {
+ std::stringstream line(output);
+ std::string temp1, temp2;
+ while (!line.eof())
+ {
+ line >> temp1;
+ if (temp1.substr(0,10) == "CHANMODES=")
+ {
+ // append the chanmode to the end
+ temp1 = temp1.substr(10,temp1.length());
+ temp1 = "CHANMODES=qa" + temp1;
+ }
+ temp2 = temp2 + temp1 + " ";
+ }
+ if (temp2.length())
+ output = temp2.substr(0,temp2.length()-1);
+ }
+
+ virtual void OnUserKick(userrec* source, userrec* user, chanrec* chan, std::string reason)
+ {
+ // FIX: when someone gets kicked from a channel we must remove their Extensibles!
+ user->Shrink("cm_founder_"+std::string(chan->name));
+ user->Shrink("cm_protect_"+std::string(chan->name));
+ }
+
+ virtual void OnUserPart(userrec* user, chanrec* channel, std::string partreason)
+ {
+ // FIX: when someone parts a channel we must remove their Extensibles!
+ user->Shrink("cm_founder_"+std::string(channel->name));
+ user->Shrink("cm_protect_"+std::string(channel->name));
+ }
+
+ virtual void OnRehash(std::string parameter)
+ {
+ // on a rehash we delete our classes for good measure and create them again.
+ delete Conf;
+ Conf = new ConfigReader;
+ // re-read our config options on a rehash
+ FirstInGetsFounder = Conf->ReadFlag("options","noservices",0);