async def METHOD_NAME(self, key, user=None, is_iter=False):
    """ Process a dict lookup message
    """
    logging.debug("Looking up {} for {}".format(key, user))
    orig_key = key
    # Priv and shared keys are handled slighlty differently
    key_type, key = key.decode("utf8").split("/", 1)
    try:
        result = await self.dict.get(
            key, ns=((user.decode("utf8") if user else self.user) if key_type == "priv" else None)
        )
        if type(result) is str:
            response = result.encode("utf8")
        elif type(result) is bytes:
            response = result
        else:
            response = json.dumps(result).encode("ascii")
        return await (self.reply(b"O", orig_key, response) if is_iter else self.reply(b"O", response))
    except KeyError:
        return await self.reply(b"N")