⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 outbound.c

📁 The major functionality added in this release includes: - Rootless mode in X11 - Widget Templt
💻 C
📖 第 1 页 / 共 5 页
字号:
	 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 + -