Ejemplo n.º 1
0
static void event_privmsg(IRC_SERVER_REC *server, const char *data,
			  const char *nick, const char *addr)
{
	char *params, *target, *msg, *recoded;

	g_return_if_fail(data != NULL);

	params = event_get_params(data, 2 | PARAM_FLAG_GETREST, &target, &msg);
	if (nick == NULL) nick = server->real_address;
	if (addr == NULL) addr = "";

	if (fe_channel_is_opchannel(server, target)) {
		/* Hybrid 6 feature, send msg to all ops in channel */
		target = (char *)fe_channel_skip_prefix(server, target);
		recoded = recode_in(SERVER(server), msg, target);
		signal_emit("message irc op_public", 5,
			    server, recoded, nick, addr,
			    get_visible_target(server, target));
	} else {
		recoded = recode_in(SERVER(server), msg, server_ischannel(SERVER(server), target) ? target : nick);
		signal_emit(server_ischannel(SERVER(server), target) ?
			    "message public" : "message private", 5,
			    server, recoded, nick, addr,
			    get_visible_target(server, target));
	}

	g_free(params);
	g_free(recoded);
}
Ejemplo n.º 2
0
/* received msg to all ops in channel */
static void sig_message_irc_op_public(SERVER_REC *server, const char *msg,
				      const char *nick, const char *address,
				      const char *target)
{
	char *nickmode, *optarget, *prefix;
	const char *cleantarget;

	/* only skip here so the difference can be stored in prefix */
	cleantarget = fe_channel_skip_prefix(IRC_SERVER(server), target);
	prefix = g_strndup(target, cleantarget - target);

	/* and clean the rest here */
	cleantarget = get_visible_target(IRC_SERVER(server), cleantarget);

	nickmode = channel_get_nickmode(channel_find(server, cleantarget),
					nick);

	optarget = g_strconcat(prefix, cleantarget, NULL);

	printformat_module("fe-common/core", server, cleantarget,
			   MSGLEVEL_PUBLIC,
			   TXT_PUBMSG_CHANNEL,
			   nick, optarget, msg, nickmode);
	g_free(nickmode);
	g_free(optarget);
	g_free(prefix);
}
Ejemplo n.º 3
0
static void event_ban_list(IRC_SERVER_REC *server, const char *data)
{
    IRC_CHANNEL_REC *chanrec;
    BAN_REC *banrec;
    const char *channel;
    char *params, *ban, *setby, *tims;
    long secs;

    g_return_if_fail(data != NULL);

    params = event_get_params(data, 5, NULL, &channel,
                              &ban, &setby, &tims);
    secs = *tims == '\0' ? 0 :
           (long) (time(NULL) - atol(tims));

    chanrec = irc_channel_find(server, channel);
    banrec = chanrec == NULL ? NULL : banlist_find(chanrec->banlist, ban);

    channel = get_visible_target(server, channel);
    printformat(server, channel, MSGLEVEL_CRAP,
                *setby == '\0' ? IRCTXT_BANLIST : IRCTXT_BANLIST_LONG,
                banrec == NULL ? 0 : g_slist_index(chanrec->banlist, banrec)+1,
                channel, ban, setby, secs);

    g_free(params);
}
Ejemplo n.º 4
0
static void ctcp_action(IRC_SERVER_REC *server, const char *data,
			const char *nick, const char *addr,
			const char *target)
{
	g_return_if_fail(data != NULL);
	signal_emit("message irc action", 5,
		    server, data, nick, addr,
		    get_visible_target(server, target));
}
Ejemplo n.º 5
0
static void event_invite(IRC_SERVER_REC *server, const char *data,
			 const char *nick, const char *addr)
{
	char *params, *channel;

	g_return_if_fail(data != NULL);

	params = event_get_params(data, 2, NULL, &channel);
	signal_emit("message invite", 4,
		    server, get_visible_target(server, channel), nick, addr);
	g_free(params);
}
Ejemplo n.º 6
0
static void event_privmsg(IRC_SERVER_REC *server, const char *data,
			  const char *nick, const char *addr)
{
	char *params, *target, *msg, *recoded;
	char *chantypes;

	g_return_if_fail(data != NULL);

	params = event_get_params(data, 2 | PARAM_FLAG_GETREST, &target, &msg);
	if (nick == NULL) nick = server->real_address;
	if (addr == NULL) addr = "";
	if (
	    (*target == '@' || *target == '+' || *target == '%') &&
	    ischannel(target[1]) &&
	    server &&
	    server->prefix[(unsigned char)*target] &&
	    (
		(chantypes = g_hash_table_lookup(server->isupport, "CHANTYPES")) ||
		(chantypes = "#&"),
		!strchr(chantypes, *target)
	    )
	) {
		/* Hybrid 6 feature, send msg to all ops/voiced in channel */
		recoded = recode_in(SERVER(server), msg, target+1);
		signal_emit(*target == '%' ? "message irc halfop_public" :
			    *target == '+' ? "message irc voice_public" :
			    "message irc op_public", 5,
			    server, recoded, nick, addr,
			    get_visible_target(server, target+1));
	} else {
		recoded = recode_in(SERVER(server), msg, ischannel(*target) ? target : nick);
		signal_emit(ischannel(*target) ?
			    "message public" : "message private", 5,
			    server, recoded, nick, addr,
			    get_visible_target(server, target));
	}

	g_free(params);
	g_free(recoded);
}
Ejemplo n.º 7
0
static void event_topic(IRC_SERVER_REC *server, const char *data,
			const char *nick, const char *addr)
{
	char *params, *channel, *topic;

	g_return_if_fail(data != NULL);

	params = event_get_params(data, 2 | PARAM_FLAG_GETREST,
				  &channel, &topic);
	signal_emit("message topic", 5, server,
		    get_visible_target(server, channel), topic, nick, addr);
	g_free(params);
}
Ejemplo n.º 8
0
static void event_chanserv_url(IRC_SERVER_REC *server, const char *data)
{
    const char *channel;
    char *params, *url;

    g_return_if_fail(data != NULL);

    params = event_get_params(data, 3, NULL, &channel, &url);
    channel = get_visible_target(server, channel);
    printformat(server, channel, MSGLEVEL_CRAP,
                IRCTXT_CHANNEL_URL, channel, url);
    g_free(params);
}
Ejemplo n.º 9
0
static void ctcp_action(IRC_SERVER_REC *server, const char *data,
			const char *nick, const char *addr,
			const char *target)
{
	char *recoded;

	g_return_if_fail(data != NULL);
	recoded = recode_in(SERVER(server), data, target);
	signal_emit("message irc action", 5,
		    server, recoded, nick, addr,
		    get_visible_target(server, target));
	g_free(recoded);
}
Ejemplo n.º 10
0
static void event_channel_mode(IRC_SERVER_REC *server, const char *data)
{
    const char *channel;
    char *params, *mode;

    g_return_if_fail(data != NULL);

    params = event_get_params(data, 3 | PARAM_FLAG_GETREST,
                              NULL, &channel, &mode);
    channel = get_visible_target(server, channel);
    printformat(server, channel, MSGLEVEL_CRAP,
                IRCTXT_CHANNEL_MODE, channel, g_strchomp(mode));
    g_free(params);
}
Ejemplo n.º 11
0
static void event_kick(IRC_SERVER_REC *server, const char *data,
		       const char *kicker, const char *addr)
{
	char *params, *channel, *nick, *reason;

	g_return_if_fail(data != NULL);

	params = event_get_params(data, 3 | PARAM_FLAG_GETREST,
				  &channel, &nick, &reason);
	signal_emit("message kick", 6,
		    server, get_visible_target(server, channel),
		    nick, kicker, addr, reason);
	g_free(params);
}
Ejemplo n.º 12
0
static void event_part(IRC_SERVER_REC *server, const char *data,
		       const char *nick, const char *addr)
{
	char *params, *channel, *reason, *recoded;

	g_return_if_fail(data != NULL);

	params = event_get_params(data, 2 | PARAM_FLAG_GETREST,
				  &channel, &reason);
	recoded = recode_in(SERVER(server), reason, channel);
	signal_emit("message part", 5, server,
		    get_visible_target(server, channel), nick, addr, recoded);
	g_free(params);
	g_free(recoded);
}
Ejemplo n.º 13
0
static void event_join(IRC_SERVER_REC *server, const char *data,
		       const char *nick, const char *addr)
{
	char *params, *channel, *tmp;

	g_return_if_fail(data != NULL);

	params = event_get_params(data, 1, &channel);
	tmp = strchr(channel, 7); /* ^G does something weird.. */
	if (tmp != NULL) *tmp = '\0';

	signal_emit("message join", 4, server,
		    get_visible_target(server, channel), nick, addr);
	g_free(params);
}
Ejemplo n.º 14
0
static void event_topic_get(IRC_SERVER_REC *server, const char *data)
{
    const char *channel;
    char *params, *topic, *recoded;

    g_return_if_fail(data != NULL);

    params = event_get_params(data, 3, NULL, &channel, &topic);
    recoded = recode_in(SERVER(server), topic, channel);
    channel = get_visible_target(server, channel);
    printformat(server, channel, MSGLEVEL_CRAP,
                IRCTXT_TOPIC, channel, recoded);
    g_free(params);
    g_free(recoded);
}
Ejemplo n.º 15
0
static void event_mode(IRC_SERVER_REC *server, const char *data,
		       const char *nick, const char *addr)
{
	char *params, *channel, *mode;

	g_return_if_fail(data != NULL);

	params = event_get_params(data, 2 | PARAM_FLAG_GETREST,
				  &channel, &mode);

	signal_emit("message irc mode", 5,
		    server, get_visible_target(server, channel),
		    nick, addr, g_strchomp(mode));
	g_free(params);
}
Ejemplo n.º 16
0
static void event_privmsg(IRC_SERVER_REC *server, const char *data,
			  const char *nick, const char *addr)
{
	char *params, *target, *msg;

	g_return_if_fail(data != NULL);

	params = event_get_params(data, 2 | PARAM_FLAG_GETREST, &target, &msg);
	if (nick == NULL) nick = server->real_address;
	if (addr == NULL) addr = "";
	if (*target == '@' && ischannel(target[1])) {
		/* Hybrid 6 feature, send msg to all ops in channel */
		signal_emit("message irc op_public", 5,
			    server, msg, nick, addr,
			    get_visible_target(server, target+1));
	} else {
		signal_emit(ischannel(*target) ?
			    "message public" : "message private", 5,
			    server, msg, nick, addr,
			    get_visible_target(server, target));
	}

	g_free(params);
}
Ejemplo n.º 17
0
static void event_channel_created(IRC_SERVER_REC *server, const char *data)
{
    const char *channel;
    char *params, *createtime, *timestr;

    g_return_if_fail(data != NULL);

    params = event_get_params(data, 3, NULL, &channel, &createtime);

    timestr = my_asctime((time_t) atol(createtime));
    channel = get_visible_target(server, channel);
    printformat(server, channel, MSGLEVEL_CRAP,
                IRCTXT_CHANNEL_CREATED, channel, timestr);
    g_free(timestr);
    g_free(params);
}
Ejemplo n.º 18
0
static void event_notice(IRC_SERVER_REC *server, const char *data,
			 const char *nick, const char *addr)
{
	char *params, *target, *msg;

	g_return_if_fail(data != NULL);

	params = event_get_params(data, 2 | PARAM_FLAG_GETREST, &target, &msg);
	if (nick == NULL) {
		nick = server->real_address == NULL ?
			server->connrec->address :
			server->real_address;
	}

	signal_emit("message irc notice", 5, server, msg, nick, addr,
		    get_visible_target(server, target));
	g_free(params);
}
Ejemplo n.º 19
0
static void event_invite_list(IRC_SERVER_REC *server, const char *data)
{
    const char *channel;
    char *params, *invite, *setby, *tims;
    long secs;

    g_return_if_fail(data != NULL);

    params = event_get_params(data, 5, NULL, &channel, &invite,
                              &setby, &tims);
    secs = *tims == '\0' ? 0 :
           (long) (time(NULL) - atol(tims));

    channel = get_visible_target(server, channel);
    printformat(server, channel, MSGLEVEL_CRAP,
                *setby == '\0' ? IRCTXT_INVITELIST : IRCTXT_INVITELIST_LONG,
                channel, invite, setby, secs);
    g_free(params);
}
Ejemplo n.º 20
0
static void event_topic_info(IRC_SERVER_REC *server, const char *data)
{
    const char *channel;
    char *params, *timestr, *bynick, *byhost, *topictime;

    g_return_if_fail(data != NULL);

    params = event_get_params(data, 4, NULL, &channel,
                              &bynick, &topictime);

    timestr = my_asctime((time_t) atol(topictime));

    byhost = strchr(bynick, '!');
    if (byhost != NULL)
        *byhost++ = '\0';

    channel = get_visible_target(server, channel);
    printformat(server, channel, MSGLEVEL_CRAP, IRCTXT_TOPIC_INFO,
                bynick, timestr, byhost == NULL ? "" : byhost);
    g_free(timestr);
    g_free(params);
}