code: async def whois(self, nickname):
          
          # Some IRCDs are wonky and send strange responses for spaces in nicknames.
          # We just check if there's a space in the nickname -- if there is,
          # then we immediately set the future's result to None and don't bother checking.
          if protocol.ARGUMENT_SEPARATOR.search(nickname) is not None:
              result = self.eventloop.create_future()
              result.set_result(None)
              return result
  
          if nickname not in self._pending['whois']:
              await self.rawmsg('WHOIS', nickname)
              self._whois_info[nickname] = {
                  'oper': False,
                  'idle': 0,
                  'away': False,
                  'away_message': None
              }
  
              # Create a future for when the WHOIS requests succeeds.
              self._pending['whois'][nickname] = self.eventloop.create_future()
  
          return await self._pending['whois'][nickname]
docs: Return information about user.
          This is an blocking asynchronous method: it has to be called from a coroutine, as follows:
  
              info = await self.whois('Nick')