From 6accf509915244aa89f58bd89d95f503c95299b9 Mon Sep 17 00:00:00 2001 From: David Leadbeater Date: Thu, 26 Jun 2014 00:31:14 +0100 Subject: Use PREFIX from 005 to decide if a nick flag is of op level Fixes #61. --- src/irc/core/irc-nicklist.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src') diff --git a/src/irc/core/irc-nicklist.c b/src/irc/core/irc-nicklist.c index cbf8b9fa..da9d4aca 100644 --- a/src/irc/core/irc-nicklist.c +++ b/src/irc/core/irc-nicklist.c @@ -106,6 +106,7 @@ static void event_names_list(IRC_SERVER_REC *server, const char *data) char *params, *type, *channel, *names, *ptr, *host; int op, halfop, voice; char prefixes[MAX_USER_PREFIXES+1]; + const char *nick_flags, *nick_flag_cur, *nick_flag_op; g_return_if_fail(data != NULL); @@ -117,6 +118,8 @@ static void event_names_list(IRC_SERVER_REC *server, const char *data) g_free(params); return; } + nick_flags = server->get_nick_flags(SERVER(server)); + nick_flag_op = strchr(nick_flags, '@'); /* type = '=' = public, '*' = private, '@' = secret. @@ -158,6 +161,15 @@ static void event_names_list(IRC_SERVER_REC *server, const char *data) case '+': voice = TRUE; break; + default: + /* If this flag is listed higher than op (in the + * isupport PREFIX reply), then count this user + * as an op. */ + nick_flag_cur = strchr(nick_flags, *ptr); + if (nick_flag_cur && nick_flag_op && nick_flag_cur < nick_flag_op) { + op = TRUE; + } + break; } ptr++; } -- cgit v1.2.3