void ec_access(char *from, char *to) { char num[20]; sprintf(num,"%i",get_useraccess(from,to)); nobo_strcpy(num); }
void do_rshit(COMMAND_ARGS) { /* * on_msg checks: CARGS */ Shit *shit; char *chan,*nick,*nuh; int uaccess; chan = chop(&rest); if (!chan || !*chan || (!ischannel(chan) && *chan != '*')) { usage(from); /* usage for CurrentCmd->name */ return; } if ((uaccess = get_useraccess(from,chan)) < cmdaccess) return; if ((nick = chop(&rest)) == NULL) { to_user(from,"No nick or userhost specified"); return; } if ((nuh = nick2uh(from,nick)) == NULL) return; if ((shit = find_shit(nuh,chan)) == NULL) { to_user(from,"%s is not in my shit list on that channel",nuh); return; } if ((get_useraccess(shit->from,chan)) > uaccess) { to_user(from,"The person who did this shitlist has a higher level than you"); return; } remove_shit(shit); to_user(from,"User %s is no longer being s*****d on %s",nuh,chan); }
int spy_source(char *from, int *t_src, const char **src) { int i; #ifdef DEBUG debug("(spy_source) t_src %i, src %s\n",*t_src,*src); #endif /* ifdef DEBUG */ for(i=0;spy_source_list[i].idstring;i++) { if (!stringcasecmp(*src,spy_source_list[i].idstring)) { *src = spy_source_list[i].idstring; *t_src = spy_source_list[i].typenum; return(200); } } *t_src = SPY_CHANNEL; if (!ischannel(*src)) return(-1); return(get_useraccess(from,*src)); }
void do_kicksay(COMMAND_ARGS) { /* * on_msg checks: CARGS */ KickSay *kick; char *channel,*mask; int inum; channel = chop(&rest); if (!channel) { if (!current->kicklist) { to_user(from,"Kicksay list is empty"); return; } if (dcc_only_command(from)) return; table_buffer("\037channel\037\t\037action\037\t\037string\037\t\037kick reason\037"); for(kick=current->kicklist;kick;kick=kick->next) { table_buffer("%s\t%s\t%s\t%s",kick->chan,ks_actions[kick->action],kick->mask,kick->reason); } table_send(from,2); return; } if (ischannel(channel) || *channel == '*') { if (get_useraccess(from,channel) < cmdaccess) return; inum = DEFAULT_KS_LEVEL; if (*rest != '"') { inum = a2i(chop(&rest)); if (errno || inum < 0 || inum > MAX_KS_LEVEL) return; } mask = get_token(&rest,"\""); if (!mask || !*mask) goto usage; /* * check for previously existing kicks */ if ((kick = find_kicksay(mask,channel)) != NULL) { to_user(from,"I'm already kicking on \"%s\"",kick->mask); return; } /* * dig out the reason (the rest) */ while(rest && *rest == ' ') rest++; if (!*rest) goto usage; /* * add it to the list */ set_mallocdoer(do_kicksay); kick = (KickSay*)Calloc(sizeof(KickSay) + Strlen(channel,mask,rest,NULL)); kick->next = current->kicklist; current->kicklist = kick; kick->action = inum; if (!matches("\\*?*\\*",mask)) kick->chan = Strcpy(kick->mask,mask) + 1; else { kick->mask[0] = '*'; Strcpy(kick->mask+1,mask); kick->chan = Strcat(kick->mask,MATCH_ALL) + 1; } kick->reason = Strcpy(kick->chan,channel) + 1; Strcpy(kick->reason,rest); to_user(from,"Now kicking on \"%s\" on %s",mask,channel); current->ul_save++; return; } usage: usage(from); /* usage for CurrentCmd->name */ }
/* * SHIT <channel|*> <nick|mask> <action> [expire] <reason> */ void do_shit(COMMAND_ARGS) { /* * on_msg checks CARGS */ char *channel,*nick,*nuh; int shitlevel,days,uaccess,shitaccess; if (CurrentCmd->name == C_QSHIT) { channel = MATCH_ALL; } else { channel = chop(&rest); if (!ischannel(channel) && *channel != '*') { usage: usage(from); /* usage for CurrentCmd->name */ return; } } if ((uaccess = get_useraccess(from,channel)) < cmdaccess) return; if ((nick = chop(&rest)) == NULL) goto usage; if (CurrentCmd->name == C_QSHIT) { shitlevel = DEFAULTSHITLEVEL; days = 86400 * DEFAULTSHITLENGTH; if (*rest == 0) rest = TEXT_DEFAULTSHIT; } else { shitlevel = asc2int(chop(&rest)); if (errno) goto usage; if (shitlevel < 1 || shitlevel > MAXSHITLEVEL) { to_user(from,"Valid levels are from 1 thru " MAXSHITLEVELSTRING); return; } /* * option: expire in XXX days */ days = 86400 * 30; if (*rest >= '1' && *rest <= '9') { days = 86400 * asc2int(chop(&rest)); if (errno) goto usage; } if (*rest == 0) goto usage; } #ifdef CHANBAN if (shitlevel == SHIT_CHANBAN) { nuh = nick; } else #endif /* CHANBAN */ { if ((nuh = nick2uh(from,nick)) == NULL) return; if (find_shit(nuh,channel)) { to_user(from,TEXT_ALREADYSHITTED,nuh); return; } if (uaccess != OWNERLEVEL) { shitaccess = get_useraccess(nuh,channel); if (shitaccess > uaccess) { to_user(from,TEXT_SHITLOWACCESS,nuh); return; } } format_uh(nuh,FUH_USERHOST); } #ifdef DEBUG debug("(do_shit) adding %s to %s (Level %i)\n",nuh,channel,shitlevel); #endif /* DEBUG */ add_shit(from,channel,nuh,rest,shitlevel,now + days); to_user(from,TEXT_HASSHITTED,nuh,channel); to_user(from,TEXT_SHITEXPIRES,time2str(now + days)); check_shit(); }
void do_set(COMMAND_ARGS) { /* * on_msg checks: */ Chan *chan; UniVar *univar,*varval; char tmp[MSGLEN]; char *pp,*channel,*name; int n,which,i,sz,limit,uaccess; /* * */ channel = get_channel2(to,&rest); chan = find_channel_ny(channel); name = chop(&rest); /* * empty args, its "set" or "set #channel" */ if (!name) { if (!chan) { to_user(from,ERR_CHAN,channel); return; } if (!CurrentDCC) return; i = CHANSET_SIZE; limit = SIZE_VARS - 1; univar = current->setting; *tmp = 0; if ((uaccess = get_useraccess(from,GLOBAL_CHANNEL))) to_user(from,str_underline("Global settings")); second_pass: for(;i<limit;i++) { if (uaccess < VarName[i].uaccess) continue; varval = (IsProc(i)) ? current->setting[i].proc_var : &univar[i]; sz = Strlen2(tmp,VarName[i].name); if (IsStr(i)) { sz += (varval->str_var) ? strlen(varval->str_var) : 7; } if (sz > 58) { to_user(from,FMT_PLAIN,tmp); *tmp = 0; } if (IsInt(i)) { pp = tolowercat(tmp,VarName[i].name); sprintf(pp,(IsChar(i)) ? "=`%c' " : "=%i ",varval->int_var); } else if (IsStr(i)) { pp = tolowercat(tmp,VarName[i].name); sprintf(pp,(varval->str_var) ? "=\"%s\" " : "=(unset) ",varval->str_var); } else if (IsTog(i)) { pp = Strcat(tmp,(varval->int_var) ? "+" : "-"); pp = tolowercat(pp,VarName[i].name); pp[0] = ' '; pp[1] = 0; } } if (*tmp && tmp[1]) to_user(from,FMT_PLAIN,tmp); if (limit != CHANSET_SIZE) { to_user(from,"\037Channel settings: %s\037",(chan) ? chan->name : rest); i = 0; limit = CHANSET_SIZE; univar = chan->setting; *tmp = 0; uaccess = get_useraccess(from,(chan) ? chan->name : rest); goto second_pass; } return; } /* * alter a setting */ if ((which = find_setting(name)) == -1) { set_usage: usage(from); /* usage for CurrentCmd->name */ return; } if ((which < CHANSET_SIZE) && *channel != '*') { if (!chan) { to_user(from,ERR_CHAN,channel); return; } /* * its a channel setting */ channel = chan->name; varval = &chan->setting[which]; } else { /* * its a global setting */ channel = MATCH_ALL; varval = ¤t->setting[which]; } if (VarName[which].uaccess > get_authaccess(from,channel)) return; /* * Check each type and process `rest' if needed. */ n = 0; if (IsChar(which)) { if (rest[1]) goto set_usage; } else if (IsNum(which)) { if (IsTog(which)) { if (!Strcasecmp(rest,"ON")) { n = 1; goto num_data_ok; } else if (!Strcasecmp(rest,"OFF")) { /* n is 0 by default */ goto num_data_ok; } } n = a2i((rest = chop(&rest))); if (errno || n < VarName[which].min || n > VarName[which].max) { to_user(from,"Possible values are %i through %i",VarName[which].min,VarName[which].max); return; } } num_data_ok: /* * */ if ((which < CHANSET_SIZE) && *channel == '*') { for(chan=current->chanlist;chan;chan=chan->next) { if (IsNum(which)) { chan->setting[which].int_var = n; } else if (IsStr(which)) { Free((char**)&chan->setting[which].str_var); if (*rest) { set_mallocdoer(do_set); chan->setting[which].str_var = Strdup(rest); } } } channel = "(all channels)"; } else { if (IsProc(which)) varval = varval->proc_var; if (IsChar(which)) varval->char_var = *rest; else if (IsNum(which)) varval->int_var = n; else { if (varval->str_var) Free((char**)&varval->str_var); if (*rest) { set_mallocdoer(do_set); varval->str_var = Strdup(rest); } } } to_user(from,"Var: %s On: %s Set to: %s",VarName[which].name, (which >= CHANSET_SIZE) ? "(global)" : channel,(*rest) ? rest : NULLSTR); if (VarName[which].func) VarName[which].func(&VarName[which]); }
void ec_set(char *from, char *to) { Chan *chan; UniVar *varval; char num[20]; char *src; int which,uaccess; src = ec_src; while(*src && *src != ')') src++; if (*src != ')') return; *(src++) = 0; if ((which = find_setting(ec_src)) >= 0) { if (which >= CHANSET_SIZE) { uaccess = get_useraccess(from,ANY_CHANNEL); varval = ¤t->setting[which]; } else if ((chan = find_channel_ny(to))) { uaccess = get_useraccess(from,to); varval = &chan->setting[which]; } else { nobo_strcpy("(unknown channel)"); return; } if (uaccess < VarName[which].uaccess) return; if (IsProc(which)) varval = varval->proc_var; if (IsChar(which)) { num[0] = varval->char_var; num[1] = 0; nobo_strcpy(num); } else if (IsInt(which)) { sprintf(num,"%i",varval->int_var); nobo_strcpy(num); } else if (IsTog(which)) { nobo_strcpy((varval->int_var) ? "on" : "off"); } else if (IsStr(which)) { nobo_strcpy(nullstr(varval->str_var)); } } else { nobo_strcpy("(unknown setting)"); } ec_src = src; }