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.
Files changed (361) hide show
  1. {pssapi-0.2.3 → pssapi-0.3.0}/PKG-INFO +3 -1
  2. {pssapi-0.2.3 → pssapi-0.3.0}/pyproject.toml +3 -1
  3. pssapi-0.3.0/src/pssapi/__init__.py +14 -0
  4. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/constants.py +4 -0
  5. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/character_design_raw.py +7 -0
  6. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/room_design_raw.py +7 -0
  7. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/setting_raw.py +21 -0
  8. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/skin_raw.py +7 -0
  9. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/user_raw.py +7 -0
  10. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/skin.py +2 -2
  11. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/__init__.py +6 -0
  12. pssapi-0.3.0/src/pssapi/enums/pusher_channel_type.py +28 -0
  13. pssapi-0.3.0/src/pssapi/enums/sprite_type.py +12 -0
  14. pssapi-0.3.0/src/pssapi/enums/user_source_ads_platform_type.py +10 -0
  15. pssapi-0.3.0/src/pssapi/exc.py +14 -0
  16. pssapi-0.3.0/src/pssapi/pusher/__init__.py +7 -0
  17. pssapi-0.3.0/src/pssapi/pusher/channel.py +46 -0
  18. pssapi-0.3.0/src/pssapi/pusher/pusher.py +166 -0
  19. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/design_service_raw.py +165 -0
  20. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/setting_service_raw.py +7 -0
  21. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/task_service_raw.py +2 -2
  22. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/user_service_raw.py +9 -9
  23. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/task_service.py +4 -2
  24. pssapi-0.2.3/src/pssapi/__init__.py +0 -12
  25. {pssapi-0.2.3 → pssapi-0.3.0}/LICENSE.md +0 -0
  26. {pssapi-0.2.3 → pssapi-0.3.0}/README.md +0 -0
  27. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/client.py +0 -0
  28. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/client_base.py +0 -0
  29. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/core.py +0 -0
  30. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/__init__.py +0 -0
  31. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/achievement_design.py +0 -0
  32. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/action_type.py +0 -0
  33. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/add_starbux.py +0 -0
  34. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/alliance.py +0 -0
  35. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/animation.py +0 -0
  36. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/asset.py +0 -0
  37. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/background.py +0 -0
  38. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/battle.py +0 -0
  39. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/challenge_design.py +0 -0
  40. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/character.py +0 -0
  41. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/character_action.py +0 -0
  42. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/character_design.py +0 -0
  43. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/character_design_action.py +0 -0
  44. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/character_part.py +0 -0
  45. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/collection_design.py +0 -0
  46. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/condition_type.py +0 -0
  47. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/craft_design.py +0 -0
  48. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/division_design.py +0 -0
  49. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/draw_design.py +0 -0
  50. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/entity_base.py +0 -0
  51. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/file.py +0 -0
  52. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/friend.py +0 -0
  53. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/get_catalog_quantity.py +0 -0
  54. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/get_current_resources.py +0 -0
  55. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/history.py +0 -0
  56. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/item.py +0 -0
  57. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/item_design.py +0 -0
  58. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/item_design_action.py +0 -0
  59. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/league.py +0 -0
  60. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/list_friends.py +0 -0
  61. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/live_ops.py +0 -0
  62. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/message.py +0 -0
  63. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/metadata/__init__.py +0 -0
  64. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/metadata/entity_metadata_base.py +0 -0
  65. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/metadata/item_design_metadata.py +0 -0
  66. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/metadata/metadata_color.py +0 -0
  67. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/metadata/missile_design_metadata.py +0 -0
  68. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/metadata/mission_design_metadata.py +0 -0
  69. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/metadata/promotion_design_metadata.py +0 -0
  70. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/metadata/reward_design_metadata.py +0 -0
  71. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/metadata/room_design_metadata.py +0 -0
  72. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/metadata/room_design_sprite_metadata.py +0 -0
  73. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/metadata/season_design_metadata.py +0 -0
  74. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/metadata/skin_metadata.py +0 -0
  75. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/metadata/skin_set_metadata.py +0 -0
  76. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/metadata/star_system_marker_generator_metadata.py +0 -0
  77. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/missile_design.py +0 -0
  78. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/mission_design.py +0 -0
  79. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/mission_event.py +0 -0
  80. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/news_design.py +0 -0
  81. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/planet.py +0 -0
  82. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/prestige.py +0 -0
  83. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/promotion_design.py +0 -0
  84. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/__init__.py +0 -0
  85. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/achievement_design_raw.py +0 -0
  86. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/action_type_raw.py +0 -0
  87. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/add_starbux_raw.py +0 -0
  88. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/alliance_raw.py +0 -0
  89. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/animation_raw.py +0 -0
  90. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/asset_raw.py +0 -0
  91. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/background_raw.py +0 -0
  92. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/battle_raw.py +0 -0
  93. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/challenge_design_raw.py +0 -0
  94. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/character_action_raw.py +0 -0
  95. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/character_design_action_raw.py +0 -0
  96. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/character_part_raw.py +0 -0
  97. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/character_raw.py +0 -0
  98. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/collection_design_raw.py +0 -0
  99. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/condition_type_raw.py +0 -0
  100. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/craft_design_raw.py +0 -0
  101. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/division_design_raw.py +0 -0
  102. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/draw_design_raw.py +0 -0
  103. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/entity_base_raw.py +0 -0
  104. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/file_raw.py +0 -0
  105. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/friend_raw.py +0 -0
  106. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/get_catalog_quantity_raw.py +0 -0
  107. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/get_current_resources_raw.py +0 -0
  108. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/history_raw.py +0 -0
  109. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/item_design_action_raw.py +0 -0
  110. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/item_design_raw.py +0 -0
  111. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/item_raw.py +0 -0
  112. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/league_raw.py +0 -0
  113. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/list_friends_raw.py +0 -0
  114. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/live_ops_raw.py +0 -0
  115. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/message_raw.py +0 -0
  116. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/missile_design_raw.py +0 -0
  117. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/mission_design_raw.py +0 -0
  118. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/mission_event_raw.py +0 -0
  119. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/news_design_raw.py +0 -0
  120. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/planet_raw.py +0 -0
  121. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/prestige_raw.py +0 -0
  122. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/promotion_design_raw.py +0 -0
  123. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/research_design_raw.py +0 -0
  124. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/research_raw.py +0 -0
  125. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/reward_design_raw.py +0 -0
  126. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/room_action_raw.py +0 -0
  127. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/room_design_purchase_raw.py +0 -0
  128. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/room_design_sprite_raw.py +0 -0
  129. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/room_raw.py +0 -0
  130. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/sale_raw.py +0 -0
  131. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/season_design_raw.py +0 -0
  132. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/ship_design_raw.py +0 -0
  133. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/ship_raw.py +0 -0
  134. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/situation_design_raw.py +0 -0
  135. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/skin_set_raw.py +0 -0
  136. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/sprite_raw.py +0 -0
  137. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/star_system_link_raw.py +0 -0
  138. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/star_system_marker_generator_raw.py +0 -0
  139. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/star_system_marker_raw.py +0 -0
  140. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/star_system_raw.py +0 -0
  141. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/task_design_raw.py +0 -0
  142. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/training_design_raw.py +0 -0
  143. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/user_email_password_authorize_raw.py +0 -0
  144. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/user_login_raw.py +0 -0
  145. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/user_marker_raw.py +0 -0
  146. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/user_season_raw.py +0 -0
  147. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/raw/user_star_system_raw.py +0 -0
  148. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/research.py +0 -0
  149. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/research_design.py +0 -0
  150. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/reward_design.py +0 -0
  151. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/room.py +0 -0
  152. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/room_action.py +0 -0
  153. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/room_design.py +0 -0
  154. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/room_design_purchase.py +0 -0
  155. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/room_design_sprite.py +0 -0
  156. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/sale.py +0 -0
  157. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/season_design.py +0 -0
  158. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/setting.py +0 -0
  159. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/ship.py +0 -0
  160. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/ship_design.py +0 -0
  161. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/situation_design.py +0 -0
  162. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/skin_set.py +0 -0
  163. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/sprite.py +0 -0
  164. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/star_system.py +0 -0
  165. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/star_system_link.py +0 -0
  166. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/star_system_marker.py +0 -0
  167. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/star_system_marker_generator.py +0 -0
  168. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/task_design.py +0 -0
  169. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/training_design.py +0 -0
  170. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/user.py +0 -0
  171. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/user_email_password_authorize.py +0 -0
  172. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/user_login.py +0 -0
  173. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/user_marker.py +0 -0
  174. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/user_season.py +0 -0
  175. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/entities/user_star_system.py +0 -0
  176. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/achievement_type.py +0 -0
  177. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/action_type_category.py +0 -0
  178. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/action_type_parameter_relativity.py +0 -0
  179. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/activity_type.py +0 -0
  180. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/alliance_membership.py +0 -0
  181. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/ammo_category.py +0 -0
  182. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/animation_effect_type.py +0 -0
  183. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/argument.py +0 -0
  184. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/asset_type.py +0 -0
  185. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/authentication_type.py +0 -0
  186. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/availability_mask.py +0 -0
  187. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/background_effect_type.py +0 -0
  188. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/background_type.py +0 -0
  189. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/battle_type.py +0 -0
  190. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/behavior_flags.py +0 -0
  191. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/category_type.py +0 -0
  192. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/challenge_flags.py +0 -0
  193. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/challenge_scoring_type.py +0 -0
  194. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/challenge_type.py +0 -0
  195. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/change_type.py +0 -0
  196. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/character_design_flag_type.py +0 -0
  197. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/character_flags.py +0 -0
  198. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/character_part_type.py +0 -0
  199. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/checksum_type.py +0 -0
  200. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/collection_type.py +0 -0
  201. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/completion_value_type.py +0 -0
  202. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/condition_type_availability_mask.py +0 -0
  203. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/condition_type_category.py +0 -0
  204. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/condition_type_comparison.py +0 -0
  205. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/condition_type_parameter.py +0 -0
  206. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/cost_type.py +0 -0
  207. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/craft_attack_type.py +0 -0
  208. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/craft_target_type.py +0 -0
  209. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/crew_rarity.py +0 -0
  210. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/currency_type.py +0 -0
  211. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/daily_reward_status.py +0 -0
  212. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/daily_reward_type.py +0 -0
  213. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/device_type.py +0 -0
  214. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/division_type.py +0 -0
  215. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/download_type.py +0 -0
  216. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/draw_type.py +0 -0
  217. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/duration_type.py +0 -0
  218. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/email_verification_status.py +0 -0
  219. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/enhancement_type.py +0 -0
  220. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/environment_type.py +0 -0
  221. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/equipment_mask_flag.py +0 -0
  222. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/explosion_type.py +0 -0
  223. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/feature_flag.py +0 -0
  224. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/file_download_category.py +0 -0
  225. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/flight_type.py +0 -0
  226. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/friend_type.py +0 -0
  227. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/gender_type.py +0 -0
  228. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/generation_flags.py +0 -0
  229. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/grid_type_flag.py +0 -0
  230. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/guide_type.py +0 -0
  231. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/hazard_category.py +0 -0
  232. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/hazard_type.py +0 -0
  233. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/history_type.py +0 -0
  234. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/item_design_flag_type.py +0 -0
  235. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/item_sub_type.py +0 -0
  236. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/item_type.py +0 -0
  237. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/language_key.py +0 -0
  238. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/league_type.py +0 -0
  239. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/manufacture_type.py +0 -0
  240. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/marker_flag.py +0 -0
  241. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/marker_type.py +0 -0
  242. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/matching_status.py +0 -0
  243. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/message_type.py +0 -0
  244. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/missile_type.py +0 -0
  245. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/mission_design_flag.py +0 -0
  246. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/mission_design_status.py +0 -0
  247. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/mission_design_type.py +0 -0
  248. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/mission_event_flag.py +0 -0
  249. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/mission_event_type.py +0 -0
  250. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/module_type.py +0 -0
  251. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/movement_type.py +0 -0
  252. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/objective_type.py +0 -0
  253. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/orbit_anchor_alignment.py +0 -0
  254. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/outcome_type.py +0 -0
  255. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/platform_type.py +0 -0
  256. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/production_server.py +0 -0
  257. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/progression_type.py +0 -0
  258. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/promotion_design_flag.py +0 -0
  259. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/promotion_type.py +0 -0
  260. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/purchase_vip_status.py +0 -0
  261. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/race_type.py +0 -0
  262. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/rarity.py +0 -0
  263. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/research_design_type.py +0 -0
  264. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/research_state.py +0 -0
  265. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/reward_type.py +0 -0
  266. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/room_design_sprite_flag.py +0 -0
  267. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/room_effect_type.py +0 -0
  268. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/room_flags.py +0 -0
  269. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/room_sprite_type.py +0 -0
  270. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/room_status.py +0 -0
  271. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/room_type.py +0 -0
  272. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/sale_item_mask.py +0 -0
  273. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/sale_status.py +0 -0
  274. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/sale_type.py +0 -0
  275. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/season_type.py +0 -0
  276. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/setting_flags.py +0 -0
  277. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/ship_status.py +0 -0
  278. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/ship_type.py +0 -0
  279. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/situation_design_flag.py +0 -0
  280. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/situation_type.py +0 -0
  281. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/skin_type.py +0 -0
  282. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/special_ability_type.py +0 -0
  283. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/special_rule_type.py +0 -0
  284. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/status.py +0 -0
  285. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/str_enum_base.py +0 -0
  286. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/target_type.py +0 -0
  287. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/task_category.py +0 -0
  288. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/task_design_flags_type.py +0 -0
  289. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/training_animation_style.py +0 -0
  290. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/trigger_type.py +0 -0
  291. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/user_flags.py +0 -0
  292. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/user_status.py +0 -0
  293. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/user_type.py +0 -0
  294. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/enums/visibility_flags.py +0 -0
  295. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/raw/__init__.py +0 -0
  296. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/__init__.py +0 -0
  297. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/achievement_service.py +0 -0
  298. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/alliance_service.py +0 -0
  299. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/animation_service.py +0 -0
  300. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/background_service.py +0 -0
  301. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/challenge_service.py +0 -0
  302. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/character_service.py +0 -0
  303. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/collection_service.py +0 -0
  304. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/design_service.py +0 -0
  305. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/division_service.py +0 -0
  306. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/file_service.py +0 -0
  307. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/galaxy_service.py +0 -0
  308. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/history_service.py +0 -0
  309. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/item_service.py +0 -0
  310. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/ladder_service.py +0 -0
  311. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/league_service.py +0 -0
  312. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/live_ops_service.py +0 -0
  313. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/market_service.py +0 -0
  314. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/message_service.py +0 -0
  315. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/mission_service.py +0 -0
  316. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/promotion_service.py +0 -0
  317. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/__init__.py +0 -0
  318. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/achievement_service_raw.py +0 -0
  319. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/alliance_service_raw.py +0 -0
  320. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/animation_service_raw.py +0 -0
  321. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/background_service_raw.py +0 -0
  322. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/challenge_service_raw.py +0 -0
  323. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/character_service_raw.py +0 -0
  324. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/collection_service_raw.py +0 -0
  325. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/division_service_raw.py +0 -0
  326. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/file_service_raw.py +0 -0
  327. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/galaxy_service_raw.py +0 -0
  328. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/history_service_raw.py +0 -0
  329. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/item_service_raw.py +0 -0
  330. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/ladder_service_raw.py +0 -0
  331. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/league_service_raw.py +0 -0
  332. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/live_ops_service_raw.py +0 -0
  333. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/market_service_raw.py +0 -0
  334. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/message_service_raw.py +0 -0
  335. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/mission_service_raw.py +0 -0
  336. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/promotion_service_raw.py +0 -0
  337. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/research_service_raw.py +0 -0
  338. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/reward_service_raw.py +0 -0
  339. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/room_design_sprite_service_raw.py +0 -0
  340. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/room_service_raw.py +0 -0
  341. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/season_service_raw.py +0 -0
  342. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/ship_service_raw.py +0 -0
  343. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/situation_service_raw.py +0 -0
  344. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/raw/training_service_raw.py +0 -0
  345. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/research_service.py +0 -0
  346. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/reward_service.py +0 -0
  347. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/room_design_sprite_service.py +0 -0
  348. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/room_service.py +0 -0
  349. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/season_service.py +0 -0
  350. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/service_base.py +0 -0
  351. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/setting_service.py +0 -0
  352. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/ship_service.py +0 -0
  353. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/situation_service.py +0 -0
  354. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/training_service.py +0 -0
  355. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/services/user_service.py +0 -0
  356. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/types.py +0 -0
  357. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/utils/__init__.py +0 -0
  358. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/utils/convert.py +0 -0
  359. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/utils/datetime.py +0 -0
  360. {pssapi-0.2.3 → pssapi-0.3.0}/src/pssapi/utils/exceptions.py +0 -0
  361. {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.2.3
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.2.3"
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.RoomSpriteType = _parse.pss_str_enum(self.sprite_type, _enums.RoomSpriteType)
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.RoomSpriteType":
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,10 @@
1
+ from .str_enum_base import StrEnumBase as _StrEnumBase
2
+
3
+
4
+ class UserSourceAdsPlatformType(_StrEnumBase):
5
+ UNKNOWN = "Unknown"
6
+ CHANYOU = "Chanyou"
7
+ BAIDU = "Baidu"
8
+ TIKTOK = "Tiktok"
9
+ BILIBILI = "Bilibili"
10
+ NO_REPORTING_USER = "NoReportingUser"
@@ -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,7 @@
1
+ from .channel import Channel
2
+ from .pusher import Pusher
3
+
4
+ __all__ = [
5
+ Channel.__name__,
6
+ Pusher.__name__,
7
+ ]
@@ -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)