def _get_preset(preset_json: dict) -> VersionedPreset:
    try:
        preset = VersionedPreset(preset_json)
        preset.get_preset()  # test if valid
        return preset
    except Exception as e:
        raise InvalidAction(f"invalid preset: {e}")
    def from_json(cls, data) -> "GameSessionEntry":
        data = convert_to_raw_python(BinaryGameSessionEntry.parse(data))

        player_entries = [
            PlayerSessionEntry.from_json(player_json)
            for player_json in data["players"]
        ]
        return GameSessionEntry(
            id=data["id"],
            name=data["name"],
            presets=[
                VersionedPreset(json.loads(preset_json))
                for preset_json in data["presets"]
            ],
            players={
                player_entry.id: player_entry
                for player_entry in player_entries
            },
            game_details=GameDetails.from_json(data["game_details"])
            if data["game_details"] is not None else None,
            state=GameSessionState(data["state"]),
            generation_in_progress=data["generation_in_progress"],
            allowed_games=[
                RandovaniaGame(game) for game in data["allowed_games"]
            ],
        )
Exemple #3
0
    def from_json_dict(cls, json_dict: dict) -> "LayoutDescription":
        json_dict = description_migration.convert_to_current_version(json_dict)

        if "game_modifications" not in json_dict:
            raise ValueError("Unable to read details of a race game file")

        generator_parameters = GeneratorParameters(
            seed_number=json_dict["info"]["seed"],
            spoiler=json_dict["info"]["has_spoiler"],
            presets=[
                VersionedPreset(preset).get_preset()
                for preset in json_dict["info"]["presets"]
            ],
        )

        return LayoutDescription(
            randovania_version_text=json_dict["info"]["randovania_version"],
            randovania_version_git=bytes.fromhex(
                json_dict["info"]["randovania_version_git"]),
            generator_parameters=generator_parameters,
            all_patches=game_patches_serializer.decode(
                json_dict["game_modifications"], {
                    index: preset.configuration
                    for index, preset in enumerate(
                        generator_parameters.presets)
                }),
            item_order=json_dict["item_order"],
        )
    async def on_message(self, message: discord.Message):
        if message.author == self.bot.user:
            return

        for attachment in message.attachments:
            filename: str = attachment.filename
            if filename.endswith(VersionedPreset.file_extension()):
                data = await attachment.read()
                versioned_preset = VersionedPreset(json.loads(data.decode("utf-8")))
                await reply_for_preset(message, versioned_preset)

            elif filename.endswith(LayoutDescription.file_extension()):
                data = await attachment.read()
                description = LayoutDescription.from_json_dict(json.loads(data.decode("utf-8")))
                await reply_for_layout_description(message, description)

        await look_for_permalinks(message)
Exemple #5
0
 def all_presets(self) -> List[Preset]:
     return [
         VersionedPreset(json.loads(preset.preset)).get_preset()
         for preset in sorted(self.presets, key=lambda it: it.row)
     ]