/* 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); }
/* 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); }
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); }