Newer
Older
tuvebot / thread.c
#include <stdio.h>
#include "tuvebot.h"

void *botCMD_Thread(void *threadid) {
  int            tid    = 0x0;
  unsigned int   i      = 0;
  int            tmpVal = 0;
  short          lC     = 0x0;
  char           qryStr[256];
  botChanList_t *tmpChan = 0x0;
  MYSQL_RES     *res          = 0x0;
  MYSQL_ROW      row;

  tid = (int)threadid;
  writeLog(0,"Starting Bot's CMD Thread: [%d]\n", tid);
  while (1) {
    if (connected == 0) {
      sleep(5);
      if (joinChan == 1) {
        joinChan = 0;
        connected = 1;
        botJoinChans();
        }
	  }
	else {
      sleep(30);
      res = dbQuery("SELECT channel,rating,classification,random,queue,exclusive,time,topic FROM channels WHERE updated = 1",1);
      if (mysql_num_rows(res) > 0) {
    	for (i = 0;i < mysql_num_rows(res);i++) {
    	  row = mysql_fetch_row(res);
    	  
    	  tmpChan = botFindChan(row[0]);
    	  if (tmpChan == 0x0) {
    	    writeLog(3,"Adding Chan: %s\n",row[0]);
    	    tmpChan = botAddChan(row[0]);
    	    }
    	  
    	  /* Set Access Level */
    	  tmpVal = atoi(row[1]);
    	  writeLog(0,"TMP [%i][%i]",tmpChan->modes[CHAN_RATING],tmpVal);
    	  if (tmpChan->modes[CHAN_RATING] != tmpVal) {
    	    if (tmpVal > 0)
    	      sWriteSocket("MSG %s:.tv mode +A %i",row[0],tmpVal);
    	    else
    		  sWriteSocket("MSG %s:.tv mode -A",row[0]);
    	    tmpChan->modes[CHAN_RATING] = tmpVal;
    	    }
    	  
    	  /* Set Classification */
    	  tmpVal = atoi(row[2]);
    	  writeLog(0,"TMP [%i][%i]",tmpChan->modes[CHAN_CLASS],tmpVal);
    	  if (tmpChan->modes[CHAN_CLASS] != tmpVal) {
    	    if (tmpVal > 0)
    	      sWriteSocket("MSG %s:.tv mode +C %i",row[0],tmpVal);
    	    else
              sWriteSocket("MSG %s:.tv mode -C",row[0]);
    	    tmpChan->modes[CHAN_CLASS] = tmpVal;
    	    }
    	  
    	  /* Set Random */
    	  tmpVal = atoi(row[3]);
    	  writeLog(0,"TMP [%i][%i]",tmpChan->modes[CHAN_RANDOM],tmpVal);
    	  if (tmpChan->modes[CHAN_RANDOM] != tmpVal) {
    	    if (tmpVal == 1)
    	      sWriteSocket("MSG %s:.tv mode +R",row[0]);
    	    else
    		  sWriteSocket("MSG %s:.tv mode -R",row[0]);
    	    tmpChan->modes[CHAN_RANDOM] = tmpVal;
    	    }
    	  
    	  /* Set Queue */
    	  tmpVal = atoi(row[4]);
    	  writeLog(0,"TMP [%i][%i]",tmpChan->modes[CHAN_QUEUE],tmpVal);
    	  if (tmpChan->modes[CHAN_QUEUE] != tmpVal) {
    	    if (tmpVal == 1)
    	      sWriteSocket("MSG %s:.tv mode +Q",row[0]);
    	    else
    		  sWriteSocket("MSG %s:.tv mode -Q",row[0]);
    	    tmpChan->modes[CHAN_QUEUE] = tmpVal;
    	    }
    	  
    	  /* Set Exclusive */
    	  tmpVal = atoi(row[5]);
    	  writeLog(0,"TMP [%i][%i]",tmpChan->modes[CHAN_EXCLUSIVE],tmpVal);
    	  if (tmpChan->modes[CHAN_EXCLUSIVE] != tmpVal) {
    	    if (tmpVal == 1)
    	      sWriteSocket("MSG %s:.tv mode +E",row[0]);
    	    else
    		  sWriteSocket("MSG %s:.tv mode -E",row[0]);
    	    tmpChan->modes[CHAN_EXCLUSIVE] = tmpVal;
    	    }
    	  
    	  /* Set Time */
    	  tmpVal = atoi(row[6]);
    	  writeLog(0,"TMP [%i][%i]",tmpChan->modes[CHAN_TIME],tmpVal);
    	  if (tmpChan->modes[CHAN_TIME] != tmpVal) {
    	    if (tmpVal > 0)
    	      sWriteSocket("MSG %s:.tv mode +T %i",row[0],tmpVal);
    	    else
              sWriteSocket("MSG %s:.tv mode -T",row[0]);
    	    tmpChan->modes[CHAN_TIME] = tmpVal;
    	    }
    	  
    	  if (strcmp(tmpChan->topic,row[7])) {
    	    sWriteSocket("TOPIC %s:%s",row[0],row[7]);
    	    strcpy(tmpChan->topic,row[7]);
    	    }
    	  
    	  sprintf(qryStr,"UPDATE channels SET updated = 0 WHERE channel = '%s'",row[0]);
    	  dbQuery(qryStr,0);
    	  }
    	
        }
      
      if (lC == 6) {
        lC = 0;
        sWriteSocket("STATUS");
        }
      lC++;
	  }
    }
  pthread_exit(NULL);
  } /* End tuveCMD_Thread() */