use extended-join capability

This commit is contained in:
ailin-nemui 2019-08-13 02:16:22 +02:00
commit 25270e0465
8 changed files with 25 additions and 9 deletions

View file

@ -239,6 +239,7 @@ static void server_init(IRC_SERVER_REC *server)
irc_cap_toggle(server, CAP_SASL, TRUE);
irc_cap_toggle(server, CAP_MULTI_PREFIX, TRUE);
irc_cap_toggle(server, CAP_EXTENDED_JOIN, TRUE);
irc_send_cmd_now(server, "CAP LS " CAP_LS_VERSION);

View file

@ -8,6 +8,7 @@
#define CAP_LS_VERSION "302"
#define CAP_SASL "sasl"
#define CAP_MULTI_PREFIX "multi-prefix"
#define CAP_EXTENDED_JOIN "extended-join"
/* returns IRC_SERVER_REC if it's IRC server, NULL if it isn't */
#define IRC_SERVER(server) \

View file

@ -35,7 +35,7 @@ static int massjoin_max_joins;
static void event_join(IRC_SERVER_REC *server, const char *data,
const char *nick, const char *address)
{
char *params, *channel, *ptr;
char *params, *channel, *account, *realname, *ptr;
IRC_CHANNEL_REC *chanrec;
NICK_REC *nickrec;
GSList *nicks, *tmp;
@ -47,7 +47,8 @@ static void event_join(IRC_SERVER_REC *server, const char *data,
return;
}
params = event_get_params(data, 1, &channel);
params = event_get_params(data, 3, &channel, &account, &realname);
ptr = strchr(channel, 7); /* ^G does something weird.. */
if (ptr != NULL) *ptr = '\0';
@ -66,6 +67,11 @@ static void event_join(IRC_SERVER_REC *server, const char *data,
/* add user to nicklist */
nickrec = irc_nicklist_insert(chanrec, nick, FALSE, FALSE, FALSE, TRUE, NULL);
if (*account != '\0' && g_strcmp0(nickrec->account, account) != 0) {
g_free(nickrec->account);
nickrec->account = g_strdup(account);
}
nicklist_set_host(CHANNEL(chanrec), nickrec, address);
if (chanrec->massjoins == 0) {
@ -92,6 +98,11 @@ static void event_join(IRC_SERVER_REC *server, const char *data,
g_slist_free(nicks);
}
if (*realname != '\0' && g_strcmp0(nickrec->realname, realname) != 0) {
g_free(nickrec->realname);
nickrec->realname = g_strdup(realname);
}
chanrec->massjoins++;
}