async def whois(self, nickname):
        """
        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')
        """
        # 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]
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')