void funny_mode(char *from, char **ArgList) { char *mode, *channel; ChannelList *chan = NULL; if (!ArgList[0]) return; channel = ArgList[0]; mode = ArgList[1]; PasteArgs(ArgList, 1); if((channel && in_join_list(channel, from_server)) || get_chan_from_join_list(from_server)) { if (!channel) channel = get_chan_from_join_list(from_server); update_channel_mode(from, channel, from_server, mode, chan); update_all_status(current_window, NULL, 0); got_info(channel, from_server, GOTMODE); } else { if (channel) { set_display_target(channel, LOG_CRAP); if (do_hook(current_numeric, "%s %s %s", from, channel, mode)) put_it("%s", convert_output_format(fget_string_var(FORMAT_MODE_CHANNEL_FSET), "%s %s %s %s %s", update_clock(GET_TIME), from, *FromUserHost ? FromUserHost:"ÿ", channel, mode)); reset_display_target(); } else { if (do_hook(current_numeric, "%s %s", from, mode)) put_it("%s", convert_output_format(fget_string_var(FORMAT_MODE_CHANNEL_FSET), "%s %s %s %s", update_clock(GET_TIME), from, *FromUserHost ? FromUserHost:"ÿ", mode)); } } }
static void p_channel(char *from, char **ArgList) { char *channel; char *user, *host; struct channel *chan = NULL; struct whowas_list *whowas = NULL; int its_me = 0; if (!strcmp(ArgList[0], "0")) { fake(); return; } channel = ArgList[0]; message_from(channel, LOG_CRAP); malloc_strcpy(&joined_nick, from); if (!my_stricmp(from, get_server_nickname(from_server))) { int refnum; Window *old_window = curr_scr_win; int switched = 0; if (!in_join_list(channel, from_server)) add_to_join_list(channel, from_server, curr_scr_win->refnum); else { if (curr_scr_win->refnum != (refnum = get_win_from_join_list(channel, from_server))) { switched = 1; set_current_window(get_window_by_refnum(refnum)); } } if (*channel != '+') send_to_server(SERVER(from_server), "MODE %s\r\nMODE %s b", channel, channel, channel); (void) do_hook(JOIN_ME_LIST, "%s", channel); its_me = 1; chan = add_channel(channel, from_server); if (*channel == '+') { got_info(channel, from_server, GOTBANS); got_info(channel, from_server, GOTMODE); } if (switched) set_current_window(old_window); } else { int op = 0, vo = 0; char *c; /* * Workaround for gratuitous protocol change in ef2.9 */ if ((c = strchr(channel, '\007'))) { for (*c++ = 0; *c; c++) { if (*c == 'o') op = 1; else if (*c == 'v') vo = 1; } } chan = add_to_channel(channel, from, from_server, op, vo, FromUserHost, NULL, NULL); } flush_mode_all(chan); user = m_strdup(FromUserHost); host = strchr(user, '@'); *host++ = '\0'; if (check_ignore(from, FromUserHost, channel, IGNORE_JOINS | IGNORE_CRAP, NULL) != IGNORED && chan) { irc_server *irc_serv = NULL; char *tmp2 = NULL; if (get_int_var(AUTO_NSLOOKUP_VAR) && isdigit(*(host + strlen(host) - 1))) tmp2 = do_nslookup(host); message_from(channel, LOG_CRAP); if ((whowas = check_whosplitin_buffer(from, FromUserHost, channel, 0)) && (irc_serv = check_split_server(whowas->server1))) { if (do_hook(LLOOK_JOIN_LIST, "%s %s", irc_serv->name, irc_serv->link)) put_it("%s", convert_output_format(get_format(FORMAT_NETJOIN_FSET), "%s %s %s %d", update_clock(GET_TIME), irc_serv->name, irc_serv->link, 0)); remove_split_server(whowas->server1); } if (do_hook(JOIN_LIST, "%s %s %s", from, channel, tmp2 ? tmp2 : FromUserHost ? FromUserHost : "UnKnown")) { put_it("%s", convert_output_format(get_format(FORMAT_JOIN_FSET), "%s %s %s %s", update_clock(GET_TIME), from, tmp2 ? tmp2 : FromUserHost ? FromUserHost : "UnKnown", channel)); } message_from(NULL, LOG_CRAP); } set_input_prompt(curr_scr_win, get_string_var(INPUT_PROMPT_VAR), 0); update_all_status(curr_scr_win, NULL, 0); notify_mark(from, user, host, 1); new_free(&user); }
void funny_namreply(char *from, char **Args) { char *type, *channel; static char format[40]; static int last_width = -1; register char *ptr; register char *line; int user_count = 0; PasteArgs(Args, 2); type = Args[0]; channel = Args[1]; line = Args[2]; /* protocol violation by server */ if (!channel || !line) return; ptr = line; while (*ptr) { while (*ptr && (*ptr != ' ')) ptr++; user_count++; while (*ptr && (*ptr == ' ')) ptr++; } if (in_join_list(channel, from_server)) { set_display_target(channel, LOG_CRAP); if (do_hook(current_numeric, "%s %s %s %s", from, type, channel,line) && do_hook(NAMES_LIST, "%s %s", channel, line) && get_int_var(SHOW_CHANNEL_NAMES_VAR)) { put_it("%s", convert_output_format(fget_string_var(FORMAT_NAMES_FSET), "%s %s %d",update_clock(GET_TIME), channel, user_count)); print_funny_names(line); } if ((user_count == 1) && (*line == '@')) { ChannelList *chan; if ((chan = lookup_channel(channel, from_server, CHAN_NOUNLINK))) if ((ptr = get_cset_str_var(chan->csets, CHANMODE_CSET))) my_send_to_server(from_server, "MODE %s %s", channel, ptr); } got_info(channel, from_server, GOTNAMES); reset_display_target(); return; } if (last_width != get_int_var(CHANNEL_NAME_WIDTH_VAR)) { if ((last_width = get_int_var(CHANNEL_NAME_WIDTH_VAR)) != 0) sprintf(format, "%%s: %%-%u.%us %%s", (unsigned char) last_width, (unsigned char) last_width); else strcpy(format, "%s: %s\t%s"); } if (funny_min && (user_count < funny_min)) return; else if (funny_max && (user_count > funny_max)) return; if ((funny_flags & FUNNY_PRIVATE) && (*type == '=')) return; if ((funny_flags & FUNNY_PUBLIC) && ((*type == '*') || (*type == '@'))) return; if (type && channel) { if (match_str) { if (wild_match(match_str, channel) == 0) return; } if (do_hook(current_numeric, "%s %s %s %s", from, type, channel, line) && do_hook(NAMES_LIST, "%s %s", channel, line)) { set_display_target(channel, LOG_CRAP); if (fget_string_var(FORMAT_NAMES_FSET)) { put_it("%s", convert_output_format(fget_string_var(FORMAT_NAMES_FSET), "%s %s %d", update_clock(GET_TIME), channel, user_count)); print_funny_names(line); } else { switch (*type) { case '=': if (last_width &&(strlen(channel) > last_width)) { channel[last_width-1] = '>'; channel[last_width] = (char) 0; } put_it(format, "Pub", channel, line); break; case '*': put_it(format, "Prv", channel, line); break; case '@': put_it(format, "Sec", channel, line); break; } } reset_display_target(); } } }