- List[I_OnUserPreNick] = List[I_OnSyncOtherMetaData] = List[I_OnDecodeMetaData] = List[I_OnStats] = 1;
- }
-
- virtual int OnStats(char symbol, userrec* user, string_list &results)
- {
- ExpireBans();
-
- if(symbol == 'S')
- {
- for(SVSHoldlist::iterator iter = SVSHolds.begin(); iter != SVSHolds.end(); iter++)
- {
- unsigned long remaining = ((*iter)->set_on + (*iter)->length) - ServerInstance->Time();
- results.push_back(std::string(ServerInstance->Config->ServerName)+" 210 "+user->nick+" "+(*iter)->nickname.c_str()+" "+(*iter)->set_by+" "+ConvToStr((*iter)->set_on)+" "+ConvToStr((*iter)->length)+" "+ConvToStr(remaining)+" :"+(*iter)->reason);
- }
- }
-
- return 0;
- }
-
- virtual int OnUserPreNick(userrec *user, const std::string &newnick)
- {
- ExpireBans();
-
- /* check SVSHolds in here, and apply as necessary. */
- SVSHoldMap::iterator n = HoldMap.find(assign(newnick));
- if (n != HoldMap.end())
- {
- user->WriteServ( "432 %s %s :Reserved nickname: %s", user->nick, newnick.c_str(), n->second->reason.c_str());
- return 1;
- }
- return 0;
- }
-
- virtual void OnSyncOtherMetaData(Module* proto, void* opaque)
- {
- for(SVSHoldMap::iterator iter = HoldMap.begin(); iter != HoldMap.end(); iter++)
- {
- proto->ProtoSendMetaData(opaque, TYPE_OTHER, NULL, "SVSHold", EncodeSVSHold(iter->second));
- }
- }
-
- virtual void OnDecodeMetaData(int target_type, void* target, const std::string &extname, const std::string &extdata)
- {
- if((target_type == TYPE_OTHER) && (extname == "SVSHold"))
- {
- SVSHold* S = DecodeSVSHold(extdata); /* NOTE: Allocates a new SVSHold* */
- if (HoldMap.find(assign(S->nickname)) == HoldMap.end())
- {
- SVSHolds.push_back(S);
- HoldMap[assign(S->nickname)] = S;
- std::sort(SVSHolds.begin(), SVSHolds.end(), SVSHoldComp);
- }
- else
- {
- delete S;
- }
- }