diff --git a/src/irc/core/irc-nicklist.c b/src/irc/core/irc-nicklist.c index 5863dcc9..75bc17c2 100644 --- a/src/irc/core/irc-nicklist.c +++ b/src/irc/core/irc-nicklist.c @@ -112,19 +112,28 @@ static void event_names_list(IRC_SERVER_REC *server, const char *data) g_free(params); } -static void event_end_of_names(SERVER_REC *server, const char *data) +static void event_end_of_names(IRC_SERVER_REC *server, const char *data) { char *params, *channel; - CHANNEL_REC *chanrec; - + IRC_CHANNEL_REC *chanrec; + NICK_REC *ownnick; + int nicks; + g_return_if_fail(server != NULL); params = event_get_params(data, 2, NULL, &channel); - chanrec = channel_find(server, channel); + chanrec = irc_channel_find(server, channel); if (chanrec != NULL && !chanrec->names_got) { - nicklist_set_own(chanrec, - nicklist_find(chanrec, server->nick)); + ownnick = nicklist_find(CHANNEL(chanrec), server->nick); + if (ownnick == NULL) { + /* stupid server - assume we have ops + if channel is empty */ + nicks = g_hash_table_size(chanrec->nicks); + irc_nicklist_insert(chanrec, server->nick, + nicks == 0, FALSE, FALSE); + } + nicklist_set_own(CHANNEL(chanrec), ownnick); chanrec->chanop = chanrec->ownnick->op; chanrec->names_got = TRUE; signal_emit("channel joined", 1, chanrec);