added cmd_help
authorpk910 <philipp@zoelle1.de>
Tue, 20 Sep 2011 22:03:18 +0000 (00:03 +0200)
committerpk910 <philipp@zoelle1.de>
Tue, 20 Sep 2011 22:08:47 +0000 (00:08 +0200)
bot_NeonServ.c
cmd_neonserv_help.c [new file with mode: 0644]

index 9c144bdf2b0b81dabf5934b5851156065beb3d84..baba9afbbc3addfcf9aff1c8ad278e0bf1a1f332 100644 (file)
@@ -202,6 +202,7 @@ static const struct default_language_entry msgtab[] = {
     {"NS_INVITE_DONE", "Invited $b%s$b to join %s."},
     {"NS_INVITEME_ON_CHAN", "You are already in $b%s$b."},
     {"NS_INVITEME_DONE", "You have been invited to join %s."},
+    {"NS_HELP_TOPIC", "No help on that topic."},
     {NULL, NULL}
 };
 
@@ -259,7 +260,7 @@ INCLUDE ALL CMD's HERE
 #include "cmd_neonserv_set.c" /* TODO: parse, check and set modelock */
 //#include "cmd_neonserv_events.c"
 #include "cmd_neonserv_resync.c"
-//#include "cmd_neonserv_help.c"
+#include "cmd_neonserv_help.c"
 #include "cmd_neonserv_version.c"
 #include "cmd_neonserv_chanservsync.c"
 
@@ -442,6 +443,7 @@ void init_NeonServ() {
     register_command(BOTID, "unbanme",      neonserv_cmd_unbanme,   0, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH,  "#channel_canban",      0);
     register_command(BOTID, "invite",       neonserv_cmd_invite,    1, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH,  "#channel_canop",       0);
     register_command(BOTID, "inviteme",     neonserv_cmd_inviteme,  0, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH,  "#channel_getinvite",   0);
+    register_command(BOTID, "help",         neonserv_cmd_help,      0, 0,                                                                                           NULL,                   0);
     
     register_command(BOTID, "trace",        neonserv_cmd_trace,     1, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH,                                                   NULL,                   400);
     register_command(BOTID, "register",     neonserv_cmd_register,  2, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG,              NULL,                   100);
diff --git a/cmd_neonserv_help.c b/cmd_neonserv_help.c
new file mode 100644 (file)
index 0000000..5c669a2
--- /dev/null
@@ -0,0 +1,79 @@
+
+/*
+* argv[0-*]     index
+*/
+
+static CMD_BIND(neonserv_cmd_help) {
+    char *ident;
+    if(argc)
+        ident = merge_argv(argv, 0, argc);
+    else
+        ident = "0";
+    MYSQL_RES *res;
+    MYSQL_ROW row;
+    printf_mysql_query("SELECT `user_lang` FROM `users` WHERE `user_user` = '%s'", escape_string(user->auth));
+    res = mysql_use();
+    char *lang;
+    if ((row = mysql_fetch_row(res)) != NULL)
+        lang = row[0];
+    else
+        lang = "en";
+    printf_mysql_query("SELECT `text` FROM `help` WHERE `lang` = '%s' AND `ident` = '%s'", escape_string(lang), escape_string(ident));
+    res = mysql_use();
+    if ((row = mysql_fetch_row(res)) == NULL) {
+        if(stricmp(lang, "en")) {
+            printf_mysql_query("SELECT `text` FROM `help` WHERE `lang` = 'en' AND `ident` = '%s'", escape_string(ident));
+            res = mysql_use();
+        }
+        if ((row = mysql_fetch_row(res)) == NULL) {
+            reply(getTextBot(), user, "NS_HELP_TOPIC");
+            return;
+        }
+    }
+    char sendBuf[MAXLEN];
+    int sendBufPos = 0;
+    int i;
+    for(i = 0; i < strlen(row[0]); i++) {
+        switch(row[0][i]) {
+            case '\n':
+                if(sendBufPos) {
+                    sendBuf[sendBufPos] = '\0';
+                    reply(getTextBot(), user, "%s", sendBuf);
+                    sendBufPos = 0;
+                }
+                break;
+            case '$':
+                switch(row[0][i+1]) {
+                    case 'b':
+                        sendBuf[sendBufPos++] = '\002';
+                        i++;
+                        break;
+                    case 'k':
+                        sendBuf[sendBufPos++] = '\003';
+                        i++;
+                        break;
+                    case 'u':
+                        sendBuf[sendBufPos++] = '\031';
+                        i++;
+                        break;
+                    case 'C':
+                    case 'S':
+                        sendBufPos += sprintf(sendBuf + sendBufPos, "%s", client->user->nick);
+                        i++;
+                        break;
+                    default:
+                        sendBuf[sendBufPos++] = '$';
+                        break;
+                }
+                break;
+            default:
+                sendBuf[sendBufPos++] = row[0][i];
+                break;
+        }
+    }
+    if(sendBufPos) {
+        sendBuf[sendBufPos] = '\0';
+        reply(getTextBot(), user, "%s", sendBuf);
+        sendBufPos = 0;
+    }
+}