Пример #1
0
/* SYNTAX: PART [<channels>] [<message>] */
static void cmd_part(const char *data, IRC_SERVER_REC *server,
		     WI_ITEM_REC *item)
{
	char *channame, *msg;
	char *recoded = NULL;
	void *free_arg;

        CMD_IRC_SERVER(server);

	if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_GETREST |
			    PARAM_FLAG_OPTCHAN, item, &channame, &msg))
		return;
	if (*channame == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);

	if (*msg == '\0') msg = (char *) settings_get_str("part_message");

        if (server->cmdcount > MAX_COMMANDS_ON_PART_UNTIL_PURGE)
		irc_server_purge_output(server, channame);

	if (*msg != '\0')
		recoded = recode_out(SERVER(server), msg, channame);
	irc_send_cmdv(server, ! recoded ? "PART %s" : "PART %s :%s",
		      channame, recoded);

	g_free(recoded);
	cmd_params_free(free_arg);
}
Пример #2
0
/* SYNTAX: SERVER PURGE [<target>] */
static void cmd_server_purge(const char *data, IRC_SERVER_REC *server)
{
        char *target;
	void *free_arg;

        CMD_IRC_SERVER(server);

	if (!cmd_get_params(data, &free_arg, 1, &target))
		return;

	irc_server_purge_output(server, *target == '\0' ? NULL : target);

	cmd_params_free(free_arg);
}
Пример #3
0
static void event_kick(IRC_SERVER_REC *server, const char *data)
{
    CHANNEL_REC *chanrec;
    char *params, *channel, *nick, *reason;

    g_return_if_fail(data != NULL);

    params = event_get_params(data, 3, &channel, &nick, &reason);

    if (g_ascii_strcasecmp(nick, server->nick) != 0) {
        /* someone else was kicked, no need to do anything */
        g_free(params);
        return;
    }

    chanrec = channel_find(SERVER(server), channel);
    if (chanrec != NULL) {
        irc_server_purge_output(server, channel);
        chanrec->kicked = TRUE;
        channel_destroy(chanrec);
    }

    g_free(params);
}