*** VERSION 5.5.0 ***
[NeonServV5.git] / src / WHOHandler.c
index 743896ee39d3572756e66a96f057dea7c6071b4b..7a8a3548ea359fa5aee74e48fc84e25e1d4ab8f5 100644 (file)
@@ -1,4 +1,4 @@
-/* WHOHandler.c - NeonServ v5.3
+/* WHOHandler.c - NeonServ v5.5
  * Copyright (C) 2011-2012  Philipp Kreil (pk910)
  * 
  * This program is free software: you can redistribute it and/or modify
@@ -285,11 +285,9 @@ static void _recv_whohandler_354(struct ClientSocket *client, char **argv, unsig
         
         struct UserNode *user = getUserByNick(argv[5]);
         struct ChanUser *chanuser;
-        if((chanuserflags & CHANUSERFLAG_INVISIBLE)) {
-            if(!user) {
-                user = createTempUser(argv[5]);
-                user->flags |= USERFLAG_ISTMPUSER;
-            }
+        if((chanuserflags & CHANUSERFLAG_INVISIBLE) && (!user || (user && !isBot(user)))) {
+            user = createTempUser(argv[5]); //always add a temponary user to prevent cache problems when the user joins right now (while it's stored in our cache as being invisible)
+            user->flags |= USERFLAG_ISTMPUSER;
             chan->flags |= CHANFLAG_HAVE_INVISIBLES;
             chanuser = addInvisibleChanUser(chan, user);
             chanuser->flags = (chanuser->flags & ~CHANUSERFLAG_OPPED_OR_VOICED) | chanuserflags;