def _duplicate_session(sio: ServerApp, session: GameSession, new_title: str): _verify_has_admin(sio, session.id, None) current_user = sio.get_current_user() _add_audit_entry(sio, session, f"Duplicated session as {new_title}") with database.db.atomic(): new_session: GameSession = GameSession.create( name=new_title, password=session.password, creator=current_user, layout_description_json=session.layout_description_json, seed_hash=session.seed_hash, dev_features=session.dev_features, ) for preset in session.presets: assert isinstance(preset, GameSessionPreset) GameSessionPreset.create( session=new_session, row=preset.row, preset=preset.preset, ) GameSessionMembership.create( user=current_user, session=new_session, row=None, admin=True, connection_state="Offline", ) GameSessionAudit.create( session=new_session, user=current_user, message=f"Duplicated from {session.name}", )
def create_game_session(sio: ServerApp, session_name: str): current_user = sio.get_current_user() with database.db.atomic(): new_session = GameSession.create( name=session_name, password=None, creator=current_user, ) GameSessionPreset.create( session=new_session, row=0, preset=json.dumps(PresetManager(None).default_preset.as_json)) membership = GameSessionMembership.create(user=sio.get_current_user(), session=new_session, row=0, admin=True) sio.join_game_session(membership) return new_session.create_session_entry()