- // Force send to all +h users
- sendtohelpop(user, pcnt, parameters);
- } else if (parameters[0][0] == '?') {
- // Force to the helpop system with no forward if not found.
- if (do_helpop(parameters, pcnt, user) == false) {
- // Not handled by the Database, Tell the user, and forward.
- for (int i = 1; output != ""; i++)
- {
- snprintf(a,MAXBUF,"line%d",i);
- output = helpop->ReadValue("nohelp", std::string(a), 0);
- if(output != "") {
- Srv->SendTo(NULL,user,"290 "+std::string(user->nick)+" :"+output);
- }
- }
- }
- } else {
- // Check with the helpop database, if not found send to +h
- if (do_helpop(parameters, pcnt, user) == false) {
- // Not handled by the Database, Tell the user, and forward.
- for (int i = 1; output != ""; i++)
- {
- snprintf(a,MAXBUF,"line%d",i);
- output = helpop->ReadValue("nohelpo", std::string(a), 0);
- if (output != "") {
- Srv->SendTo(NULL,user,"290 "+std::string(user->nick)+" :"+output);
- }
- }
- // Forward.
- sendtohelpop(user, pcnt, parameters);
+ irc::string parameter("start");
+ if (parameters.size() > 0)
+ parameter = parameters[0].c_str();
+
+ if (parameter == "index")
+ {
+ /* iterate over all helpop items */
+ user->WriteServ("290 %s :HELPOP topic index", user->nick.c_str());
+ for (std::map<irc::string, std::string>::iterator iter = helpop_map.begin(); iter != helpop_map.end(); iter++)
+ {
+ user->WriteServ("292 %s : %s", user->nick.c_str(), iter->first.c_str());
+ }
+ user->WriteServ("292 %s :*** End of HELPOP topic index", user->nick.c_str());
+ }
+ else
+ {
+ user->WriteServ("290 %s :*** HELPOP for %s", user->nick.c_str(), parameter.c_str());
+ user->WriteServ("292 %s : -", user->nick.c_str());
+
+ std::map<irc::string, std::string>::iterator iter = helpop_map.find(parameter);
+
+ if (iter == helpop_map.end())
+ {
+ iter = helpop_map.find("nohelp");
+ }
+
+ std::string value = iter->second;
+ irc::sepstream stream(value, '\n');
+ std::string token = "*";
+
+ while (stream.GetToken(token))
+ {
+ // Writing a blank line will not work with some clients
+ if (token.empty())
+ user->WriteServ("292 %s : ", user->nick.c_str());
+ else
+ user->WriteServ("292 %s :%s", user->nick.c_str(), token.c_str());
+ }
+
+ user->WriteServ("292 %s : -", user->nick.c_str());
+ user->WriteServ("292 %s :*** End of HELPOP", user->nick.c_str());