}
if(cbind->parameters) {
//userdefined parameters...
- char *uarga[MAXNUMPARAMS];
- char params[strlen(cbind->parameters)+1];
- strcpy(params, cbind->parameters);
- int uargpos = 0, argi, allargs = 0;
- char *ppos = params;
- char *prev_ppos = params;
- while((ppos = strstr(ppos, " "))) {
- *ppos = '\0';
- if(prev_ppos[0] == '%') {
- prev_ppos++;
- if(prev_ppos[strlen(prev_ppos)-1] == '-') {
+ char *uargs[MAXNUMPARAMS];
+ int uargc = 0;
+ char *a,*b = cbind->parameters;
+ int allargs, argi;
+ do {
+ a = strstr(b, " ");
+ if(a) *a = '\0';
+ if(b[0] == '%') {
+ b++;
+ if(b[strlen(b)-1] == '-') {
allargs = 1;
- prev_ppos[strlen(prev_ppos)-1] = '\0';
- } else
+ b[strlen(b)-1] = '\0';
+ argi = atoi(b);
+ b[strlen(b)-1] = '-';
+ } else {
allargs = 0;
- argi = atoi(prev_ppos);
+ argi = atoi(b);
+ }
if(argi > 0) {
- if(argi <= argc) continue;
- uarga[uargpos++] = argv[argi-1];
- if(allargs) {
- for(;argi < argc; argi++)
- uarga[uargpos++] = argv[argi-1];
+ if(argi <= argc) {
+ uargs[uargc++] = argv[argi-1];
+ if(allargs) {
+ for(argi++; argi <= argc; argi++)
+ uargs[uargc++] = argv[argi-1];
+ }
}
- } else if(!strcmp(prev_ppos, "c"))
- uarga[uargpos++] = (chan ? chan->name : NULL);
- else if(!strcmp(prev_ppos, "n"))
- uarga[uargpos++] = user->nick;
+ } else if(!strcmp(b, "c")) {
+ uargs[uargc++] = (chan ? chan->name : NULL);
+ } else if(!strcmp(b, "n")) {
+ uargs[uargc++] = user->nick;
+ }
} else {
- uarga[uargpos++] = prev_ppos;
+ uargs[uargc++] = b;
}
- ppos++;
- prev_ppos = ppos;
- }
- argv = uarga;
- argc = uargpos;
+ if(a) {
+ *a = ' ';
+ b = a+1;
+ }
+ } while(a);
+ argv = uargs;
+ argc = uargc;
}
if(argc < cbind->func->paramcount) {
reply(tmp_text_client, user, "MODCMD_LESS_PARAM_COUNT");
}
}
-int register_command(int botid, char *name, cmd_bind_t *func, int paramcount, unsigned int flags, char *channel_access, int global_access) {
+int register_command(int botid, char *name, cmd_bind_t *func, int paramcount, char *channel_access, int global_access, unsigned int flags) {
struct cmd_function *cmdfunc;
for(cmdfunc = cmd_functions; cmdfunc; cmdfunc = cmdfunc->next) {
if(cmdfunc->botid == botid && strcmp(cmdfunc->name, name) == 0)
return 0;
}
+struct cmd_function *find_cmd_function(int botid, char *name) {
+ struct cmd_function *cmdfunc;
+ for(cmdfunc = cmd_functions; cmdfunc; cmdfunc = cmdfunc->next) {
+ if(cmdfunc->botid == botid && stricmp(cmdfunc->name, name) == 0)
+ break;
+ }
+ return cmdfunc;
+}
+
struct ClientSocket *getTextBot() {
return tmp_text_client;
}
}
}
}
+
+struct cmd_binding *find_cmd_binding(int botid, char *cmd) {
+ int bind_index = get_binds_index(cmd[0]);
+ struct cmd_binding *cbind;
+ for(cbind = cmd_binds[bind_index]; cbind; cbind = cbind->next) {
+ if(cbind->botid == botid && strcmp(cbind->cmd, cmd) == 0) {
+ return cbind;
+ }
+ }
+ return NULL;
+}
+