pssapi 0.2.3__tar.gz → 0.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pssapi-0.2.3 → pssapi-0.3.0}/PKG-INFO +3 -1
- {pssapi-0.2.3 → pssapi-0.3.0}/pyproject.toml +3 -1
- pssapi-0.3.0/src/pssapi/__init__.py +14 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/constants.py +4 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/character_design_raw.py +7 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/room_design_raw.py +7 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/setting_raw.py +21 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/skin_raw.py +7 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/user_raw.py +7 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/skin.py +2 -2
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/__init__.py +6 -0
- pssapi-0.3.0/src/pssapi/enums/pusher_channel_type.py +28 -0
- pssapi-0.3.0/src/pssapi/enums/sprite_type.py +12 -0
- pssapi-0.3.0/src/pssapi/enums/user_source_ads_platform_type.py +10 -0
- pssapi-0.3.0/src/pssapi/exc.py +14 -0
- pssapi-0.3.0/src/pssapi/pusher/__init__.py +7 -0
- pssapi-0.3.0/src/pssapi/pusher/channel.py +46 -0
- pssapi-0.3.0/src/pssapi/pusher/pusher.py +166 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/design_service_raw.py +165 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/setting_service_raw.py +7 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/task_service_raw.py +2 -2
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/user_service_raw.py +9 -9
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/task_service.py +4 -2
- pssapi-0.2.3/src/pssapi/__init__.py +0 -12
- {pssapi-0.2.3 → pssapi-0.3.0}/LICENSE.md +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/README.md +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/client.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/client_base.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/core.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/__init__.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/achievement_design.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/action_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/add_starbux.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/alliance.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/animation.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/asset.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/background.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/battle.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/challenge_design.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/character.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/character_action.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/character_design.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/character_design_action.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/character_part.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/collection_design.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/condition_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/craft_design.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/division_design.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/draw_design.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/entity_base.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/file.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/friend.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/get_catalog_quantity.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/get_current_resources.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/history.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/item.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/item_design.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/item_design_action.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/league.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/list_friends.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/live_ops.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/message.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/metadata/__init__.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/metadata/entity_metadata_base.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/metadata/item_design_metadata.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/metadata/metadata_color.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/metadata/missile_design_metadata.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/metadata/mission_design_metadata.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/metadata/promotion_design_metadata.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/metadata/reward_design_metadata.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/metadata/room_design_metadata.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/metadata/room_design_sprite_metadata.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/metadata/season_design_metadata.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/metadata/skin_metadata.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/metadata/skin_set_metadata.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/metadata/star_system_marker_generator_metadata.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/missile_design.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/mission_design.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/mission_event.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/news_design.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/planet.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/prestige.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/promotion_design.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/__init__.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/achievement_design_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/action_type_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/add_starbux_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/alliance_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/animation_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/asset_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/background_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/battle_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/challenge_design_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/character_action_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/character_design_action_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/character_part_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/character_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/collection_design_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/condition_type_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/craft_design_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/division_design_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/draw_design_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/entity_base_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/file_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/friend_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/get_catalog_quantity_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/get_current_resources_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/history_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/item_design_action_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/item_design_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/item_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/league_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/list_friends_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/live_ops_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/message_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/missile_design_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/mission_design_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/mission_event_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/news_design_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/planet_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/prestige_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/promotion_design_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/research_design_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/research_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/reward_design_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/room_action_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/room_design_purchase_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/room_design_sprite_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/room_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/sale_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/season_design_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/ship_design_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/ship_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/situation_design_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/skin_set_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/sprite_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/star_system_link_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/star_system_marker_generator_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/star_system_marker_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/star_system_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/task_design_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/training_design_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/user_email_password_authorize_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/user_login_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/user_marker_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/user_season_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/user_star_system_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/research.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/research_design.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/reward_design.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/room.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/room_action.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/room_design.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/room_design_purchase.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/room_design_sprite.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/sale.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/season_design.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/setting.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/ship.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/ship_design.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/situation_design.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/skin_set.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/sprite.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/star_system.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/star_system_link.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/star_system_marker.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/star_system_marker_generator.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/task_design.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/training_design.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/user.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/user_email_password_authorize.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/user_login.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/user_marker.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/user_season.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/user_star_system.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/achievement_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/action_type_category.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/action_type_parameter_relativity.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/activity_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/alliance_membership.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/ammo_category.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/animation_effect_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/argument.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/asset_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/authentication_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/availability_mask.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/background_effect_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/background_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/battle_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/behavior_flags.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/category_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/challenge_flags.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/challenge_scoring_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/challenge_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/change_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/character_design_flag_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/character_flags.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/character_part_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/checksum_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/collection_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/completion_value_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/condition_type_availability_mask.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/condition_type_category.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/condition_type_comparison.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/condition_type_parameter.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/cost_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/craft_attack_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/craft_target_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/crew_rarity.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/currency_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/daily_reward_status.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/daily_reward_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/device_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/division_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/download_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/draw_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/duration_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/email_verification_status.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/enhancement_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/environment_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/equipment_mask_flag.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/explosion_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/feature_flag.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/file_download_category.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/flight_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/friend_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/gender_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/generation_flags.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/grid_type_flag.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/guide_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/hazard_category.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/hazard_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/history_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/item_design_flag_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/item_sub_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/item_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/language_key.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/league_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/manufacture_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/marker_flag.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/marker_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/matching_status.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/message_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/missile_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/mission_design_flag.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/mission_design_status.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/mission_design_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/mission_event_flag.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/mission_event_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/module_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/movement_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/objective_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/orbit_anchor_alignment.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/outcome_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/platform_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/production_server.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/progression_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/promotion_design_flag.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/promotion_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/purchase_vip_status.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/race_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/rarity.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/research_design_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/research_state.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/reward_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/room_design_sprite_flag.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/room_effect_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/room_flags.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/room_sprite_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/room_status.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/room_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/sale_item_mask.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/sale_status.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/sale_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/season_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/setting_flags.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/ship_status.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/ship_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/situation_design_flag.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/situation_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/skin_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/special_ability_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/special_rule_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/status.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/str_enum_base.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/target_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/task_category.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/task_design_flags_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/training_animation_style.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/trigger_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/user_flags.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/user_status.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/user_type.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/visibility_flags.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/raw/__init__.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/__init__.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/achievement_service.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/alliance_service.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/animation_service.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/background_service.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/challenge_service.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/character_service.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/collection_service.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/design_service.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/division_service.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/file_service.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/galaxy_service.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/history_service.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/item_service.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/ladder_service.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/league_service.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/live_ops_service.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/market_service.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/message_service.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/mission_service.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/promotion_service.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/__init__.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/achievement_service_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/alliance_service_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/animation_service_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/background_service_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/challenge_service_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/character_service_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/collection_service_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/division_service_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/file_service_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/galaxy_service_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/history_service_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/item_service_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/ladder_service_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/league_service_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/live_ops_service_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/market_service_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/message_service_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/mission_service_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/promotion_service_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/research_service_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/reward_service_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/room_design_sprite_service_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/room_service_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/season_service_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/ship_service_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/situation_service_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/training_service_raw.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/research_service.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/reward_service.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/room_design_sprite_service.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/room_service.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/season_service.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/service_base.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/setting_service.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/ship_service.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/situation_service.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/training_service.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/user_service.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/types.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/utils/__init__.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/utils/convert.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/utils/datetime.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/utils/exceptions.py +0 -0
- {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/utils/parse.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pssapi
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: Wrapper for the Pixel Starships API
|
|
5
5
|
Home-page: https://github.com/PSS-Tools-Development/pssapi.py
|
|
6
6
|
License: MIT
|
|
@@ -16,8 +16,10 @@ Classifier: Programming Language :: Python :: 3
|
|
|
16
16
|
Classifier: Programming Language :: Python :: 3.11
|
|
17
17
|
Classifier: Programming Language :: Python :: 3.11
|
|
18
18
|
Classifier: Topic :: Software Development :: Libraries
|
|
19
|
+
Requires-Dist: APScheduler (>=3.10.4,<4.0.0)
|
|
19
20
|
Requires-Dist: aiohttp (>=3.8.4,<4.0.0)
|
|
20
21
|
Requires-Dist: pytz (>=2022.7.1,<2023.0.0)
|
|
22
|
+
Requires-Dist: websockets (>=12.0,<13.0)
|
|
21
23
|
Project-URL: Bug Tracker, https://github.com/PSS-Tools-Development/pssapi.py/issues
|
|
22
24
|
Project-URL: Changelog, https://github.com/PSS-Tools-Development/pssapi.py/releases
|
|
23
25
|
Description-Content-Type: text/markdown
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "pssapi"
|
|
3
3
|
description = "Wrapper for the Pixel Starships API"
|
|
4
|
-
version = "0.
|
|
4
|
+
version = "0.3.0"
|
|
5
5
|
license = "MIT"
|
|
6
6
|
authors = [
|
|
7
7
|
"The worst. <theworstpss@gmail.com>",
|
|
@@ -30,6 +30,8 @@ build-backend = "poetry.core.masonry.api"
|
|
|
30
30
|
python = "^3.11"
|
|
31
31
|
aiohttp = "^3.8.4"
|
|
32
32
|
pytz = "^2022.7.1"
|
|
33
|
+
websockets = "^12.0"
|
|
34
|
+
APScheduler = "^3.10.4"
|
|
33
35
|
|
|
34
36
|
[tool.poetry.group.dev.dependencies]
|
|
35
37
|
autoflake = "^2.0.1"
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
from . import entities, enums, exc, pusher, raw, utils
|
|
2
|
+
from .client import PssApiClient
|
|
3
|
+
|
|
4
|
+
__all__ = [
|
|
5
|
+
entities.__name__,
|
|
6
|
+
enums.__name__,
|
|
7
|
+
exc.__name__,
|
|
8
|
+
pusher.__name__,
|
|
9
|
+
raw.__name__,
|
|
10
|
+
utils.__name__,
|
|
11
|
+
PssApiClient.__name__,
|
|
12
|
+
]
|
|
13
|
+
|
|
14
|
+
__version__ = "0.3.0"
|
|
@@ -9,3 +9,7 @@ DATETIME_FORMAT_ISO: str = "%Y-%m-%dT%H:%M:%S"
|
|
|
9
9
|
DATETIME_FORMAT_ISO_DETAILED: str = "%Y-%m-%dT%H:%M:%S.%f"
|
|
10
10
|
|
|
11
11
|
DEFAULT_PRODUCTION_SERVER: str = "api.pixelstarships.com"
|
|
12
|
+
|
|
13
|
+
PUSHER_APP_CLUSTER: str = "mt1"
|
|
14
|
+
PUSHER_APP_ID: str = "258a49f843d21115d7f7"
|
|
15
|
+
PUSHER_AUTH_URL: str = f"http://{DEFAULT_PRODUCTION_SERVER}/UserService/PusherAuth"
|
|
@@ -64,6 +64,7 @@ class CharacterDesignRaw:
|
|
|
64
64
|
self._speech_pitch: int = _parse.pss_int(character_design_info.get("SpeechPitch"))
|
|
65
65
|
self._speech_rate: int = _parse.pss_int(character_design_info.get("SpeechRate"))
|
|
66
66
|
self._speech_voice: str = _parse.pss_str(character_design_info.get("SpeechVoice"))
|
|
67
|
+
self._tags: str = _parse.pss_str(character_design_info.get("Tags"))
|
|
67
68
|
self._tap_sound_file_id: int = _parse.pss_int(character_design_info.get("TapSoundFileId"))
|
|
68
69
|
self._training_capacity: int = _parse.pss_int(character_design_info.get("TrainingCapacity"))
|
|
69
70
|
self._walking_speed: int = _parse.pss_int(character_design_info.get("WalkingSpeed"))
|
|
@@ -250,6 +251,10 @@ class CharacterDesignRaw:
|
|
|
250
251
|
def speech_voice(self) -> str:
|
|
251
252
|
return self._speech_voice
|
|
252
253
|
|
|
254
|
+
@property
|
|
255
|
+
def tags(self) -> str:
|
|
256
|
+
return self._tags
|
|
257
|
+
|
|
253
258
|
@property
|
|
254
259
|
def tap_sound_file_id(self) -> int:
|
|
255
260
|
return self._tap_sound_file_id
|
|
@@ -317,6 +322,7 @@ class CharacterDesignRaw:
|
|
|
317
322
|
self.speech_pitch,
|
|
318
323
|
self.speech_rate,
|
|
319
324
|
self.speech_voice,
|
|
325
|
+
self.tags,
|
|
320
326
|
self.tap_sound_file_id,
|
|
321
327
|
self.training_capacity,
|
|
322
328
|
self.walking_speed,
|
|
@@ -372,6 +378,7 @@ class CharacterDesignRaw:
|
|
|
372
378
|
"SpeechPitch": self.speech_pitch,
|
|
373
379
|
"SpeechRate": self.speech_rate,
|
|
374
380
|
"SpeechVoice": self.speech_voice,
|
|
381
|
+
"Tags": self.tags,
|
|
375
382
|
"TapSoundFileId": self.tap_sound_file_id,
|
|
376
383
|
"TrainingCapacity": self.training_capacity,
|
|
377
384
|
"WalkingSpeed": self.walking_speed,
|
|
@@ -60,6 +60,7 @@ class RoomDesignRaw:
|
|
|
60
60
|
self._rows: int = _parse.pss_int(room_design_info.get("Rows"))
|
|
61
61
|
self._sort_index: int = _parse.pss_int(room_design_info.get("SortIndex"))
|
|
62
62
|
self._supported_grid_types: int = _parse.pss_int(room_design_info.get("SupportedGridTypes"))
|
|
63
|
+
self._tags: str = _parse.pss_str(room_design_info.get("Tags"))
|
|
63
64
|
self._target_type: str = _parse.pss_str(room_design_info.get("TargetType"))
|
|
64
65
|
self._upgrade_from_room_design_id: int = _parse.pss_int(room_design_info.get("UpgradeFromRoomDesignId"))
|
|
65
66
|
|
|
@@ -247,6 +248,10 @@ class RoomDesignRaw:
|
|
|
247
248
|
def supported_grid_types(self) -> int:
|
|
248
249
|
return self._supported_grid_types
|
|
249
250
|
|
|
251
|
+
@property
|
|
252
|
+
def tags(self) -> str:
|
|
253
|
+
return self._tags
|
|
254
|
+
|
|
250
255
|
@property
|
|
251
256
|
def target_type(self) -> str:
|
|
252
257
|
return self._target_type
|
|
@@ -303,6 +308,7 @@ class RoomDesignRaw:
|
|
|
303
308
|
self.rows,
|
|
304
309
|
self.sort_index,
|
|
305
310
|
self.supported_grid_types,
|
|
311
|
+
self.tags,
|
|
306
312
|
self.target_type,
|
|
307
313
|
self.upgrade_from_room_design_id,
|
|
308
314
|
)
|
|
@@ -356,6 +362,7 @@ class RoomDesignRaw:
|
|
|
356
362
|
"Rows": self.rows,
|
|
357
363
|
"SortIndex": self.sort_index,
|
|
358
364
|
"SupportedGridTypes": self.supported_grid_types,
|
|
365
|
+
"Tags": self.tags,
|
|
359
366
|
"TargetType": self.target_type,
|
|
360
367
|
"UpgradeFromRoomDesignId": self.upgrade_from_room_design_id,
|
|
361
368
|
}
|
|
@@ -82,6 +82,7 @@ class SettingRaw:
|
|
|
82
82
|
self._loading_subtitle_sprite_id: int = _parse.pss_int(setting_info.get("LoadingSubtitleSpriteId"))
|
|
83
83
|
self._loading_title_sprite_id: int = _parse.pss_int(setting_info.get("LoadingTitleSpriteId"))
|
|
84
84
|
self._loot_modifiers: str = _parse.pss_str(setting_info.get("LootModifiers"))
|
|
85
|
+
self._maintenance_date: _datetime = _parse.pss_datetime(setting_info.get("MaintenanceDate"))
|
|
85
86
|
self._maintenance_message: str = _parse.pss_str(setting_info.get("MaintenanceMessage"))
|
|
86
87
|
self._maintenance_title: str = _parse.pss_str(setting_info.get("MaintenanceTitle"))
|
|
87
88
|
self._marker_generator_design_version: int = _parse.pss_int(setting_info.get("MarkerGeneratorDesignVersion"))
|
|
@@ -91,6 +92,8 @@ class SettingRaw:
|
|
|
91
92
|
self._max_redemption_count_per_month: int = _parse.pss_int(setting_info.get("MaxRedemptionCountPerMonth"))
|
|
92
93
|
self._merchant_ship_exterior_sprite_id: int = _parse.pss_int(setting_info.get("MerchantShipExteriorSpriteId"))
|
|
93
94
|
self._merchant_ship_sprite_id: int = _parse.pss_int(setting_info.get("MerchantShipSpriteId"))
|
|
95
|
+
self._min_purchase_reward_points_for_starbux_trading: int = _parse.pss_int(setting_info.get("MinPurchaseRewardPointsForStarbuxTrading"))
|
|
96
|
+
self._min_trophies_for_starbux_trading: int = _parse.pss_int(setting_info.get("MinTrophiesForStarbuxTrading"))
|
|
94
97
|
self._minimum_client_version: str = _parse.pss_str(setting_info.get("MinimumClientVersion"))
|
|
95
98
|
self._minimum_version: str = _parse.pss_str(setting_info.get("MinimumVersion"))
|
|
96
99
|
self._missile_design_version: int = _parse.pss_int(setting_info.get("MissileDesignVersion"))
|
|
@@ -417,6 +420,10 @@ class SettingRaw:
|
|
|
417
420
|
def loot_modifiers(self) -> str:
|
|
418
421
|
return self._loot_modifiers
|
|
419
422
|
|
|
423
|
+
@property
|
|
424
|
+
def maintenance_date(self) -> _datetime:
|
|
425
|
+
return self._maintenance_date
|
|
426
|
+
|
|
420
427
|
@property
|
|
421
428
|
def maintenance_message(self) -> str:
|
|
422
429
|
return self._maintenance_message
|
|
@@ -453,6 +460,14 @@ class SettingRaw:
|
|
|
453
460
|
def merchant_ship_sprite_id(self) -> int:
|
|
454
461
|
return self._merchant_ship_sprite_id
|
|
455
462
|
|
|
463
|
+
@property
|
|
464
|
+
def min_purchase_reward_points_for_starbux_trading(self) -> int:
|
|
465
|
+
return self._min_purchase_reward_points_for_starbux_trading
|
|
466
|
+
|
|
467
|
+
@property
|
|
468
|
+
def min_trophies_for_starbux_trading(self) -> int:
|
|
469
|
+
return self._min_trophies_for_starbux_trading
|
|
470
|
+
|
|
456
471
|
@property
|
|
457
472
|
def minimum_client_version(self) -> str:
|
|
458
473
|
return self._minimum_client_version
|
|
@@ -750,6 +765,7 @@ class SettingRaw:
|
|
|
750
765
|
self.loading_subtitle_sprite_id,
|
|
751
766
|
self.loading_title_sprite_id,
|
|
752
767
|
self.loot_modifiers,
|
|
768
|
+
self.maintenance_date,
|
|
753
769
|
self.maintenance_message,
|
|
754
770
|
self.maintenance_title,
|
|
755
771
|
self.marker_generator_design_version,
|
|
@@ -759,6 +775,8 @@ class SettingRaw:
|
|
|
759
775
|
self.max_redemption_count_per_month,
|
|
760
776
|
self.merchant_ship_exterior_sprite_id,
|
|
761
777
|
self.merchant_ship_sprite_id,
|
|
778
|
+
self.min_purchase_reward_points_for_starbux_trading,
|
|
779
|
+
self.min_trophies_for_starbux_trading,
|
|
762
780
|
self.minimum_client_version,
|
|
763
781
|
self.minimum_version,
|
|
764
782
|
self.missile_design_version,
|
|
@@ -888,6 +906,7 @@ class SettingRaw:
|
|
|
888
906
|
"LoadingSubtitleSpriteId": self.loading_subtitle_sprite_id,
|
|
889
907
|
"LoadingTitleSpriteId": self.loading_title_sprite_id,
|
|
890
908
|
"LootModifiers": self.loot_modifiers,
|
|
909
|
+
"MaintenanceDate": self.maintenance_date,
|
|
891
910
|
"MaintenanceMessage": self.maintenance_message,
|
|
892
911
|
"MaintenanceTitle": self.maintenance_title,
|
|
893
912
|
"MarkerGeneratorDesignVersion": self.marker_generator_design_version,
|
|
@@ -897,6 +916,8 @@ class SettingRaw:
|
|
|
897
916
|
"MaxRedemptionCountPerMonth": self.max_redemption_count_per_month,
|
|
898
917
|
"MerchantShipExteriorSpriteId": self.merchant_ship_exterior_sprite_id,
|
|
899
918
|
"MerchantShipSpriteId": self.merchant_ship_sprite_id,
|
|
919
|
+
"MinPurchaseRewardPointsForStarbuxTrading": self.min_purchase_reward_points_for_starbux_trading,
|
|
920
|
+
"MinTrophiesForStarbuxTrading": self.min_trophies_for_starbux_trading,
|
|
900
921
|
"MinimumClientVersion": self.minimum_client_version,
|
|
901
922
|
"MinimumVersion": self.minimum_version,
|
|
902
923
|
"MissileDesignVersion": self.missile_design_version,
|
|
@@ -23,6 +23,7 @@ class SkinRaw:
|
|
|
23
23
|
self._original_animation_id: int = _parse.pss_int(skin_info.get("OriginalAnimationId"))
|
|
24
24
|
self._original_sprite_id: int = _parse.pss_int(skin_info.get("OriginalSpriteId"))
|
|
25
25
|
self._race_id: int = _parse.pss_int(skin_info.get("RaceId"))
|
|
26
|
+
self._reference_id: int = _parse.pss_int(skin_info.get("ReferenceId"))
|
|
26
27
|
self._requirement_string: str = _parse.pss_str(skin_info.get("RequirementString"))
|
|
27
28
|
self._root_id: int = _parse.pss_int(skin_info.get("RootId"))
|
|
28
29
|
self._skin_description: str = _parse.pss_str(skin_info.get("SkinDescription"))
|
|
@@ -66,6 +67,10 @@ class SkinRaw:
|
|
|
66
67
|
def race_id(self) -> int:
|
|
67
68
|
return self._race_id
|
|
68
69
|
|
|
70
|
+
@property
|
|
71
|
+
def reference_id(self) -> int:
|
|
72
|
+
return self._reference_id
|
|
73
|
+
|
|
69
74
|
@property
|
|
70
75
|
def requirement_string(self) -> str:
|
|
71
76
|
return self._requirement_string
|
|
@@ -116,6 +121,7 @@ class SkinRaw:
|
|
|
116
121
|
self.original_animation_id,
|
|
117
122
|
self.original_sprite_id,
|
|
118
123
|
self.race_id,
|
|
124
|
+
self.reference_id,
|
|
119
125
|
self.requirement_string,
|
|
120
126
|
self.root_id,
|
|
121
127
|
self.skin_description,
|
|
@@ -139,6 +145,7 @@ class SkinRaw:
|
|
|
139
145
|
"OriginalAnimationId": self.original_animation_id,
|
|
140
146
|
"OriginalSpriteId": self.original_sprite_id,
|
|
141
147
|
"RaceId": self.race_id,
|
|
148
|
+
"ReferenceId": self.reference_id,
|
|
142
149
|
"RequirementString": self.requirement_string,
|
|
143
150
|
"RootId": self.root_id,
|
|
144
151
|
"SkinDescription": self.skin_description,
|
|
@@ -99,6 +99,7 @@ class UserRaw:
|
|
|
99
99
|
self._race_type: str = _parse.pss_str(user_info.get("RaceType"))
|
|
100
100
|
self._ranking: int = _parse.pss_int(user_info.get("Ranking"))
|
|
101
101
|
self._rewards_collectable: bool = _parse.pss_bool(user_info.get("RewardsCollectable"))
|
|
102
|
+
self._rewards_collectable_amount: int = _parse.pss_int(user_info.get("RewardsCollectableAmount"))
|
|
102
103
|
self._ship_design_id: int = _parse.pss_int(user_info.get("ShipDesignId"))
|
|
103
104
|
self._situation_occurrences: str = _parse.pss_str(user_info.get("SituationOccurrences"))
|
|
104
105
|
self._situation_occurrences_today: int = _parse.pss_int(user_info.get("SituationOccurrencesToday"))
|
|
@@ -453,6 +454,10 @@ class UserRaw:
|
|
|
453
454
|
def rewards_collectable(self) -> bool:
|
|
454
455
|
return self._rewards_collectable
|
|
455
456
|
|
|
457
|
+
@property
|
|
458
|
+
def rewards_collectable_amount(self) -> int:
|
|
459
|
+
return self._rewards_collectable_amount
|
|
460
|
+
|
|
456
461
|
@property
|
|
457
462
|
def ship_design_id(self) -> int:
|
|
458
463
|
return self._ship_design_id
|
|
@@ -637,6 +642,7 @@ class UserRaw:
|
|
|
637
642
|
self.race_type,
|
|
638
643
|
self.ranking,
|
|
639
644
|
self.rewards_collectable,
|
|
645
|
+
self.rewards_collectable_amount,
|
|
640
646
|
self.ship_design_id,
|
|
641
647
|
self.situation_occurrences,
|
|
642
648
|
self.situation_occurrences_today,
|
|
@@ -749,6 +755,7 @@ class UserRaw:
|
|
|
749
755
|
"RaceType": self.race_type,
|
|
750
756
|
"Ranking": self.ranking,
|
|
751
757
|
"RewardsCollectable": self.rewards_collectable,
|
|
758
|
+
"RewardsCollectableAmount": self.rewards_collectable_amount,
|
|
752
759
|
"ShipDesignId": self.ship_design_id,
|
|
753
760
|
"SituationOccurrences": self.situation_occurrences,
|
|
754
761
|
"SituationOccurrencesToday": self.situation_occurrences_today,
|
|
@@ -11,7 +11,7 @@ class Skin(_SkinRaw, _EntityWithIdBase):
|
|
|
11
11
|
super().__init__(skin_info)
|
|
12
12
|
self._skin_type_enum: _enums.RoomStatus = _parse.pss_str_enum(self.skin_type, _enums.SkinType)
|
|
13
13
|
self._skin_metadata: _SkinMetadata = _SkinMetadata(self.metadata)
|
|
14
|
-
self._sprite_type_enum: _enums.
|
|
14
|
+
self._sprite_type_enum: _enums.SpriteType = _parse.pss_str_enum(self.sprite_type, _enums.SpriteType)
|
|
15
15
|
|
|
16
16
|
@property
|
|
17
17
|
def id(self) -> int:
|
|
@@ -26,5 +26,5 @@ class Skin(_SkinRaw, _EntityWithIdBase):
|
|
|
26
26
|
return self._skin_type_enum
|
|
27
27
|
|
|
28
28
|
@property
|
|
29
|
-
def sprite_type_enum(self) -> "_enums.
|
|
29
|
+
def sprite_type_enum(self) -> "_enums.SpriteType":
|
|
30
30
|
return self._sprite_type_enum
|
|
@@ -82,6 +82,7 @@ from .progression_type import ProgressionType
|
|
|
82
82
|
from .promotion_design_flag import PromotionDesignFlag
|
|
83
83
|
from .promotion_type import PromotionType
|
|
84
84
|
from .purchase_vip_status import PurchaseVIPStatus
|
|
85
|
+
from .pusher_channel_type import PusherChannelType
|
|
85
86
|
from .race_type import RaceType
|
|
86
87
|
from .rarity import Rarity
|
|
87
88
|
from .research_design_type import ResearchDesignType
|
|
@@ -105,6 +106,7 @@ from .situation_type import SituationType
|
|
|
105
106
|
from .skin_type import SkinType
|
|
106
107
|
from .special_ability_type import SpecialAbilityType
|
|
107
108
|
from .special_rule_type import SpecialRuleType
|
|
109
|
+
from .sprite_type import SpriteType
|
|
108
110
|
from .status import Status
|
|
109
111
|
from .str_enum_base import StrEnumBase
|
|
110
112
|
from .target_type import TargetType
|
|
@@ -113,6 +115,7 @@ from .task_design_flags_type import TaskDesignFlagsType
|
|
|
113
115
|
from .training_animation_style import TrainingAnimationStyle
|
|
114
116
|
from .trigger_type import TriggerType
|
|
115
117
|
from .user_flags import UserFlags
|
|
118
|
+
from .user_source_ads_platform_type import UserSourceAdsPlatformType
|
|
116
119
|
from .user_status import UserStatus
|
|
117
120
|
from .user_type import UserType
|
|
118
121
|
from .visibility_flags import VisibilityFlags
|
|
@@ -200,6 +203,7 @@ __all__ = [
|
|
|
200
203
|
PromotionDesignFlag.__name__,
|
|
201
204
|
PromotionType.__name__,
|
|
202
205
|
PurchaseVIPStatus.__name__,
|
|
206
|
+
PusherChannelType.__name__,
|
|
203
207
|
RaceType.__name__,
|
|
204
208
|
Rarity.__name__,
|
|
205
209
|
AvailabilityMask.__name__,
|
|
@@ -224,6 +228,7 @@ __all__ = [
|
|
|
224
228
|
SkinType.__name__,
|
|
225
229
|
SpecialAbilityType.__name__,
|
|
226
230
|
SpecialRuleType.__name__,
|
|
231
|
+
SpriteType.__name__,
|
|
227
232
|
Status.__name__,
|
|
228
233
|
StrEnumBase.__name__,
|
|
229
234
|
TargetType.__name__,
|
|
@@ -232,6 +237,7 @@ __all__ = [
|
|
|
232
237
|
TrainingAnimationStyle.__name__,
|
|
233
238
|
TriggerType.__name__,
|
|
234
239
|
UserFlags.__name__,
|
|
240
|
+
UserSourceAdsPlatformType.__name__,
|
|
235
241
|
UserStatus.__name__,
|
|
236
242
|
UserType.__name__,
|
|
237
243
|
VisibilityFlags.__name__,
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
from pssapi.enums.str_enum_base import StrEnumBase
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class PusherChannelType(StrEnumBase):
|
|
5
|
+
MARKET = "market"
|
|
6
|
+
INCOMING_MESSAGES_PRIVATE = "private-user"
|
|
7
|
+
GLOBAL = "public-global"
|
|
8
|
+
ENGLISH = "public-en"
|
|
9
|
+
AFRIKAAN = "public-af"
|
|
10
|
+
ARABIC = "public-ar"
|
|
11
|
+
CHINESE_SIMPLIFIED = "public-zh-Hans"
|
|
12
|
+
CHINESE_TRADITIONAL = "public-zh-Hant"
|
|
13
|
+
CZECH = "public-cs"
|
|
14
|
+
DUTCH = "public-nl"
|
|
15
|
+
FRENCH = "public-fr"
|
|
16
|
+
GERMAN = "public-de"
|
|
17
|
+
INDONESIAN = "public-id"
|
|
18
|
+
ITALIAN = "public-it"
|
|
19
|
+
JAPANESE = "public-ja"
|
|
20
|
+
KOREAN = "public-ko"
|
|
21
|
+
POLISH = "public-pl"
|
|
22
|
+
PORTUGUESE = "public-pt"
|
|
23
|
+
RUSSIAN = "public-ru"
|
|
24
|
+
SPANISH = "public-es"
|
|
25
|
+
SWEDISH = "public-sv"
|
|
26
|
+
THAI = "public-th"
|
|
27
|
+
TURKISH = "public-tr"
|
|
28
|
+
VIETNAMESE = "public-vi"
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from .str_enum_base import StrEnumBase as _StrEnumBase
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class SpriteType(_StrEnumBase):
|
|
5
|
+
NONE = "None"
|
|
6
|
+
INTERIOR = "Interior"
|
|
7
|
+
EXTERIOR = "Exterior"
|
|
8
|
+
INTERIOR_DESTROYED = "InteriorDestroyed"
|
|
9
|
+
EXTERIOR_DESTROYED = "ExteriorDestroyed"
|
|
10
|
+
INTERIOR_ACTIVATE = "InteriorActivate"
|
|
11
|
+
EXTERIOR_ACTIVATE = "ExteriorActivate"
|
|
12
|
+
LOADING = "Loading"
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class PusherConnectionClosed(Exception):
|
|
5
|
+
"""
|
|
6
|
+
Raised when a Pusher connection is closed.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
def __init__(self, message: str, code: Optional[int] = None, error_message: Optional[str] = "") -> None:
|
|
10
|
+
super().__init__(message)
|
|
11
|
+
|
|
12
|
+
self.message = message
|
|
13
|
+
self.code = code
|
|
14
|
+
self.error_message = error_message
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
from json import loads
|
|
2
|
+
from typing import Callable, Optional
|
|
3
|
+
|
|
4
|
+
from aiohttp import ClientSession
|
|
5
|
+
|
|
6
|
+
from pssapi.constants import PUSHER_AUTH_URL
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class Channel:
|
|
10
|
+
def __init__(self, name: str, private: Optional[bool] = False, endpoint: Optional[str] = PUSHER_AUTH_URL) -> None:
|
|
11
|
+
"""
|
|
12
|
+
Create a new `Channel` instance
|
|
13
|
+
Args:
|
|
14
|
+
`name` - Name of the channel
|
|
15
|
+
`endpoint` - Authentication endpoint
|
|
16
|
+
`private` - Whether the channel is private (requires `token` to be specified)
|
|
17
|
+
"""
|
|
18
|
+
self.name = name
|
|
19
|
+
self.endpoint = endpoint
|
|
20
|
+
self.private = private
|
|
21
|
+
self.callback = lambda _: None
|
|
22
|
+
|
|
23
|
+
def on_message(self, callback: Optional[Callable]) -> None:
|
|
24
|
+
"""
|
|
25
|
+
Set a callback to be called when a message is received
|
|
26
|
+
Args:
|
|
27
|
+
`callback` - The function to be called, `lambda _: None` if not specified
|
|
28
|
+
"""
|
|
29
|
+
if callback:
|
|
30
|
+
self.callback = callback
|
|
31
|
+
|
|
32
|
+
else:
|
|
33
|
+
self.callback = lambda _: None
|
|
34
|
+
|
|
35
|
+
async def _auth(self, token: str, socket_id: str) -> str:
|
|
36
|
+
data = {
|
|
37
|
+
"channel_name": self.name,
|
|
38
|
+
"socket_id": socket_id,
|
|
39
|
+
}
|
|
40
|
+
endpoint = f"{self.endpoint}?accessToken={token}"
|
|
41
|
+
|
|
42
|
+
async with ClientSession() as session:
|
|
43
|
+
async with session.post(endpoint, data=data) as response:
|
|
44
|
+
assert response.ok, "Couldn't authenticate connection"
|
|
45
|
+
|
|
46
|
+
return loads(await response.text())["auth"]
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
from inspect import isawaitable
|
|
2
|
+
from json import dumps, loads
|
|
3
|
+
from platform import system
|
|
4
|
+
from typing import Any, Optional
|
|
5
|
+
|
|
6
|
+
from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
|
7
|
+
from apscheduler.triggers.interval import IntervalTrigger
|
|
8
|
+
from websockets.client import connect
|
|
9
|
+
|
|
10
|
+
import pssapi
|
|
11
|
+
from pssapi.constants import PUSHER_APP_CLUSTER, PUSHER_APP_ID
|
|
12
|
+
from pssapi.exc import PusherConnectionClosed
|
|
13
|
+
from pssapi.pusher.channel import Channel
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
# TODO: Add error handling, add ping/pong timeout
|
|
17
|
+
class Pusher:
|
|
18
|
+
# Should be of the form `platform-library`
|
|
19
|
+
client: str = f"{system()}-pssapi"
|
|
20
|
+
|
|
21
|
+
# Pusher protocol (as of 6/1/23, protocol 7)
|
|
22
|
+
protocol: int = 7
|
|
23
|
+
|
|
24
|
+
# Time values
|
|
25
|
+
connection_timeout: int = 305
|
|
26
|
+
ping_interval: int = 120
|
|
27
|
+
|
|
28
|
+
_socket_id = ""
|
|
29
|
+
|
|
30
|
+
_connection = None
|
|
31
|
+
_scheduler = AsyncIOScheduler()
|
|
32
|
+
|
|
33
|
+
_channels: dict[Channel] = dict()
|
|
34
|
+
|
|
35
|
+
@classmethod
|
|
36
|
+
async def _connect_to_pusher(cls) -> None:
|
|
37
|
+
host = f"ws://ws-{PUSHER_APP_CLUSTER}.pusher.com"
|
|
38
|
+
url = f"{host}/app/{PUSHER_APP_ID}?client={cls.client}&version={pssapi.__version__}&protocol={cls.protocol}"
|
|
39
|
+
|
|
40
|
+
cls._connection = await connect(url)
|
|
41
|
+
await cls._send_ping()
|
|
42
|
+
|
|
43
|
+
@classmethod
|
|
44
|
+
async def _send_event(cls, event_name: str, data: Any, channel: Optional[str] = None) -> None:
|
|
45
|
+
event = {"event": event_name, "data": data}
|
|
46
|
+
if channel:
|
|
47
|
+
event["channel"] = channel
|
|
48
|
+
|
|
49
|
+
event = dumps(event)
|
|
50
|
+
await cls._connection.send(event)
|
|
51
|
+
|
|
52
|
+
# Ping pong
|
|
53
|
+
@classmethod
|
|
54
|
+
async def _send_ping(cls) -> None:
|
|
55
|
+
await cls._send_event("pusher:ping", "")
|
|
56
|
+
|
|
57
|
+
@classmethod
|
|
58
|
+
async def _send_pong(cls) -> None:
|
|
59
|
+
await cls._send_event("pusher:pong", "")
|
|
60
|
+
|
|
61
|
+
@classmethod
|
|
62
|
+
def _reset_connection_timeout(cls, job_id: Any) -> None:
|
|
63
|
+
cls._scheduler.reschedule_job(job_id, trigger=IntervalTrigger(seconds=cls.connection_timeout))
|
|
64
|
+
|
|
65
|
+
@classmethod
|
|
66
|
+
async def _connection_closed(cls, code: Optional[int] = None, error_message: Optional[str] = "") -> None:
|
|
67
|
+
await cls._connection.close()
|
|
68
|
+
|
|
69
|
+
if code or error_message:
|
|
70
|
+
raise PusherConnectionClosed(
|
|
71
|
+
f"""Connection closed.
|
|
72
|
+
Code: {code}
|
|
73
|
+
Message: {error_message}""",
|
|
74
|
+
code,
|
|
75
|
+
error_message,
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
raise PusherConnectionClosed("Connection timed out / closed with unknown cause.")
|
|
79
|
+
|
|
80
|
+
# Scheduled tasks
|
|
81
|
+
@classmethod
|
|
82
|
+
def _start_timers(cls) -> None:
|
|
83
|
+
job_id = cls._scheduler.add_job(cls._connection_closed, IntervalTrigger(seconds=cls.connection_timeout)).id
|
|
84
|
+
cls._scheduler.add_job(cls._send_ping, IntervalTrigger(seconds=cls.ping_interval))
|
|
85
|
+
|
|
86
|
+
return job_id
|
|
87
|
+
|
|
88
|
+
@classmethod
|
|
89
|
+
async def _subscribe(cls, channel: Channel, token: Optional[str] = "") -> None:
|
|
90
|
+
if channel.private and not token:
|
|
91
|
+
raise ValueError("Token required if channel is private.")
|
|
92
|
+
|
|
93
|
+
data = {"channel": channel.name, "auth": await channel._auth(token, cls._socket_id) if channel.private else "", "channel_data": "{}"}
|
|
94
|
+
await cls._send_event("pusher:subscribe", data)
|
|
95
|
+
|
|
96
|
+
@classmethod
|
|
97
|
+
def add(cls, channel: Channel) -> None:
|
|
98
|
+
"""
|
|
99
|
+
Add a new channel to subscribe to
|
|
100
|
+
Args:
|
|
101
|
+
- `channel` - The channel to subscribe to
|
|
102
|
+
"""
|
|
103
|
+
cls._channels[channel.name] = channel
|
|
104
|
+
|
|
105
|
+
@classmethod
|
|
106
|
+
async def _handle_message(cls, event: str, data: dict, channel: Optional[str] = "", token: Optional[str] = "") -> None:
|
|
107
|
+
if event == "pusher:connection_established":
|
|
108
|
+
cls._socket_id = data["socket_id"]
|
|
109
|
+
|
|
110
|
+
for channel_name in cls._channels.keys():
|
|
111
|
+
channel = cls._channels[channel_name]
|
|
112
|
+
|
|
113
|
+
await cls._subscribe(channel, token)
|
|
114
|
+
|
|
115
|
+
if event == "pusher:error":
|
|
116
|
+
return await cls._connection_closed(data["code"], data["message"])
|
|
117
|
+
|
|
118
|
+
if channel and event == "message":
|
|
119
|
+
channel_class = cls._channels.get(channel)
|
|
120
|
+
if not channel_class:
|
|
121
|
+
return
|
|
122
|
+
|
|
123
|
+
callback = channel_class.callback
|
|
124
|
+
if isawaitable(callback):
|
|
125
|
+
return await callback(data)
|
|
126
|
+
|
|
127
|
+
return callback(data)
|
|
128
|
+
|
|
129
|
+
@classmethod
|
|
130
|
+
def _keep_persistent_connection(cls, token: str, user_id: int) -> None:
|
|
131
|
+
if not token and not user_id:
|
|
132
|
+
return
|
|
133
|
+
|
|
134
|
+
if token and not user_id:
|
|
135
|
+
raise RuntimeError("Token specified but not user_id")
|
|
136
|
+
|
|
137
|
+
if user_id and not token:
|
|
138
|
+
raise RuntimeError("user_id specified but no token")
|
|
139
|
+
|
|
140
|
+
channel = Channel(f"private-user-{user_id}", private=True)
|
|
141
|
+
cls.add(channel)
|
|
142
|
+
|
|
143
|
+
@classmethod
|
|
144
|
+
async def run(cls, token: Optional[str] = "", user_id: Optional[int] = 0) -> None:
|
|
145
|
+
"""
|
|
146
|
+
Start the Pusher client
|
|
147
|
+
Args:
|
|
148
|
+
- `token`: Account-binded token (required to auth/keep persistent connection)
|
|
149
|
+
- `user_id`: User ID of the account (acquired through `SearchUsers`)
|
|
150
|
+
"""
|
|
151
|
+
job_id = cls._start_timers()
|
|
152
|
+
cls._scheduler.start()
|
|
153
|
+
|
|
154
|
+
await cls._connect_to_pusher()
|
|
155
|
+
cls._keep_persistent_connection(token, user_id)
|
|
156
|
+
|
|
157
|
+
while True:
|
|
158
|
+
message = await cls._connection.recv()
|
|
159
|
+
message = loads(message)
|
|
160
|
+
cls._reset_connection_timeout(job_id)
|
|
161
|
+
|
|
162
|
+
event = message["event"]
|
|
163
|
+
data = loads(message["data"]) if isinstance(message["data"], str) else message["data"]
|
|
164
|
+
channel = message["channel"] if message.get("channel") else ""
|
|
165
|
+
|
|
166
|
+
await cls._handle_message(event, data, channel, token)
|