//request member list
chan->chanbot = user;
struct ChanUser *chanuser = addChanUser(chan, user); //it must be a bot
- get_userlist(chan, got_channel_userlist, chanuser);
+ get_userlist_with_invisible(chan, got_channel_userlist, chanuser);
putsock(client, "MODE %s", chan->name);
putsock(client, "MODE %s +b", chan->name);
} else if(!isUserOnChan(user, chan) && ((chan->flags & CHANFLAG_RECEIVED_USERLIST) || isBot(user))) {
struct UserNode *user = getUserByNick(argv[4]);
struct ChanUser *chanuser;
- if((chanuserflags & CHANUSERFLAG_INVISIBLE) && !isBot(user)) {
+ if((chanuserflags & CHANUSERFLAG_INVISIBLE) && (!user || !isBot(user))) {
user = createTempUser(argv[4]);
user->flags |= USERFLAG_ISTMPUSER;
chan->flags |= CHANFLAG_HAVE_INVISIBLES;
if(!(chanuser = getChanUser(user, chan))) {
chanuser = addChanUser(chan, user);
}
- chanuser->flags = (chanuser->flags & ~CHANUSERFLAG_OPPED_OR_VOICED) | chanuserflags;
+ chanuser->flags = (chanuser->flags & ~(CHANUSERFLAG_OPPED_OR_VOICED | CHANUSERFLAG_INVISIBLE)) | chanuserflags;
}
user->flags = (user->flags & ~USERFLAG_ISIRCOP) | userflags;
user->last_who = time(0);