kike: implement CAP echo-message
This commit is contained in:
parent
dd17a29445
commit
5c5be1af07
18
kike.c
18
kike.c
|
@ -296,7 +296,8 @@ enum
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
IRC_CAP_MULTI_PREFIX = (1 << 0),
|
IRC_CAP_MULTI_PREFIX = (1 << 0),
|
||||||
IRC_CAP_INVITE_NOTIFY = (1 << 1)
|
IRC_CAP_INVITE_NOTIFY = (1 << 1),
|
||||||
|
IRC_CAP_ECHO_MESSAGE = (1 << 2)
|
||||||
};
|
};
|
||||||
|
|
||||||
struct client
|
struct client
|
||||||
|
@ -1145,7 +1146,8 @@ irc_handle_cap_ls (struct client *c, struct irc_cap_args *a)
|
||||||
a->subcommand, "Ignoring invalid protocol version number");
|
a->subcommand, "Ignoring invalid protocol version number");
|
||||||
|
|
||||||
c->cap_negotiating = true;
|
c->cap_negotiating = true;
|
||||||
client_send (c, "CAP %s LS :multi-prefix invite-notify", a->target);
|
client_send (c, "CAP %s LS :multi-prefix invite-notify echo-message",
|
||||||
|
a->target);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1158,6 +1160,8 @@ irc_handle_cap_list (struct client *c, struct irc_cap_args *a)
|
||||||
str_vector_add (&caps, "multi-prefix");
|
str_vector_add (&caps, "multi-prefix");
|
||||||
if (c->caps_enabled & IRC_CAP_INVITE_NOTIFY)
|
if (c->caps_enabled & IRC_CAP_INVITE_NOTIFY)
|
||||||
str_vector_add (&caps, "invite-notify");
|
str_vector_add (&caps, "invite-notify");
|
||||||
|
if (c->caps_enabled & IRC_CAP_ECHO_MESSAGE)
|
||||||
|
str_vector_add (&caps, "echo-message");
|
||||||
|
|
||||||
char *caps_str = join_str_vector (&caps, ' ');
|
char *caps_str = join_str_vector (&caps, ' ');
|
||||||
str_vector_free (&caps);
|
str_vector_free (&caps);
|
||||||
|
@ -1172,6 +1176,8 @@ irc_decode_capability (const char *name)
|
||||||
return IRC_CAP_MULTI_PREFIX;
|
return IRC_CAP_MULTI_PREFIX;
|
||||||
if (!strcmp (name, "invite-notify"))
|
if (!strcmp (name, "invite-notify"))
|
||||||
return IRC_CAP_INVITE_NOTIFY;
|
return IRC_CAP_INVITE_NOTIFY;
|
||||||
|
if (!strcmp (name, "echo-message"))
|
||||||
|
return IRC_CAP_ECHO_MESSAGE;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1969,6 +1975,11 @@ irc_handle_user_message (const struct irc_message *msg, struct client *c,
|
||||||
c->nickname, c->username, c->hostname, command, target, text);
|
c->nickname, c->username, c->hostname, command, target, text);
|
||||||
if (allow_away_reply && client->away_message)
|
if (allow_away_reply && client->away_message)
|
||||||
irc_send_reply (c, IRC_RPL_AWAY, target, client->away_message);
|
irc_send_reply (c, IRC_RPL_AWAY, target, client->away_message);
|
||||||
|
|
||||||
|
// Acknowledging a message from the client to itself would be silly
|
||||||
|
if (client != c && (c->caps_enabled & IRC_CAP_ECHO_MESSAGE))
|
||||||
|
client_send (c, ":%s!%s@%s %s %s :%s",
|
||||||
|
c->nickname, c->username, c->hostname, command, target, text);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1987,7 +1998,8 @@ irc_handle_user_message (const struct irc_message *msg, struct client *c,
|
||||||
|
|
||||||
char *message = xstrdup_printf (":%s!%s@%s %s %s :%s",
|
char *message = xstrdup_printf (":%s!%s@%s %s %s :%s",
|
||||||
c->nickname, c->username, c->hostname, command, target, text);
|
c->nickname, c->username, c->hostname, command, target, text);
|
||||||
irc_channel_multicast (chan, message, c);
|
irc_channel_multicast (chan, message,
|
||||||
|
(c->caps_enabled & IRC_CAP_ECHO_MESSAGE) ? NULL : c);
|
||||||
free (message);
|
free (message);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue