+ if((cbind->func->flags & CMDFLAG_REGISTERED_CHAN)) {
+ MYSQL_ROW defaults = NULL;
+ char access_list[256];
+ int access_pos = 0;
+ int access_count = 0;
+ int minaccess = 0;
+ char *str_a, *str_b = cbind->func->channel_access, *str_c;
+ if(cbind->flags & CMDFLAG_OVERRIDE_CHANNEL_ACCESS)
+ str_b = cbind->channel_access;
+ access_list[0] = '\0';
+ if(str_b) {
+ str_c = strdup(str_b);
+ str_b = str_c;
+ while((str_a = str_b)) {
+ str_b = strstr(str_a, ",");
+ if(str_b) {
+ *str_b = '\0';
+ str_b++;
+ }
+ if(*str_a == '#') {
+ str_a++;
+ access_pos += sprintf(access_list+access_pos, ", `%s`", str_a);
+ access_count++;
+ } else {
+ if(atoi(str_a) > minaccess)
+ minaccess = atoi(str_a);
+ }
+ }
+ free(str_c);
+ }
+ if(!(chan->flags & CHANFLAG_REQUESTED_CHANINFO) || (sent_chan && sent_chan == chan) || access_count || minaccess) {
+ printf_mysql_query("SELECT `channel_id`, `channel_pubcmd` %s FROM `channels` WHERE `channel_name` = '%s'", access_list, escape_string(chan->name));
+ res = mysql_use();
+ if ((row = mysql_fetch_row(res)) != NULL) {
+ chan->flags |= CHANFLAG_CHAN_REGISTERED;
+ chan->channel_id = atoi(row[0]);
+ if((sent_chan && sent_chan == chan) || access_count || minaccess) {
+ uaccess = getChannelAccess(user, chan, 0);
+ if(uaccess < minaccess && isGodMode(user)) {
+ eventflags |= CMDFLAG_OPLOG;
+ } else if(uaccess < minaccess) {
+ //ACCESS DENIED
+ reply(tmp_text_client, user, "MODCMD_ACCESS_DENIED");
+ return;
+ }
+ if(!row[1] && !defaults) {
+ printf_mysql_query("SELECT `channel_id`, `channel_pubcmd` %s FROM `channels` WHERE `channel_name` = 'defaults'", access_list);
+ defaults = mysql_fetch_row(mysql_use());
+ }
+ if(sent_chan && (sent_chan == chan) && uaccess < (row[1] ? atoi(row[1]) : atoi(defaults[1]))) {
+ if(isGodMode(user)) {
+ eventflags |= CMDFLAG_OPLOG;
+ } else {
+ //PUBCMD
+ reply(tmp_text_client, user, "MODCMD_PUBCMD", chan->name);
+ return;
+ }
+ }
+ int i;
+ for(i = 0; i < access_count; i++) {
+ if(!row[2+i] && !defaults) {
+ printf_mysql_query("SELECT `channel_id`, `channel_pubcmd` %s FROM `channels` WHERE `channel_name` = 'defaults'", access_list);
+ defaults = mysql_fetch_row(mysql_use());
+ }
+ if(uaccess < (row[2+i] ? atoi(row[2+i]) : atoi(defaults[2+i]))) {
+ if(isGodMode(user)) {
+ eventflags |= CMDFLAG_OPLOG;
+ } else {
+ reply(tmp_text_client, user, "MODCMD_ACCESS_DENIED");
+ return;
+ }
+ }
+ }
+ }
+ }
+ chan->flags |= CHANFLAG_REQUESTED_CHANINFO;
+ }
+ if(!(chan->flags & CHANFLAG_CHAN_REGISTERED)) {
+ reply(tmp_text_client, user, "MODCMD_CHAN_REQUIRED");
+ return;
+ }
+ printf_mysql_query("SELECT `botid`, `suspended` FROM `bot_channels` LEFT JOIN `bots` ON `bot_channels`.`botid` = `bots`.`id` WHERE `chanid` = '%d' AND `botclass` = '%d'", chan->channel_id, client->botid);
+ res = mysql_use();
+ if ((row = mysql_fetch_row(res)) == NULL) {
+ reply(tmp_text_client, user, "MODCMD_CHAN_REQUIRED");
+ return;
+ } else if(!strcmp(row[1], "1")) {
+ reply(tmp_text_client, user, "MODCMD_CHAN_SUSPENDED");
+ return;
+ }
+ }
+ if((cbind->func->flags & CMDFLAG_REQUIRE_GOD) && !isGodMode(user)) {
+ reply(tmp_text_client, user, "MODCMD_PRIVILEGED", cbind->cmd);
+ return;
+ }
+ struct Event *event = createEvent(client, user, chan, cbind->func->name, argv, argc, eventflags);
+ cbind->func->func(client, user, chan, argv, argc, event);