]> jfr.im git - irc/quakenet/newserv.git/blobdiff - qabot/qabot.c
Merge.
[irc/quakenet/newserv.git] / qabot / qabot.c
index a24a6f9c442a8cc212da03ac55006c46d1003885..ac472f3b1572886735f0e34b9bc933ce2ef092b4 100644 (file)
@@ -1,7 +1,6 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdarg.h>
-#include <string.h>
 #include <time.h>
 
 #include "../nick/nick.h"
 #include "../lib/base64.h"
 #include "../lib/irc_string.h"
 #include "../lib/splitline.h"
+#include "../lib/version.h"
 
 #include "qabot.h"
 
+MODULE_VERSION("");
+
 time_t qab_startime;
 int qabot_nickext;
 int qabot_spam_nickext;
@@ -67,13 +69,12 @@ void _init() {
   addcommandtotree(qabot_chancommands, "spam", QAC_QUESTIONCHAN|QAC_STAFFCHAN, 30, qabot_dochanspam);
   addcommandtotree(qabot_chancommands, "status", QAC_QUESTIONCHAN|QAC_STAFFCHAN, 0, qabot_dochanstatus);
   addcommandtotree(qabot_chancommands, "unblock", QAC_QUESTIONCHAN|QAC_STAFFCHAN, 2, qabot_dochanunblock);
-  addcommandtotree(qabot_chancommands, "listtexts", QAC_QUESTIONCHAN|QAC_STAFFCHAN, 0, qabot_dochanlisttexts);
-  addcommandtotree(qabot_chancommands, "showsection", QAC_QUESTIONCHAN|QAC_STAFFCHAN, 2, qabot_dochanshowsection);
-  addcommandtotree(qabot_chancommands, "addtext", QAC_QUESTIONCHAN|QAC_STAFFCHAN, 2, qabot_dochanaddtext);
-  addcommandtotree(qabot_chancommands, "deltext", QAC_QUESTIONCHAN|QAC_STAFFCHAN, 1, qabot_dochandeltext);
-  addcommandtotree(qabot_chancommands, "addsection", QAC_QUESTIONCHAN|QAC_STAFFCHAN, 2, qabot_dochanaddsection);
-  addcommandtotree(qabot_chancommands, "delsection", QAC_QUESTIONCHAN|QAC_STAFFCHAN, 2, qabot_dochandelsection);
-  addcommandtotree(qabot_chancommands, "record", QAC_STAFFCHAN, 2, qabot_dochanrecord);
+  addcommandtotree(qabot_chancommands, "record", QAC_STAFFCHAN, 1, qabot_dochanrecord);
+  addcommandtotree(qabot_chancommands, "play", QAC_STAFFCHAN, 1, qabot_dochanplay);
+  addcommandtotree(qabot_chancommands, "continue", QAC_STAFFCHAN, 0, qabot_dochancontinue);
+  addcommandtotree(qabot_chancommands, "stop", QAC_STAFFCHAN, 0, qabot_dochanstop);
+  addcommandtotree(qabot_chancommands, "delete", QAC_STAFFCHAN, 1, qabot_dochandelete);
+  addcommandtotree(qabot_chancommands, "list", QAC_STAFFCHAN, 0, qabot_dochanlist);
 
   if ((qabot_nickext = registernickext("QABOT")) == -1) {
     return;
@@ -146,13 +147,12 @@ void _fini() {
   deletecommandfromtree(qabot_chancommands, "spam", qabot_dochanspam);
   deletecommandfromtree(qabot_chancommands, "status", qabot_dochanstatus);
   deletecommandfromtree(qabot_chancommands, "unblock", qabot_dochanunblock);
-  deletecommandfromtree(qabot_chancommands, "listtexts", qabot_dochanlisttexts);
-  deletecommandfromtree(qabot_chancommands, "showsection", qabot_dochanshowsection);
-  deletecommandfromtree(qabot_chancommands, "addtext", qabot_dochanaddtext);
-  deletecommandfromtree(qabot_chancommands, "deltext", qabot_dochandeltext);
-  deletecommandfromtree(qabot_chancommands, "addsection", qabot_dochanaddsection);
-  deletecommandfromtree(qabot_chancommands, "delsection", qabot_dochandelsection);
   deletecommandfromtree(qabot_chancommands, "record", qabot_dochanrecord);
+  deletecommandfromtree(qabot_chancommands, "play", qabot_dochanplay);
+  deletecommandfromtree(qabot_chancommands, "continue", qabot_dochancontinue);
+  deletecommandfromtree(qabot_chancommands, "stop", qabot_dochanstop);
+  deletecommandfromtree(qabot_chancommands, "delete", qabot_dochandelete);
+  deletecommandfromtree(qabot_chancommands, "list", qabot_dochanlist);
   destroycommandtree(qabot_chancommands);
 }
 
@@ -169,11 +169,20 @@ void qabot_lostnick(int hooknum, void* arg) {
   for (b = qab_bots; b; b = b->next) {
     if (b->micnumeric == np->numeric) {
       b->micnumeric = 0;
-      sendmessagetochannel(b->np, b->staff_chan->channel, "%s deactivated.", 
-        bot->recording_section ? "Recorder" : "Mic");
-      if (!b->lastspam && !b->recording_section)
+      sendmessagetochannel(b->np, b->staff_chan->channel, "Mic deactivated.");
+      if (!b->lastspam)
         qabot_spamstored((void*)b);
-      b->recording_section = 0;
+    }
+    
+    if (b->recnumeric == np->numeric) {
+      b->recnumeric = 0;
+      
+      if (b->recfile) {
+        fclose(b->recfile);
+        b->recfile = NULL;
+      }
+      
+      sendmessagetochannel(b->np, b->staff_chan->channel, "Recorder deactivated.");
     }
   }
 }
@@ -192,11 +201,20 @@ void qabot_channel_part(int hooknum, void* arg) {
   for (b = qab_bots; b; b = b->next) {
     if ((b->micnumeric == np->numeric) && (b->staff_chan->channel == cp)) {
       b->micnumeric = 0;
-      sendmessagetochannel(b->np, b->staff_chan->channel, "%s deactivated.", 
-        b->recording_section ? "Recorder" : "Mic");
-      if (!b->lastspam && !b->recording_section)
+      sendmessagetochannel(b->np, b->staff_chan->channel, "Mic deactivated.");
+      if (!b->lastspam)
         qabot_spamstored((void*)b);
-      b->recording_section = 0;
+    }
+    
+    if (b->recnumeric == np->numeric) {
+      b->recnumeric = 0;
+      
+      if (b->recfile) {
+        fclose(b->recfile);
+        b->recfile = NULL;
+      }
+      
+      sendmessagetochannel(b->np, b->staff_chan->channel, "Recorder deactivated.");
     }
   }
 }
@@ -312,13 +330,17 @@ void qabot_child_handler(nick* me, int type, void** args) {
     text = (char*)args[2];
     
     if (*text == '!') {
-      cargc = splitline((char*)(++text), cargv, 50, 0);
-         cmd = findcommandintree(qabot_chancommands, cargv[0], 1);
-         if (!cmd) {
-           sendnoticetouser(me, sender, "Unknown command.");
-           return;
+      if (*(++text) == '\0') {
+        sendnoticetouser(me, sender, "No command specified.");
+        return;
       }
-      
+      cargc = splitline((char*)text, cargv, 50, 0);
+      cmd = findcommandintree(qabot_chancommands, cargv[0], 1);
+      if (!cmd) {
+        sendnoticetouser(me, sender, "Unknown command.");
+        return;
+      }
+
       if ((cp->index == bot->staff_chan) && !(cmd->level & QAC_STAFFCHAN)) {
         sendnoticetouser(me, sender, "This command cannot be used in the staff channel.");
         return;
@@ -367,6 +389,11 @@ void qabot_child_handler(nick* me, int type, void** args) {
         }
       }
     }
+    else if ((*text != '!') && (bot->recnumeric == sender->numeric) && (cp->index == bot->staff_chan)) {
+      if (bot->recfile) {
+        fprintf(bot->recfile, "%s\n", text);
+      }
+    }
     break;
   
   case LU_PRIVMSG:
@@ -385,7 +412,7 @@ void qabot_child_handler(nick* me, int type, void** args) {
       char hostbuf[NICKLEN + USERLEN + HOSTLEN + 3];
       qab_block* b;
       qab_question* q;
-      unsigned long crc;
+      unsigned long crc = 0;
       int len;
       
       sendnoticetouser(me, sender, "Your question has been relayed to the %s staff.", bot->public_chan->name->content);