async def claim_invite(request): user = await check_authorized(request) data = await request.json() room = Room.get_or_none(invitation_code=data["code"]) if room is None: return web.HTTPNotFound() else: if user != room.creator and not PlayerRoom.get_or_none(player=user, room=room): query = PlayerRoom.select().where(PlayerRoom.room == room) try: loc = query.where( PlayerRoom.role == Role.PLAYER)[0].active_location except IndexError: loc = query.where( PlayerRoom.role == Role.DM)[0].active_location PlayerRoom.create(player=user, room=room, role=Role.PLAYER, active_location=loc) for csid in game_state.get_sids(player=room.creator, room=room): await sio.emit( "Room.Info.Players.Add", { "id": user.id, "name": user.name }, room=csid, namespace="/planarally", ) return web.json_response({ "sessionUrl": f"/game/{urllib.parse.quote(room.creator.name, safe='')}/{urllib.parse.quote(room.name, safe='')}" })
async def get_info(request: web.Request): user: User = await check_authorized(request) creator = request.match_info["creator"] roomname = request.match_info["roomname"] room = ( PlayerRoom.select() .join(Room) .join(User) .filter(player=user) .where((User.name == creator) & (Room.name == roomname)) ) if len(room) != 1: return web.HTTPNotFound() return web.json_response( { "notes": room[0].notes, "last_played": None if room[0].last_played is None else room[0].last_played.strftime("%Y/%m/%d"), } )
async def set_info(request: web.Request): user: User = await check_authorized(request) creator = request.match_info["creator"] roomname = request.match_info["roomname"] data = await request.json() rooms = ( PlayerRoom.select() .join(Room) .join(User) .filter(player=user) .where((User.name == creator) & (Room.name == roomname)) ) if len(rooms) != 1: return web.HTTPNotFound() room = rooms[0] if "notes" in data: room.notes = data["notes"] room.save() return web.HTTPOk()
async def delete(request: web.Request): user: User = await check_authorized(request) creator = request.match_info["creator"] roomname = request.match_info["roomname"] if creator == user.name: room: Room = Room.get_or_none(name=roomname, creator=user) if room is None: return web.HTTPBadRequest() room.delete_instance(True) return web.HTTPOk() else: pr = ( PlayerRoom.select() .join(Room) .join(User) .filter(player=user) .where((User.name == creator) & (Room.name == roomname)) ) if len(pr) == 1: pr[0].delete_instance(True) return web.HTTPOk() return web.HTTPUnauthorized()