📄 outbound.c
字号:
N_("/NOTIFY [<nick>], lists your notify list or adds someone to it\n")}, {"OP", cmd_op, 1, 1, N_("/OP <nick>, gives chanop status to the nick (needs chanop)\n")}, {"PART", cmd_part, 1, 1, N_("/PART [<channel>] [<reason>], leaves the channel, by default the current one\n")}, {"PING", cmd_ping, 1, 0, N_("/PING <nick | channel>, CTCP pings nick or channel\n")},#ifdef USE_PYTHON {"PKILL", pys_pkill, 0, 0, N_("/PKILL <name>, kills the script of the given name\n")}, {"PLIST", pys_plist, 0, 0, N_("/PLIST, lists the current python scripts\n")}, {"PLOAD", pys_load, 0, 0, N_("/PLOAD loads a python script\n")},#endif {"QUERY", cmd_query, 0, 0, N_("/QUERY <nick>, opens up a new privmsg window to someone\n")}, {"QUIT", cmd_quit, 0, 0, N_("/QUIT [<reason>], disconnects from the current server\n")}, {"QUOTE", cmd_quote, 1, 0, N_("/QUOTE <text>, sends the text in raw form to the server\n")},#ifdef USE_OPENSSL {"RECONNECT", cmd_reconnect, 0, 0, N_("/RECONNECT [-ssl] [<host>] [<port>] [<password>], Can be called just as /RECONNECT to reconnect to the current server or with /RECONNECT ALL to reconnect to all the open servers\n")}, #else {"RECONNECT", cmd_reconnect, 0, 0, N_("/RECONNECT [<host>] [<port>] [<password>], Can be called just as /RECONNECT to reconnect to the current server or with /RECONNECT ALL to reconnect to all the open servers\n")},#endif#ifdef USE_PLUGIN {"RMDLL", cmd_rmdll, 0, 0, N_("/RMDLL <dll name>, unloads a plugin\n")},#endif {"SAY", cmd_say, 0, 0, N_("/SAY <text>, sends the text to the object in the current window\n")},#ifdef USE_PERL {"SCPINFO", cmd_scpinfo, 0, 0, N_("/SCPINFO, Lists some information about current Perl bindings\n")},#endif {"SET", cmd_set, 0, 0, N_("/SET <variable> [<value>]\n")}, {"SETTAB", cmd_settab, 0, 0, ""},#ifdef USE_OPENSSL {"SERVCHAN", cmd_servchan, 0, 0, N_("/SERVCHAN [-ssl] <host> <port> <channel>, connects and joins a channel\n")},#else {"SERVCHAN", cmd_servchan, 0, 0, N_("/SERVCHAN <host> <port> <channel>, connects and joins a channel\n")},#endif#ifdef USE_OPENSSL {"SERVER", cmd_server, 0, 0, N_("/SERVER [-ssl] <host> [<port>] [<password>], connects to a server, the default port is 6667 for normal connections, and 994 for ssl connections.\n")},#else {"SERVER", cmd_server, 0, 0, N_("/SERVER <host> [<port>] [<password>], connects to a server, the default port is 6667.\n")},#endif {"TIMER", cmd_timer, 0, 0, N_("/TIMER <seconds> <command>\n")}, {"TOPIC", cmd_topic, 1, 1, N_("/TOPIC [<topic>], sets the topic if one is given, else shows the current topic\n")}, {"UNIGNORE", cmd_unignore, 0, 0, N_("/UNIGNORE <mask> [QUIET]\n")},#ifdef USE_PERL {"UNLOADALL", cmd_unloadall, 0, 0, N_("/UNLOADALL, Unloads all perl scripts\n")},#endif {"USERLIST", cmd_userlist, 1, 1, 0}, {"WALLCHOP", cmd_wallchop, 1, 1, N_("/WALLCHOP <message>, sends the message to all chanops on the current channel\n")}, {"WALLCHAN", cmd_wallchan, 1, 1, N_("/WALLCHAN <message>, writes the message to all channels\n")}, {"VOICE", cmd_voice, 1, 1, N_("/VOICE <nick>, gives voice status to someone (needs chanop)\n")}, {0, 0, 0, 0, 0}};static voidhelp (struct session *sess, char *helpcmd, int quiet){ int i = 0; while (1) { if (!xc_cmds[i].name) break; if (!strcasecmp (helpcmd, xc_cmds[i].name)) { if (xc_cmds[i].help) { PrintText (sess, _("Usage:\n")); if (*xc_cmds[i].help != '\0') PrintText (sess, _(xc_cmds[i].help)); return; } else { if (!quiet) PrintText (sess, _("\nNo help available on that command.\n")); return; } } i++; } if (!quiet) PrintText (sess, _("No such command.\n"));}static voidsend_channel_modes3 (struct session *sess, char *tbuf, char *word[], int start, int end, char sign, char mode){ int left; int i = start; while (1) { left = end - i; switch (left) { case 0: return; case 1: sprintf (tbuf, "MODE %s %c%c %s\r\n", sess->channel, sign, mode, word[i]); break; case 2: sprintf (tbuf, "MODE %s %c%c%c %s %s\r\n", sess->channel, sign, mode, mode, word[i], word[i + 1]); i++; break; default: sprintf (tbuf, "MODE %s %c%c%c%c %s %s %s\r\n", sess->channel, sign, mode, mode, mode, word[i], word[i + 1], word[i + 2]); i += 2; break; } tcp_send (sess->server, tbuf); if (left < 3) return; i++; }}static voidsend_channel_modes6 (struct session *sess, char *tbuf, char *word[], int start, int end, char sign, char mode){ int left; int i = start; while (1) { left = end - i; switch (left) { case 0: return; case 1: sprintf (tbuf, "MODE %s %c%c %s\r\n", sess->channel, sign, mode, word[i]); i += 1; break; case 2: sprintf (tbuf, "MODE %s %c%c%c %s %s\r\n", sess->channel, sign, mode, mode, word[i], word[i + 1]); i += 2; break; case 3: sprintf (tbuf, "MODE %s %c%c%c%c %s %s %s\r\n", sess->channel, sign, mode, mode, mode, word[i], word[i + 1], word[i + 2]); i += 3; break; case 4: sprintf (tbuf, "MODE %s %c%c%c%c%c %s %s %s %s\r\n", sess->channel, sign, mode, mode, mode, mode, word[i], word[i + 1], word[i + 2], word[i + 3]); i += 4; break; case 5: sprintf (tbuf, "MODE %s %c%c%c%c%c%c %s %s %s %s %s\r\n", sess->channel, sign, mode, mode, mode, mode, mode, word[i], word[i + 1], word[i + 2], word[i + 3], word[i + 4]); i += 5; break; default: sprintf (tbuf, "MODE %s %c%c%c%c%c%c%c %s %s %s %s %s %s\r\n", sess->channel, sign, mode, mode, mode, mode, mode, mode, word[i], word[i + 1], word[i + 2], word[i + 3], word[i + 4], word[i + 5]); i += 6; break; } tcp_send (sess->server, tbuf); if (left < 6) return; }}voidsend_channel_modes (struct session *sess, char *tbuf, char *word[], int start, int end, char sign, char mode){ if (sess->server->six_modes) send_channel_modes6 (sess, tbuf, word, start, end, sign, mode); else send_channel_modes3 (sess, tbuf, word, start, end, sign, mode);}intcmd_addbutton (struct session *sess, char *tbuf, char *word[], char *word_eol[]){ if (*word[2] && *word_eol[3]) { if (sess->type == SESS_DIALOG) { list_addentry (&dlgbutton_list, word_eol[3], word[2]); fe_dlgbuttons_update (sess); } else { list_addentry (&button_list, word_eol[3], word[2]); fe_buttons_update (sess); } return TRUE; } return FALSE;}intcmd_allchannels (struct session *sess, char *tbuf, char *word[], char *word_eol[]){ GSList *list = sess_list; if (!*word_eol[2]) return FALSE; while (list) { sess = list->data; if (sess->type == SESS_CHANNEL && sess->channel[0] && sess->server->connected) { handle_command (word_eol[2], sess, TRUE, FALSE); } list = list->next; } return TRUE;}intcmd_allservers (struct session *sess, char *tbuf, char *word[], char *word_eol[]){ GSList *list; server *serv; if (!*word_eol[2]) return FALSE; list = serv_list; while (list) { serv = list->data; if (serv->connected) handle_command (word_eol[2], serv->front_session, TRUE, FALSE); list = list->next; } return TRUE;}intcmd_away (struct session *sess, char *tbuf, char *word[], char *word_eol[]){ GSList *list; char *reason = word_eol[2]; int back = FALSE; unsigned int gone; if (!(*reason) && sess->server->is_away) { /* mark back */ tcp_send_len (sess->server, "AWAY\r\n", 6); back = TRUE; } else { if (!(*reason)) { if (sess->server->reconnect_away) reason = sess->server->last_away_reason; else /* must manage memory pointed to by random_line() */ reason = random_line (prefs.awayreason); } sprintf (tbuf, "AWAY :%s\r\n", reason); tcp_send (sess->server, tbuf); } if (prefs.show_away_message) { if (back) { gone = time (NULL) - sess->server->away_time; sprintf (tbuf, "/me is back (gone %.2d:%.2d:%.2d)", gone / 3600, (gone / 60) % 60, gone % 60); } else { sprintf (tbuf, "/me is away: %s", reason); } list = sess_list; while (list) { /* am I the right server and not a dialog box */ if (((struct session *) list->data)->server == sess->server && ((struct session *) list->data)->type == SESS_CHANNEL && ((struct session *) list->data)->channel[0]) { handle_command (tbuf, (struct session *) list->data, FALSE, FALSE); } list = list->next; } } if (sess->server->last_away_reason != reason) { free (sess->server->last_away_reason); if (reason == word_eol[2]) sess->server->last_away_reason = strdup (reason); else sess->server->last_away_reason = reason; } return TRUE;}static voidban (session * sess, char *tbuf, char *mask, char *bantypestr, int deop){ int bantype; struct User *user; char *at, *dot, *lastdot; char username[64], fullhost[128], domain[128], *mode, *p2; user = find_name (sess, mask); if (user && user->hostname) /* it's a nickname, let's find a proper ban mask */ { if (deop) { mode = "-o+b"; p2 = user->nick; } else { mode = "+b"; p2 = ""; } mask = user->hostname; at = strchr (mask, '@'); if (!at) return; /* can't happen? */ *at = 0; if (mask[0] == '~' || mask[0] == '+' || mask[0] == '=' || mask[0] == '^' || mask[0] == '-') strcpy (username, mask+1); else strcpy (username, mask); *at = '@'; strcpy (fullhost, at + 1); dot = strchr (fullhost, '.'); if (dot) strcpy (domain, dot); else strcpy (domain, fullhost); if (*bantypestr) bantype = atoi (bantypestr); else bantype = prefs.bantype; tbuf[0] = 0; if (inet_addr (fullhost) != -1) /* "fullhost" is really a IP number */ { lastdot = strrchr (fullhost, '.'); if (!lastdot) return; /* can't happen? */ *lastdot = 0; strcpy (domain, fullhost); *lastdot = '.'; switch (bantype) { case 0: sprintf (tbuf, "MODE %s %s %s *!*@%s.*\r\n", sess->channel, mode, p2, domain); break; case 1: sprintf (tbuf, "MODE %s %s %s *!*@%s\r\n", sess->channel, mode, p2, fullhost); break; case 2: sprintf (tbuf, "MODE %s %s %s *!*%s@%s.*\r\n", sess->channel, mode, p2, username, domain); break; case 3: sprintf (tbuf, "MODE %s %s %s *!*%s@%s\r\n", sess->channel, mode, p2, username, fullhost); break; } } else { switch (bantype) { case 0: sprintf (tbuf, "MODE %s %s %s *!*@*%s\r\n", sess->channel, mode, p2, domain); break; case 1: sprintf (tbuf, "MODE %s %s %s *!*@%s\r\n", sess->channel, mode, p2, fullhost); break; case 2: sprintf (tbuf, "MODE %s %s %s *!*%s@*%s\r\n", sess->channel, mode, p2, username, domain); break; case 3: sprintf (tbuf, "MODE %s %s %s *!*%s@%s\r\n", sess->channel, mode, p2, username, fullhost); break; } } } else { sprintf (tbuf, "MODE %s +b %s\r\n", sess->channel, mask); } tcp_send (sess->server, tbuf);}intcmd_ban (struct session *sess, char *tbuf, char *word[], char *word_eol[]){ char *mask = word[2]; if (*mask) { ban (sess, tbuf, mask, word[3], 0); } else { sprintf (tbuf, "MODE %s +b\r\n", sess->channel); /* banlist */ tcp_send (sess->server, tbuf); } return TRUE;}intcmd_unban (struct session *sess, char *tbuf, char *word[], char *word_eol[]){ /* Allow more than one mask in /unban -- tvk */ int i = 2; while (1) { if (!*word[i]) { if (i == 2) return FALSE; send_channel_modes (sess, tbuf, word, 2, i, '-', 'b'); return TRUE; } i++; }}intcmd_clear (struct session *sess, char *tbuf, char *word[], char *word_eol[]){ GSList *list = sess_list; char *reason = word_eol[2]; if (strncasecmp (reason, "all", 3) == 0) { while (list) { sess = list->data; if (sess->type != SESS_SHELL && !sess->nick_said) fe_text_clear (list->data); list = list->next; } } else { fe_text_clear (sess); } return TRUE;}intcmd_close (struct session *sess, char *tbuf, char *word[], char *word_eol[]){ GSList *list; if (strcmp (word[2], "-m") == 0) { list = sess_list; while (list) { sess = list->data; list = list->next; if (sess->type == SESS_DIALOG) fe_close_window (sess); } } else { if (*word_eol[2]) sess->quitreason = word_eol[2]; fe_close_window (sess); } return TRUE;}intcmd_ctcp (struct session *sess, char *tbuf, char *word[], char *word_eol[]){ char *to = word[2]; if (*to) { char *msg = word_eol[3]; if (*msg) { char *cmd = msg; while (1) { if (*cmd == ' ' || *cmd == 0) break; *cmd = toupper (*cmd); cmd++; } sprintf (tbuf, "PRIVMSG %s :\001%s\001\r\n", to, msg); tcp_send (sess->server, tbuf); EMIT_SIGNAL (XP_TE_CTCPSEND, sess, to, msg, NULL, NULL, 0); return TRUE; } } return FALSE;}intcmd_country (struct session *sess, char *tbuf, char *word[], char *word_eol[]){ char *code = word[2]; if (*code) { sprintf (tbuf, "%s = %s\n", code, country (code)); PrintText (sess, tbuf); return TRUE; } return FALSE;}intcmd_cycle (struct session *sess, char *tbuf, char *word[], char *word_eol[]){ char *key = sess->channelkey; char *chan = sess->channel; if (*chan && sess->type == SESS_CHANNEL) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -