]> jfr.im git - irc/evilnet/x3.git/blobdiff - src/modcmd.c
Improved usability of the REGISTER command, in preperation to make it usable by users
[irc/evilnet/x3.git] / src / modcmd.c
index abd685fb6a1cf73073ada6301d16c159d65f0026..75fb319f1f6a6165292ee9ecb072d4b32f630a09 100644 (file)
@@ -57,6 +57,7 @@ static const struct message_entry msgtab[] = {
     { "MCMSG_COMMAND_ALIASES", "%s is an alias for: %s" },
     { "MCMSG_HELP_COMMAND_ALIAS", "$uAlias for:$u %s" },
     { "MCMSG_HELP_COMMAND_HEADER", "Command help for: $b%s$b" },
+    { "MCMSG_HELP_COMMAND_UNKNOWN", "No help available for that command." },
     { "MCMSG_HELP_TOPIC_HEADER",   "Help topic: $b%s$b" },
     { "MCMSG_HELP_DIVIDER", "=---------------------------------------=" },
     { "MCMSG_HELP_FOOTER",  "=------------- End of Help -------------=" },
@@ -788,7 +789,8 @@ svccmd_send_help(struct userNode *user, struct service *service, const char *top
     struct module *module;
     struct svccmd *cmd;
     char cmdname[MAXLEN];
-    unsigned int nn;
+    unsigned int nn, ii;
+    int helpsent = 0;
 
     /* If there is no topic show the index */
     if (!topic)
@@ -803,7 +805,7 @@ svccmd_send_help(struct userNode *user, struct service *service, const char *top
     {
         send_message(user, service->bot, "MCMSG_HELP_COMMAND_HEADER", cmdname);
         send_message(user, service->bot, "MCMSG_HELP_DIVIDER");
-        send_help(user, service->bot, cmd->command->parent->helpfile, cmd->name);
+        helpsent = send_help(user, service->bot, cmd->command->parent->helpfile, cmd->name);
 
         /* Show if its an alias, or a binding of another command */
         if (cmd->alias.used) 
@@ -811,27 +813,46 @@ svccmd_send_help(struct userNode *user, struct service *service, const char *top
             char alias_text[MAXLEN];
             unsplit_string((char**)cmd->alias.list, cmd->alias.used, alias_text);
             send_message(user, service->bot, "MCMSG_HELP_COMMAND_ALIAS", alias_text);
+            /* If send_help above didnt work, try again with the referenced command.. */
+            if(!helpsent)
+                helpsent = send_help(user, service->bot, cmd->command->parent->helpfile, alias_text);
         }
         else if(cmd->command->name && strcasecmp(cmd->command->name, cmd->name))
         {
             send_message(user, service->bot, "MCMSG_HELP_COMMAND_ALIAS", cmd->command->name);
+            /* If send_help above didnt work, try again with the referenced command.. */
+            if(!helpsent)
+                helpsent = send_help(user, service->bot, cmd->command->parent->helpfile, cmd->command->name);
         } 
+        /* If send_help still couldnt find it, tell them sorry */
+        if(!helpsent)
+            send_message(user, service->bot, "MCMSG_HELP_COMMAND_UNKNOWN");
         send_message(user, service->bot, "MCMSG_HELP_FOOTER");
         return true;
     }
     else /* look for topic in the help files loaded to this nick/service */
     {
-        /* Check for non command help in first primary help file, then 
-         * check for help for this on another service and provide a tip */
-            module = service->modules.list[0];
-            if (module->helpfile && dict_find(module->helpfile->db, topic, NULL))
+        /* Check for non command help in first primary help file, then next and so on */ 
+        /* Note - we need to think about default bindings. see opserv.helpfiles */
+            for(ii = 0; ii < service->modules.used; ii++)
             {
-
-                send_message(user, service->bot, "MCMSG_HELP_TOPIC_HEADER", cmdname);
-                send_message(user, service->bot, "MCMSG_HELP_DIVIDER");
-                send_help(user, service->bot, module->helpfile, topic);
-                send_message(user, service->bot, "MCMSG_HELP_FOOTER");
-                return true;
+                module = service->modules.list[ii];
+                if(!module->helpfile)
+                    continue;
+                if(dict_find(module->helpfile->db, topic, NULL))
+                {
+                    if (module->helpfile && dict_find(module->helpfile->db, topic, NULL))
+                    {
+
+                        send_message(user, service->bot, "MCMSG_HELP_TOPIC_HEADER", cmdname);
+                        send_message(user, service->bot, "MCMSG_HELP_DIVIDER");
+                        /* This should never fail but maybe if something is odd? */
+                        if(!send_help(user, service->bot, module->helpfile, topic))
+                            send_message(user, service->bot, "MSG_TOPIC_UNKNOWN");
+                        send_message(user, service->bot, "MCMSG_HELP_FOOTER");
+                        return true;
+                    }
+                }
             }
     }
     /* Otherwise say we cant find it */