/** * The /ns help command. * @param u The user who issued the command * @param MOD_CONT to continue processing other modules, MOD_STOP to stop processing. **/ int do_help(User * u) { char *cmd = strtok(NULL, ""); if (!cmd) { notice_help(s_NickServ, u, NICK_HELP); moduleDisplayHelp(1, u); if (is_services_admin(u)) { notice_help(s_NickServ, u, NICK_SERVADMIN_HELP); } if (NSExpire >= 86400) notice_help(s_NickServ, u, NICK_HELP_EXPIRES, NSExpire / 86400); notice_help(s_NickServ, u, NICK_HELP_FOOTER); } else if (stricmp(cmd, "SET LANGUAGE") == 0) { int i; notice_help(s_NickServ, u, NICK_HELP_SET_LANGUAGE); for (i = 0; i < NUM_LANGS && langlist[i] >= 0; i++) notice_user(s_NickServ, u, " %2d) %s", i + 1, langnames[langlist[i]]); } else { mod_help_cmd(s_NickServ, u, NICKSERV, cmd); } return MOD_CONT; }
/** * The /bs help command. * @param u The user who issued the command * @param MOD_CONT to continue processing other modules, MOD_STOP to stop processing. **/ static int do_help(User * u) { char *cmd = strtok(NULL, ""); if (!cmd) { notice_help(s_BotServ, u, BOT_HELP); moduleDisplayHelp(4, u); notice_help(s_BotServ, u, BOT_HELP_FOOTER, BSMinUsers); } else { mod_help_cmd(s_BotServ, u, BOTSERV, cmd); } return MOD_CONT; }
/** * The /ms help command. * @param u The user who issued the command * @param MOD_CONT to continue processing other modules, MOD_STOP to stop processing. **/ int do_help(User * u) { char *cmd = strtok(NULL, ""); if (!cmd) { notice_help(s_MemoServ, u, MEMO_HELP_HEADER); moduleDisplayHelp(3, u); notice_help(s_MemoServ, u, MEMO_HELP_FOOTER, s_ChanServ); } else { mod_help_cmd(s_MemoServ, u, MEMOSERV, cmd); } return MOD_CONT; }
static void do_help(User * u) { const char *cmd; cmd = strtok(NULL, " "); notice_help(s_OperServ, u, OPER_HELP_START); if (!cmd) { notice_help(s_OperServ, u, OPER_HELP); } else { help_cmd(s_OperServ, u, cmds, cmd); } notice_help(s_OperServ, u, OPER_HELP_END); }
/** * The /bs say command. * @param u The user who issued the command * @param MOD_CONT to continue processing other modules, MOD_STOP to stop processing. **/ int do_say(User * u) { ChannelInfo *ci; char *chan = strtok(NULL, " "); char *text = strtok(NULL, ""); if (!chan || !text) syntax_error(s_BotServ, u, "SAY", BOT_SAY_SYNTAX); else if (!(ci = cs_findchan(chan))) notice_lang(s_BotServ, u, CHAN_X_NOT_REGISTERED, chan); else if (ci->flags & CI_VERBOTEN) notice_lang(s_BotServ, u, CHAN_X_FORBIDDEN, chan); else if (!ci->bi) notice_help(s_BotServ, u, BOT_NOT_ASSIGNED); else if (!ci->c || ci->c->usercount < BSMinUsers) notice_lang(s_BotServ, u, BOT_NOT_ON_CHANNEL, ci->name); else if (!check_access(u, ci, CA_SAY)) notice_lang(s_BotServ, u, ACCESS_DENIED); else { if (text[0] != '\001') { xanadu_cmd_privmsg(ci->bi->nick, ci->name, "%s", text); ci->bi->lastmsg = time(NULL); if (logchan && LogBot) xanadu_cmd_privmsg(ci->bi->nick, LogChannel, "SAY %s %s %s", u->nick, ci->name, text); } else { syntax_error(s_BotServ, u, "SAY", BOT_SAY_SYNTAX); } } return MOD_CONT; }
void help_cmd(const char *service, User *u, Command *list, const char *cmd) { Command *c = lookup_cmd(list, cmd); if (c) { const char *p1 = c->help_param1, *p2 = c->help_param2, *p3 = c->help_param3, *p4 = c->help_param4; if (c->helpmsg_all >= 0) { notice_help(service, u, c->helpmsg_all, p1, p2, p3, p4); } if (is_services_root(u)) { if (c->helpmsg_root >= 0) notice_help(service, u, c->helpmsg_root, p1, p2, p3, p4); else if (c->helpmsg_all < 0) notice_lang(service, u, NO_HELP_AVAILABLE, cmd); } else if (is_services_admin(u)) { if (c->helpmsg_admin >= 0) notice_help(service, u, c->helpmsg_admin, p1, p2, p3, p4); else if (c->helpmsg_all < 0) notice_lang(service, u, NO_HELP_AVAILABLE, cmd); } else if (is_services_oper(u)) { if (c->helpmsg_oper >= 0) notice_help(service, u, c->helpmsg_oper, p1, p2, p3, p4); else if (c->helpmsg_all < 0) notice_lang(service, u, NO_HELP_AVAILABLE, cmd); } else { if (c->helpmsg_reg >= 0) notice_help(service, u, c->helpmsg_reg, p1, p2, p3, p4); else if (c->helpmsg_all < 0) notice_lang(service, u, NO_HELP_AVAILABLE, cmd); } } else { notice_lang(service, u, NO_HELP_AVAILABLE, cmd); } }
void help_cmd(const char *service, User *u, Command *list, const char *cmd) { Command *c = lookup_cmd(list, cmd); if (c) { if (c->helpmsg_syntax || c->helpmsg_help || c->helpmsg_example) { if (c->helpmsg_syntax) notice_help(service, u, c->helpmsg_syntax ); if (c->helpmsg_help) notice_help(service, u, c->helpmsg_help ); if (c->helpmsg_example) notice_help(service, u, c->helpmsg_example ); } else { notice_lang(service, u, NO_HELP_AVAILABLE, cmd); } } else { notice_lang(service, u, NO_HELP_AVAILABLE, cmd); } }
/** * The /ns identify command. * @param u The user who issued the command * @param MOD_CONT to continue processing other modules, MOD_STOP to stop processing. **/ int do_identify(User * u) { char *pass = strtok(NULL, " "); NickAlias *na; NickRequest *nr; int res; char tsbuf[16]; char modes[512]; int len; if (!pass) { syntax_error(s_NickServ, u, "IDENTIFY", NICK_IDENTIFY_SYNTAX); } else if (!(na = u->na)) { if ((nr = findrequestnick(u->nick))) { notice_lang(s_NickServ, u, NICK_IS_PREREG); } else { notice_lang(s_NickServ, u, NICK_NOT_REGISTERED); } } else if (na->status & NS_VERBOTEN) { notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick); } else if (na->nc->flags & NI_SUSPENDED) { notice_lang(s_NickServ, u, NICK_X_SUSPENDED, na->nick); } else if (nick_identified(u)) { notice_lang(s_NickServ, u, NICK_ALREADY_IDENTIFIED); } else if (!(res = enc_check_password(pass, na->nc->pass))) { alog("%s: Failed IDENTIFY for %s!%s@%s", s_NickServ, u->nick, u->username, u->host); notice_lang(s_NickServ, u, PASSWORD_INCORRECT); bad_password(u); } else if (res == -1) { notice_lang(s_NickServ, u, NICK_IDENTIFY_FAILED); } else { if (!(na->status & NS_IDENTIFIED) && !(na->status & NS_RECOGNIZED)) { if (na->last_usermask) free(na->last_usermask); na->last_usermask = scalloc(strlen(common_get_vident(u)) + strlen(common_get_vhost(u)) + 2, 1); sprintf(na->last_usermask, "%s@%s", common_get_vident(u), common_get_vhost(u)); if (na->last_realname) free(na->last_realname); na->last_realname = sstrdup(u->realname); } na->status |= NS_IDENTIFIED; na->last_seen = time(NULL); snprintf(tsbuf, sizeof(tsbuf), "%lu", (unsigned long int) u->timestamp); if (ircd->modeonreg) { len = strlen(ircd->modeonreg); strncpy(modes,ircd->modeonreg,512); if(ircd->rootmodeonid && is_services_root(u)) { strncat(modes,ircd->rootmodeonid,512-len); } else if(ircd->adminmodeonid && is_services_admin(u)) { strncat(modes,ircd->adminmodeonid,512-len); } else if(ircd->opermodeonid && is_services_oper(u)) { strncat(modes,ircd->opermodeonid,512-len); } if (ircd->tsonmode) { common_svsmode(u, modes, tsbuf); } else { common_svsmode(u, modes, ""); } } send_event(EVENT_NICK_IDENTIFY, 1, u->nick); alog("%s: %s!%s@%s identified for nick %s", s_NickServ, u->nick, u->username, u->host, u->nick); notice_lang(s_NickServ, u, NICK_IDENTIFY_SUCCEEDED); if (ircd->vhost) { do_on_id(u); } if (NSModeOnID) { do_setmodes(u); } if (NSForceEmail && u->na && !u->na->nc->email) { notice_lang(s_NickServ, u, NICK_IDENTIFY_EMAIL_REQUIRED); notice_help(s_NickServ, u, NICK_IDENTIFY_EMAIL_HOWTO); } if (!(na->status & NS_RECOGNIZED)) check_memos(u); /* Enable nick tracking if enabled */ if (NSNickTracking) nsStartNickTracking(u); /* Clear any timers */ if (na->nc->flags & NI_KILLPROTECT) { del_ns_timeout(na, TO_COLLIDE); } } return MOD_CONT; }
/** * The /bs kick command. * @param u The user who issued the command * @param MOD_CONT to continue processing other modules, MOD_STOP to stop processing. **/ int do_kickcmd(User * u) { char *chan = strtok(NULL, " "); char *option = strtok(NULL, " "); char *value = strtok(NULL, " "); char *ttb = strtok(NULL, " "); ChannelInfo *ci; if (readonly) notice_lang(s_BotServ, u, BOT_KICK_DISABLED); else if (!chan || !option || !value) syntax_error(s_BotServ, u, "KICK", BOT_KICK_SYNTAX); else if (stricmp(value, "ON") && stricmp(value, "OFF")) syntax_error(s_BotServ, u, "KICK", BOT_KICK_SYNTAX); else if (!(ci = cs_findchan(chan))) notice_lang(s_BotServ, u, CHAN_X_NOT_REGISTERED, chan); else if (ci->flags & CI_VERBOTEN) notice_lang(s_BotServ, u, CHAN_X_FORBIDDEN, chan); else if (!is_services_admin(u) && !check_access(u, ci, CA_SET)) notice_lang(s_BotServ, u, ACCESS_DENIED); else if (!ci->bi) notice_lang(s_BotServ, u, BOT_NOT_ASSIGNED); else { if (!stricmp(option, "BADWORDS")) { if (!stricmp(value, "ON")) { if (ttb) { ci->ttb[TTB_BADWORDS] = strtol(ttb, (char **) NULL, 10); /* Only error if errno returns ERANGE or EINVAL or we are less then 0 - TSL */ if (errno == ERANGE || errno == EINVAL || ci->ttb[TTB_BADWORDS] < 0) { /* leaving the debug behind since we might want to know what these are */ if (debug) { alog("debug: errno is %d ERANGE %d EINVAL %d ttb %d", errno, ERANGE, EINVAL, ci->ttb[TTB_BADWORDS]); } /* reset the value back to 0 - TSL */ ci->ttb[TTB_BADWORDS] = 0; notice_lang(s_BotServ, u, BOT_KICK_BAD_TTB, ttb); return MOD_CONT; } } else { ci->ttb[TTB_BADWORDS] = 0; } ci->botflags |= BS_KICK_BADWORDS; if (ci->ttb[TTB_BADWORDS]) notice_lang(s_BotServ, u, BOT_KICK_BADWORDS_ON_BAN, ci->ttb[TTB_BADWORDS]); else notice_lang(s_BotServ, u, BOT_KICK_BADWORDS_ON); } else { ci->botflags &= ~BS_KICK_BADWORDS; notice_lang(s_BotServ, u, BOT_KICK_BADWORDS_OFF); } } else if (!stricmp(option, "BOLDS")) { if (!stricmp(value, "ON")) { if (ttb) { ci->ttb[TTB_BOLDS] = strtol(ttb, (char **) NULL, 10); if (errno == ERANGE || errno == EINVAL || ci->ttb[TTB_BOLDS] < 0) { if (debug) { alog("debug: errno is %d ERANGE %d EINVAL %d ttb %d", errno, ERANGE, EINVAL, ci->ttb[TTB_BOLDS]); } ci->ttb[TTB_BOLDS] = 0; notice_lang(s_BotServ, u, BOT_KICK_BAD_TTB, ttb); return MOD_CONT; } } else ci->ttb[TTB_BOLDS] = 0; ci->botflags |= BS_KICK_BOLDS; if (ci->ttb[TTB_BOLDS]) notice_lang(s_BotServ, u, BOT_KICK_BOLDS_ON_BAN, ci->ttb[TTB_BOLDS]); else notice_lang(s_BotServ, u, BOT_KICK_BOLDS_ON); } else { ci->botflags &= ~BS_KICK_BOLDS; notice_lang(s_BotServ, u, BOT_KICK_BOLDS_OFF); } } else if (!stricmp(option, "CAPS")) { if (!stricmp(value, "ON")) { char *min = strtok(NULL, " "); char *percent = strtok(NULL, " "); if (ttb) { ci->ttb[TTB_CAPS] = strtol(ttb, (char **) NULL, 10); if (errno == ERANGE || errno == EINVAL || ci->ttb[TTB_CAPS] < 0) { if (debug) { alog("debug: errno is %d ERANGE %d EINVAL %d ttb %d", errno, ERANGE, EINVAL, ci->ttb[TTB_CAPS]); } ci->ttb[TTB_CAPS] = 0; notice_lang(s_BotServ, u, BOT_KICK_BAD_TTB, ttb); return MOD_CONT; } } else ci->ttb[TTB_CAPS] = 0; if (!min) ci->capsmin = 10; else ci->capsmin = atol(min); if (ci->capsmin < 1) ci->capsmin = 10; if (!percent) ci->capspercent = 25; else ci->capspercent = atol(percent); if (ci->capspercent < 1 || ci->capspercent > 100) ci->capspercent = 25; ci->botflags |= BS_KICK_CAPS; if (ci->ttb[TTB_CAPS]) notice_lang(s_BotServ, u, BOT_KICK_CAPS_ON_BAN, ci->capsmin, ci->capspercent, ci->ttb[TTB_CAPS]); else notice_lang(s_BotServ, u, BOT_KICK_CAPS_ON, ci->capsmin, ci->capspercent); } else { ci->botflags &= ~BS_KICK_CAPS; notice_lang(s_BotServ, u, BOT_KICK_CAPS_OFF); } } else if (!stricmp(option, "COLORS")) { if (!stricmp(value, "ON")) { if (ttb) { ci->ttb[TTB_COLORS] = strtol(ttb, (char **) NULL, 10); if (errno == ERANGE || errno == EINVAL || ci->ttb[TTB_COLORS] < 0) { if (debug) { alog("debug: errno is %d ERANGE %d EINVAL %d ttb %d", errno, ERANGE, EINVAL, ci->ttb[TTB_COLORS]); } ci->ttb[TTB_COLORS] = 0; notice_lang(s_BotServ, u, BOT_KICK_BAD_TTB, ttb); return MOD_CONT; } } else ci->ttb[TTB_COLORS] = 0; ci->botflags |= BS_KICK_COLORS; if (ci->ttb[TTB_COLORS]) notice_lang(s_BotServ, u, BOT_KICK_COLORS_ON_BAN, ci->ttb[TTB_COLORS]); else notice_lang(s_BotServ, u, BOT_KICK_COLORS_ON); } else { ci->botflags &= ~BS_KICK_COLORS; notice_lang(s_BotServ, u, BOT_KICK_COLORS_OFF); } } else if (!stricmp(option, "FLOOD")) { if (!stricmp(value, "ON")) { char *lines = strtok(NULL, " "); char *secs = strtok(NULL, " "); if (ttb) { ci->ttb[TTB_FLOOD] = strtol(ttb, (char **) NULL, 10); if (errno == ERANGE || errno == EINVAL || ci->ttb[TTB_FLOOD] < 0) { if (debug) { alog("debug: errno is %d ERANGE %d EINVAL %d ttb %d", errno, ERANGE, EINVAL, ci->ttb[TTB_FLOOD]); } ci->ttb[TTB_FLOOD] = 0; notice_lang(s_BotServ, u, BOT_KICK_BAD_TTB, ttb); return MOD_CONT; } } else ci->ttb[TTB_FLOOD] = 0; if (!lines) ci->floodlines = 6; else ci->floodlines = atol(lines); if (ci->floodlines < 2) ci->floodlines = 6; if (!secs) ci->floodsecs = 10; else ci->floodsecs = atol(secs); if (ci->floodsecs < 1 || ci->floodsecs > BSKeepData) ci->floodsecs = 10; ci->botflags |= BS_KICK_FLOOD; if (ci->ttb[TTB_FLOOD]) notice_lang(s_BotServ, u, BOT_KICK_FLOOD_ON_BAN, ci->floodlines, ci->floodsecs, ci->ttb[TTB_FLOOD]); else notice_lang(s_BotServ, u, BOT_KICK_FLOOD_ON, ci->floodlines, ci->floodsecs); } else { ci->botflags &= ~BS_KICK_FLOOD; notice_lang(s_BotServ, u, BOT_KICK_FLOOD_OFF); } } else if (!stricmp(option, "REPEAT")) { if (!stricmp(value, "ON")) { char *times = strtok(NULL, " "); if (ttb) { ci->ttb[TTB_REPEAT] = strtol(ttb, (char **) NULL, 10); if (errno == ERANGE || errno == EINVAL || ci->ttb[TTB_REPEAT] < 0) { if (debug) { alog("debug: errno is %d ERANGE %d EINVAL %d ttb %d", errno, ERANGE, EINVAL, ci->ttb[TTB_REPEAT]); } ci->ttb[TTB_REPEAT] = 0; notice_lang(s_BotServ, u, BOT_KICK_BAD_TTB, ttb); return MOD_CONT; } } else ci->ttb[TTB_REPEAT] = 0; if (!times) ci->repeattimes = 3; else ci->repeattimes = atol(times); if (ci->repeattimes < 2) ci->repeattimes = 3; ci->botflags |= BS_KICK_REPEAT; if (ci->ttb[TTB_REPEAT]) notice_lang(s_BotServ, u, BOT_KICK_REPEAT_ON_BAN, ci->repeattimes, ci->ttb[TTB_REPEAT]); else notice_lang(s_BotServ, u, BOT_KICK_REPEAT_ON, ci->repeattimes); } else { ci->botflags &= ~BS_KICK_REPEAT; notice_lang(s_BotServ, u, BOT_KICK_REPEAT_OFF); } } else if (!stricmp(option, "REVERSES")) { if (!stricmp(value, "ON")) { if (ttb) { ci->ttb[TTB_REVERSES] = strtol(ttb, (char **) NULL, 10); if (errno == ERANGE || errno == EINVAL || ci->ttb[TTB_REVERSES] < 0) { if (debug) { alog("debug: errno is %d ERANGE %d EINVAL %d ttb %d", errno, ERANGE, EINVAL, ci->ttb[TTB_REVERSES]); } ci->ttb[TTB_REVERSES] = 0; notice_lang(s_BotServ, u, BOT_KICK_BAD_TTB, ttb); return MOD_CONT; } } else ci->ttb[TTB_REVERSES] = 0; ci->botflags |= BS_KICK_REVERSES; if (ci->ttb[TTB_REVERSES]) notice_lang(s_BotServ, u, BOT_KICK_REVERSES_ON_BAN, ci->ttb[TTB_REVERSES]); else notice_lang(s_BotServ, u, BOT_KICK_REVERSES_ON); } else { ci->botflags &= ~BS_KICK_REVERSES; notice_lang(s_BotServ, u, BOT_KICK_REVERSES_OFF); } } else if (!stricmp(option, "UNDERLINES")) { if (!stricmp(value, "ON")) { if (ttb) { ci->ttb[TTB_UNDERLINES] = strtol(ttb, (char **) NULL, 10); if (errno == ERANGE || errno == EINVAL || ci->ttb[TTB_UNDERLINES] < 0) { if (debug) { alog("debug: errno is %d ERANGE %d EINVAL %d ttb %d", errno, ERANGE, EINVAL, ci->ttb[TTB_UNDERLINES]); } ci->ttb[TTB_UNDERLINES] = 0; notice_lang(s_BotServ, u, BOT_KICK_BAD_TTB, ttb); return MOD_CONT; } } else ci->ttb[TTB_UNDERLINES] = 0; ci->botflags |= BS_KICK_UNDERLINES; if (ci->ttb[TTB_UNDERLINES]) notice_lang(s_BotServ, u, BOT_KICK_UNDERLINES_ON_BAN, ci->ttb[TTB_UNDERLINES]); else notice_lang(s_BotServ, u, BOT_KICK_UNDERLINES_ON); } else { ci->botflags &= ~BS_KICK_UNDERLINES; notice_lang(s_BotServ, u, BOT_KICK_UNDERLINES_OFF); } } else notice_help(s_BotServ, u, BOT_KICK_UNKNOWN, option); } return MOD_CONT; }