/*** Show list of people suggestions are from without seeing the whole lot ***/ void suggestions_from(UR_OBJECT user) { FILE *fp; int cnt; char id[ARR_SIZE],line[ARR_SIZE], *str; set_crash(); if (!amsys->suggestion_count) { write_user(user,"There are currently no suggestions.\n"); return; } if (!(fp=fopen(SUGBOARD, "r"))) { write_user(user,"There was an error trying to read the suggestion board.\n"); write_syslog(ERRLOG,1,"Unable to open suggestion board in suggestions_from().\n"); return; } write_user(user,"\n~BB*** Suggestions on the suggestions board from ***\n\n"); cnt=0; line[0]='\0'; fgets(line,ARR_SIZE-1,fp); while (!feof(fp)) { sscanf(line,"%s",id); str=colour_com_strip(id); if (!strcmp(str,"From:")) { cnt++; vwrite_user(user,"~FT%2d)~RS %s",cnt,remove_first(line)); } line[0]='\0'; fgets(line,ARR_SIZE-1,fp); } fclose(fp); vwrite_user(user,"\nTotal of ~OL%d~RS suggestions.\n\n",amsys->suggestion_count); }
/* * Show list of people suggestions are from without seeing the whole lot */ void suggestions_from(UR_OBJECT user) { char id[ARR_SIZE], line[ARR_SIZE], filename[80], *s, *str; FILE *fp; int valid; int cnt; if (!amsys->suggestion_count) { write_user(user, "There are currently no suggestions.\n"); return; } sprintf(filename, "%s/%s", MISCFILES, SUGBOARD); fp = fopen(filename, "r"); if (!fp) { write_user(user, "There was an error trying to read the suggestion board.\n"); write_syslog(SYSLOG, 0, "Unable to open suggestion board in suggestions_from().\n"); return; } vwrite_user(user, "\n~BB*** Suggestions on the %s board from ***\n\n", SUGBOARD); valid = 1; cnt = 0; for (s = fgets(line, ARR_SIZE - 1, fp); s; s = fgets(line, ARR_SIZE - 1, fp)) { if (*s == '\n') { valid = 1; } sscanf(s, "%s", id); str = colour_com_strip(id); if (valid && !strcmp(str, "From:")) { vwrite_user(user, "~FC%2d)~RS %s", ++cnt, remove_first(s)); valid = 0; } } fclose(fp); vwrite_user(user, "\nTotal of ~OL%d~RS suggestions.\n\n", amsys->suggestion_count); }
/* * Set the user attributes */ void set_attributes(UR_OBJECT user) { char name[USER_NAME_LEN + 1], *recname; int i, tmp; if (word_count < 2) { i = -1; } else { /* FIXME: Add abbreviated matching like help() does */ for (i = 0; setstr[i].type; ++i) { if (!strcasecmp(setstr[i].type, word[1])) { break; } } if (!setstr[i].type) { i = -1; } } if (i == -1) { write_user(user, "Attributes you can set are:\n\n"); for (i = 0; setstr[i].type; ++i) { vwrite_user(user, "~FC%s~RS : %s\n", setstr[i].type, setstr[i].desc); } write_user(user, "\n"); return; } write_user(user, "\n"); switch (i) { case SETSHOW: show_attributes(user); return; case SETGEND: *word[2] = tolower(*word[2]); if (*word[2] == 'm' || *word[2] == 'f' || *word[2] == 'n') { switch (*word[2]) { case 'm': user->gender = MALE; write_user(user, "Gender set to Male\n"); break; case 'f': user->gender = FEMALE; write_user(user, "Gender set to Female\n"); break; case 'n': user->gender = NEUTER; write_user(user, "Gender set to Unset\n"); break; } check_autopromote(user, 1); return; } write_user(user, "Usage: set gender m|f|n\n"); return; case SETAGE: if (word_count < 3) { write_user(user, "Usage: set age <age>\n"); return; } tmp = atoi(word[2]); if (tmp < 0 || tmp > 200) { write_user(user, "You can only set your age range between 0 (unset) and 200.\n"); return; } user->age = tmp; vwrite_user(user, "Age now set to: %d\n", user->age); return; case SETWRAP: switch (user->wrap) { case 0: user->wrap = 1; write_user(user, "Word wrap now ON\n"); break; case 1: user->wrap = 0; write_user(user, "Word wrap now OFF\n"); break; } return; case SETEMAIL: strcpy(word[2], colour_com_strip(word[2])); if (strlen(word[2]) > 80) { write_user(user, "The maximum email length you can have is 80 characters.\n"); return; } if (!validate_email(word[2])) { write_user(user, "That email address format is incorrect. Correct format: [email protected]\n"); return; } strcpy(user->email, word[2]); if (!*user->email) { write_user(user, "Email set to : ~FRunset\n"); } else { vwrite_user(user, "Email set to : ~FC%s\n", user->email); } set_forward_email(user); return; case SETHOMEP: strcpy(word[2], colour_com_strip(word[2])); if (strlen(word[2]) > 80) { write_user(user, "The maximum homepage length you can have is 80 characters.\n"); return; } strcpy(user->homepage, word[2]); if (!*user->homepage) { write_user(user, "Homepage set to : ~FRunset\n"); } else { vwrite_user(user, "Homepage set to : ~FC%s\n", user->homepage); } return; case SETHIDEEMAIL: switch (user->hideemail) { case 0: user->hideemail = 1; write_user(user, "Email now showing to only the admins.\n"); break; case 1: user->hideemail = 0; write_user(user, "Email now showing to everyone.\n"); break; } return; case SETCOLOUR: switch (user->colour) { case 0: user->colour = 1; write_user(user, "~FCColour now on\n"); break; case 1: user->colour = 0; write_user(user, "Colour now off\n"); break; } return; case SETPAGER: if (word_count < 3) { write_user(user, "Usage: set pager <length>\n"); return; } user->pager = atoi(word[2]); if (user->pager < MAX_LINES || user->pager > 99) { vwrite_user(user, "Pager can only be set between %d and 99 - setting to default\n", MAX_LINES); user->pager = 23; } vwrite_user(user, "Pager length now set to: %d\n", user->pager); return; case SETROOM: switch (user->lroom) { case 0: user->lroom = 1; write_user(user, "You will log on into the room you left from.\n"); break; case 1: user->lroom = 0; write_user(user, "You will log on into the main room.\n"); break; } return; case SETFWD: if (!*user->email) { write_user(user, "You have not yet set your email address - autofwd cannot be used until you do.\n"); return; } if (!user->mail_verified) { write_user(user, "You have not yet verified your email - autofwd cannot be used until you do.\n"); return; } switch (user->autofwd) { case 0: user->autofwd = 1; write_user(user, "You will also receive smails via email.\n"); break; case 1: user->autofwd = 0; write_user(user, "You will no longer receive smails via email.\n"); break; } return; case SETPASSWD: switch (user->show_pass) { case 0: user->show_pass = 1; write_user(user, "You will now see your password when entering it at login.\n"); break; case 1: user->show_pass = 0; write_user(user, "You will no longer see your password when entering it at login.\n"); break; } return; case SETRDESC: switch (user->show_rdesc) { case 0: user->show_rdesc = 1; write_user(user, "You will now see the room descriptions.\n"); break; case 1: user->show_rdesc = 0; write_user(user, "You will no longer see the room descriptions.\n"); break; } return; case SETCOMMAND: switch (user->cmd_type) { case 0: user->cmd_type = 1; write_user(user, "You will now see commands listed by functionality.\n"); break; case 1: user->cmd_type = 0; write_user(user, "You will now see commands listed by level.\n"); break; } return; case SETRECAP: if (!amsys->allow_recaps) { write_user(user, "Sorry, names cannot be recapped at this present time.\n"); return; } if (word_count < 3) { write_user(user, "Usage: set recap <name as you would like it>\n"); return; } if (strlen(word[2]) > RECAP_NAME_LEN - 3) { write_user(user, "The recapped name length is too long - try using fewer colour codes.\n"); return; } recname = colour_com_strip(word[2]); if (strlen(recname) > USER_NAME_LEN) { write_user(user, "The recapped name still has to match your proper name.\n"); return; } strcpy(name, recname); strtolower(name); *name = toupper(*name); if (strcmp(user->name, name)) { write_user(user, "The recapped name still has to match your proper name.\n"); return; } strcpy(user->recap, word[2]); strcat(user->recap, "~RS"); /* user->recap is allways escaped with a reset to its colours... */ strcpy(user->bw_recap, recname); vwrite_user(user, "Your name will now appear as \"%s~RS\" on the \"who\", \"examine\", tells, etc.\n", user->recap); return; case SETICQ: strcpy(word[2], colour_com_strip(word[2])); if (strlen(word[2]) > ICQ_LEN) { vwrite_user(user, "The maximum ICQ UIN length you can have is %d characters.\n", ICQ_LEN); return; } strcpy(user->icq, word[2]); if (!*user->icq) { write_user(user, "ICQ number set to : ~FRunset\n"); } else { vwrite_user(user, "ICQ number set to : ~FC%s\n", user->icq); } return; case SETALERT: switch (user->alert) { case 0: user->alert = 1; write_user(user, "You will now be alerted if anyone on your friends list logs on.\n"); break; case 1: user->alert = 0; write_user(user, "You will no longer be alerted if anyone on your friends list logs on.\n"); break; } return; case SETREVBUF: switch (user->reverse_buffer) { case 0: user->reverse_buffer = 1; write_user(user, "~FCBuffers are now reversed\n"); break; case 1: user->reverse_buffer = 0; write_user(user, "Buffers now not reversed\n"); break; } return; } }
/*** send smail to the email ccount ***/ void forward_email(char *name, char *from, char *message) { FILE *fp; UR_OBJECT u; char fname[FNAME_LEN]; int on=0; set_crash(); if (!amsys->forwarding) return; if ((u=get_user(name))) { on=1; goto SKIP; } /* Have to create temp user if not logged on to check if email verified, etc */ if ((u=create_user())==NULL) { write_syslog(ERRLOG,1,"Unable to create temporary user object in forward_email().\n"); return; } strcpy(u->name,name); if (!load_user_details(u)) { destruct_user(u); destructed=0; return; } on=0; SKIP: if (!u->mail_verified) { if (!on) { destruct_user(u); destructed=0; } return; } if (!u->autofwd){ if (!on) { destruct_user(u); destructed=0; } return; } sprintf(fname,"%s/%s.FWD",MAILSPOOL,u->name); if (!(fp=fopen(fname,"w"))) { write_syslog(SYSLOG,0,"Unable to open forward mail file in set_forward_email()\n"); return; } fprintf(fp,"From: %s\n",reg_sysinfo[TALKERNAME]); fprintf(fp,"To: %s <%s>\n\n",u->name,u->email); from=colour_com_strip(from); fputs(from,fp); fputs("\n",fp); message=colour_com_strip(message); fputs(message,fp); fputs("\n\n",fp); fputs(talker_signature,fp); fclose(fp); send_email(u->email, "Auto-forward of smail", fname); write_syslog(SYSLOG,1,"%s had mail sent to their email address.\n",u->name); if (!on) { destruct_user(u); destructed=0; } return; }