diff options
-rw-r--r-- | irc.h | 1 | ||||
-rw-r--r-- | irc_cap.c | 1 | ||||
-rw-r--r-- | irc_send.c | 6 |
3 files changed, 7 insertions, 1 deletions
@@ -69,6 +69,7 @@ typedef enum { typedef enum { CAP_SASL = (1 << 0), CAP_MULTI_PREFIX = (1 << 1), + CAP_EXTENDED_JOIN = (1 << 2), } irc_cap_flag_t; struct irc_user; @@ -39,6 +39,7 @@ typedef struct { static const cap_info_t supported_caps[] = { {"sasl", CAP_SASL}, {"multi-prefix", CAP_MULTI_PREFIX}, + {"extended-join", CAP_EXTENDED_JOIN}, {NULL}, }; @@ -171,7 +171,11 @@ void irc_send_join(irc_channel_t *ic, irc_user_t *iu) { irc_t *irc = ic->irc; - irc_write(irc, ":%s!%s@%s JOIN :%s", iu->nick, iu->user, iu->host, ic->name); + if (irc->caps & CAP_EXTENDED_JOIN) { + irc_write(irc, ":%s!%s@%s JOIN %s * :%s", iu->nick, iu->user, iu->host, ic->name, iu->fullname); + } else { + irc_write(irc, ":%s!%s@%s JOIN :%s", iu->nick, iu->user, iu->host, ic->name); + } if (iu == irc->user) { if (ic->topic && *ic->topic) { |