def get_room_items(self, uid, room): if "_" in room: raise exceptions.WrongRoom() items = [] for name in self.redis.smembers(f"rooms:{uid}:{room}:items"): item = self.redis.lrange(f"rooms:{uid}:{room}:items:{name}", 0, -1) name, lid = name.split("_") if len(item) == 5: items.append({ "tpid": name, "x": float(item[0]), "y": float(item[1]), "z": float(item[2]), "d": int(item[3]), "lid": int(lid), "rid": item[4] }) else: items.append({ "tpid": name, "x": float(item[0]), "y": float(item[1]), "z": float(item[2]), "d": int(item[3]), "lid": int(lid) }) return items
async def get_room_items(self, uid, room): if "_" in room: raise exceptions.WrongRoom() names = [] pipe = self.redis.pipeline() spipe = self.redis.pipeline() for name in await self.redis.smembers(f"rooms:{uid}:{room}:items"): pipe.lrange(f"rooms:{uid}:{room}:items:{name}", 0, -1) spipe.smembers(f"rooms:{uid}:{room}:items:{name}:options") names.append(name) result = await pipe.execute() options = await spipe.execute() i = 0 items = [] for name in names: name, lid = name.split("_") item = result[i] option = options[i] try: tmp = { "tpid": name, "x": float(item[0]), "y": float(item[1]), "z": float(item[2]), "d": int(item[3]), "lid": int(lid) } except IndexError: await self.redis.srem(f"rooms:{uid}:{room}:items", f"{name}_{lid}") await self.redis.delete(f"rooms:{uid}:{room}:items:" f"{name}_{lid}") continue for kek in option: if kek == "clrs": item = await self.redis.smembers(f"rooms:{uid}:{room}:" f"items:{name}_{lid}:" f"{kek}") else: item = await self.redis.get(f"rooms:{uid}:{room}:items:" f"{name}_{lid}:{kek}") tmp[kek] = item items.append(tmp) i += 1 return items