-/* modcmd.c - NeonServ v5.1
+/* modcmd.c - NeonServ v5.2
* Copyright (C) 2011 Philipp Kreil (pk910)
*
* This program is free software: you can redistribute it and/or modify
return 0;
}
trigger->botid = botid;
- trigger->trigger = strdup(triggerStr);
+ trigger->trigger = (triggerStr[0] ? strdup(triggerStr) : NULL);
trigger->next = chan->trigger;
chan->trigger = trigger;
return trigger->trigger;
printf_mysql_query("SELECT `channel_pubcmd` FROM `channels` WHERE `channel_name` = '%s'", escape_string(sent_chan->name));
res = mysql_use();
if ((row = mysql_fetch_row(res)) != NULL) {
- uaccess = getChannelAccess(user, sent_chan, 1);
- if(row[0] && uaccess < atoi(row[0])) { //NOTE: HARDCODED DEFAULT: pubcmd = 0
+ uaccess = getChannelAccess(user, sent_chan);
+ if(row[0] && uaccess < atoi(row[0]) && !isGodMode(user)) { //NOTE: HARDCODED DEFAULT: pubcmd = 0
reply(tmp_text_client, user, "MODCMD_PUBCMD", sent_chan->name);
return;
}
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);
+ uaccess = getChannelAccess(user, chan);
if(uaccess < minaccess && isGodMode(user)) {
eventflags |= CMDFLAG_OPLOG;
} else if(uaccess < minaccess) {
if(isUserOnChan(client->user, chan) && (client->flags & SOCKET_FLAG_PREFERRED) && !FD_ISSET(client->botid, &fds)) {
FD_SET(client->botid, &fds);
trigger = get_channel_trigger(client->botid, chan);
- if(stricmplen(message, trigger, strlen(trigger)) == 0) {
+ if(trigger && stricmplen(message, trigger, strlen(trigger)) == 0) {
handle_command(client, user, chan, message + strlen(trigger));
}
}
if(isUserOnChan(client->user, chan) && !FD_ISSET(client->botid, &fds)) {
FD_SET(client->botid, &fds);
trigger = get_channel_trigger(client->botid, chan);
- if(stricmplen(message, trigger, strlen(trigger)) == 0) {
+ if(trigger && stricmplen(message, trigger, strlen(trigger)) == 0) {
handle_command(client, user, chan, message + strlen(trigger));
}
}
return NULL;
}
+void bind_unbound_required_functions(int botid) {
+ struct cmd_function *cmdfunc;
+ int i, found;
+ struct cmd_binding *cbind;
+ for(cmdfunc = cmd_functions; cmdfunc; cmdfunc = cmdfunc->next) {
+ if(cmdfunc->botid == botid && (cmdfunc->flags & CMDFLAG_REQUIRED)) {
+ found = 0;
+ for(i = 0; i < 27; i++) {
+ for(cbind = cmd_binds[i]; cbind; cbind = cbind->next) {
+ if(cbind->botid == botid && cbind->func == cmdfunc) {
+ found = 1;
+ break;
+ }
+ }
+ if(found)
+ break;
+ }
+ if(!found) {
+ bind_cmd_to_function(botid, cmdfunc->name, cmdfunc);
+ }
+ }
+ }
+}
+