From 6ae26a512ac8a798fed15966384dc359469f2a5e Mon Sep 17 00:00:00 2001 From: Yuan Si Date: Tue, 23 May 2023 00:47:37 +0800 Subject: [PATCH] as: Add APIs required for playing MV Signed-off-by: Yuan Si --- assets/fetchLiveMusicSelect.json | 175 ++++++++++++++++ assets/getClearedPlatformAchievement.json | 22 ++ assets/liveMvStart.json | 123 +++++++++++ assets/updateCardNewFlag.json | 122 +++++++++++ model/live.go | 65 ++++++ model/login.go | 6 +- router/router.go | 239 ++++++++++++++++++++++ router/utils.go | 62 ++++++ 8 files changed, 811 insertions(+), 3 deletions(-) create mode 100644 assets/fetchLiveMusicSelect.json create mode 100644 assets/getClearedPlatformAchievement.json create mode 100644 assets/liveMvStart.json create mode 100644 assets/updateCardNewFlag.json diff --git a/assets/fetchLiveMusicSelect.json b/assets/fetchLiveMusicSelect.json new file mode 100644 index 0000000..6870057 --- /dev/null +++ b/assets/fetchLiveMusicSelect.json @@ -0,0 +1,175 @@ +{ + "weekday_state": { + "weekday": 1, + "next_weekday_at": 1684771200 + }, + "live_daily_list": [ + { + "live_daily_master_id": 1, + "live_master_id": 10070, + "end_at": 1684771200, + "remaining_play_count": 5, + "remaining_recovery_count": 9 + }, + { + "live_daily_master_id": 2, + "live_master_id": 11066, + "end_at": 1684771200, + "remaining_play_count": 5, + "remaining_recovery_count": 9 + }, + { + "live_daily_master_id": 38, + "live_master_id": 12092, + "end_at": 1684771200, + "remaining_play_count": 5, + "remaining_recovery_count": 9 + } + ], + "live_campaign_list": [], + "live_daily_campaign_list": [], + "live_campaign_lp_list": [], + "live_campaign_change_drop_list": [], + "live_campaign_notice": null, + "live_event_common_info": null, + "banner_info": { + "banners": [] + }, + "pickup_info": { + "active_event": null, + "live_campaign_info": { + "live_campaign_end_at": null, + "live_daily_campaign_end_at": null, + "live_extra_campaign_end_at": null, + "live_challenge_campaign_end_at": null + }, + "is_lesson_campaign": false, + "appeal_gachas": [ + { + "v": "_u3" + } + ], + "is_shop_sale": true, + "is_sns_coin_sale": true + }, + "user_model_diff": { + "user_status": { + "name": { + "dot_under_text": "梦路2号机@果果厨" + }, + "nickname": { + "dot_under_text": "梦路" + }, + "last_login_at": 1684754024, + "rank": 122, + "exp": 416263, + "message": { + "dot_under_text": "B站主播:梦路_YumeMichi" + }, + "recommend_card_master_id": 200013001, + "max_friend_num": 0, + "live_point_full_at": 1684158189, + "live_point_broken": 150, + "live_point_subscription_recovery_daily_count": 1, + "live_point_subscription_recovery_daily_reset_at": 1656259200, + "activity_point_count": 0, + "activity_point_reset_at": 1684123200, + "activity_point_payment_recovery_daily_count": 10, + "activity_point_payment_recovery_daily_reset_at": 1683734400, + "game_money": 115665089, + "card_exp": 32316167, + "free_sns_coin": 280, + "apple_sns_coin": 0, + "google_sns_coin": 0, + "cash": 0, + "subscription_coin": 30, + "birth_date": null, + "birth_month": 10, + "birth_day": 18, + "latest_live_deck_id": 1, + "main_lesson_deck_id": 1, + "favorite_member_id": 1, + "last_live_difficulty_id": 12092302, + "lp_magnification": 1, + "emblem_id": 13100608, + "device_token": "", + "tutorial_phase": 99, + "tutorial_end_at": 1622217482, + "login_days": 446, + "navi_tap_count": 1, + "navi_tap_recover_at": 1683043200, + "is_auto_mode": false, + "max_score_live_difficulty_master_id": 12037401, + "live_max_score": 40553270, + "max_combo_live_difficulty_master_id": 12037401, + "live_max_combo": 301, + "lesson_resume_status": 1, + "accessory_box_additional": 90, + "terms_of_use_version": 0, + "bootstrap_sifid_check_at": 1683178908, + "gdpr_version": 0, + "member_guild_member_master_id": 1, + "member_guild_last_updated_at": 1659485328 + }, + "user_member_by_member_id": [], + "user_card_by_card_id": [], + "user_suit_by_suit_id": [], + "user_live_deck_by_id": [], + "user_live_party_by_id": [], + "user_lesson_deck_by_id": [], + "user_live_mv_deck_by_id": [], + "user_live_mv_deck_custom_by_id": [], + "user_live_difficulty_by_difficulty_id": [], + "user_story_main_by_story_main_id": [], + "user_story_main_selected_by_story_main_cell_id": [], + "user_voice_by_voice_id": [], + "user_emblem_by_emblem_id": [], + "user_gacha_ticket_by_ticket_id": [], + "user_gacha_point_by_point_id": [], + "user_lesson_enhancing_item_by_item_id": [], + "user_training_material_by_item_id": [], + "user_grade_up_item_by_item_id": [], + "user_custom_background_by_id": [], + "user_story_side_by_id": [], + "user_story_member_by_id": [], + "user_communication_member_detail_badge_by_id": [], + "user_story_event_history_by_id": [], + "user_recovery_lp_by_id": [], + "user_recovery_ap_by_id": [], + "user_mission_by_mission_id": [], + "user_daily_mission_by_mission_id": [], + "user_weekly_mission_by_mission_id": [], + "user_info_trigger_basic_by_trigger_id": [], + "user_info_trigger_card_grade_up_by_trigger_id": [], + "user_info_trigger_member_guild_support_item_expired_by_trigger_id": [], + "user_info_trigger_member_love_level_up_by_trigger_id": [], + "user_accessory_by_user_accessory_id": [], + "user_accessory_level_up_item_by_id": [], + "user_accessory_rarity_up_item_by_id": [], + "user_unlock_scenes_by_enum": [], + "user_scene_tips_by_enum": [], + "user_rule_description_by_id": [], + "user_exchange_event_point_by_id": [], + "user_school_idol_festival_id_reward_mission_by_id": [], + "user_gps_present_received_by_id": [], + "user_event_marathon_by_event_master_id": [], + "user_event_mining_by_event_master_id": [], + "user_event_coop_by_event_master_id": [], + "user_live_skip_ticket_by_id": [], + "user_story_event_unlock_item_by_id": [], + "user_event_marathon_booster_by_id": [], + "user_reference_book_by_id": [], + "user_review_request_process_flow_by_id": [], + "user_rank_exp_by_id": [], + "user_share_by_id": [], + "user_tower_by_tower_id": [], + "user_recovery_tower_card_used_count_item_by_recovery_tower_card_used_count_item_master_id": [], + "user_story_linkage_by_id": [], + "user_subscription_status_by_id": [], + "user_story_main_part_digest_movie_by_id": [], + "user_member_guild_by_id": [], + "user_member_guild_support_item_by_id": [], + "user_daily_theater_by_daily_theater_id": [], + "user_play_list_by_id": [] + } +} \ No newline at end of file diff --git a/assets/getClearedPlatformAchievement.json b/assets/getClearedPlatformAchievement.json new file mode 100644 index 0000000..81f5d9b --- /dev/null +++ b/assets/getClearedPlatformAchievement.json @@ -0,0 +1,22 @@ +{ + "cleared_ids": [ + "CgkI6fnP4IYMEAIQAg", + "CgkI6fnP4IYMEAIQAw", + "CgkI6fnP4IYMEAIQBA", + "CgkI6fnP4IYMEAIQBQ", + "CgkI6fnP4IYMEAIQBg", + "CgkI6fnP4IYMEAIQBw", + "CgkI6fnP4IYMEAIQCA", + "CgkI6fnP4IYMEAIQCQ", + "CgkI6fnP4IYMEAIQCg", + "CgkI6fnP4IYMEAIQAQ", + "CgkI6fnP4IYMEAIQCw", + "CgkI6fnP4IYMEAIQDA", + "CgkI6fnP4IYMEAIQDQ", + "CgkI6fnP4IYMEAIQDg", + "CgkI6fnP4IYMEAIQDw", + "CgkI6fnP4IYMEAIQEA", + "CgkI6fnP4IYMEAIQEQ", + "CgkI6fnP4IYMEAIQEg" + ] +} \ No newline at end of file diff --git a/assets/liveMvStart.json b/assets/liveMvStart.json new file mode 100644 index 0000000..f09e326 --- /dev/null +++ b/assets/liveMvStart.json @@ -0,0 +1,123 @@ +{ + "uniq_id": 1684755047154917443, + "user_model_diff": { + "user_status": { + "name": { + "dot_under_text": "梦路2号机@果果厨" + }, + "nickname": { + "dot_under_text": "梦路" + }, + "last_login_at": 1684754024, + "rank": 122, + "exp": 416263, + "message": { + "dot_under_text": "B站主播:梦路_YumeMichi" + }, + "recommend_card_master_id": 200013001, + "max_friend_num": 0, + "live_point_full_at": 1684158189, + "live_point_broken": 150, + "live_point_subscription_recovery_daily_count": 1, + "live_point_subscription_recovery_daily_reset_at": 1656259200, + "activity_point_count": 0, + "activity_point_reset_at": 1684123200, + "activity_point_payment_recovery_daily_count": 10, + "activity_point_payment_recovery_daily_reset_at": 1683734400, + "game_money": 115665089, + "card_exp": 32316167, + "free_sns_coin": 280, + "apple_sns_coin": 0, + "google_sns_coin": 0, + "cash": 0, + "subscription_coin": 30, + "birth_date": null, + "birth_month": 10, + "birth_day": 18, + "latest_live_deck_id": 1, + "main_lesson_deck_id": 1, + "favorite_member_id": 1, + "last_live_difficulty_id": 12092302, + "lp_magnification": 1, + "emblem_id": 13100608, + "device_token": "", + "tutorial_phase": 99, + "tutorial_end_at": 1622217482, + "login_days": 446, + "navi_tap_count": 1, + "navi_tap_recover_at": 1684771200, + "is_auto_mode": false, + "max_score_live_difficulty_master_id": 12037401, + "live_max_score": 40553270, + "max_combo_live_difficulty_master_id": 12037401, + "live_max_combo": 301, + "lesson_resume_status": 1, + "accessory_box_additional": 90, + "terms_of_use_version": 0, + "bootstrap_sifid_check_at": 1683178908, + "gdpr_version": 0, + "member_guild_member_master_id": 1, + "member_guild_last_updated_at": 1659485328 + }, + "user_member_by_member_id": [], + "user_card_by_card_id": [], + "user_suit_by_suit_id": [], + "user_live_deck_by_id": [], + "user_live_party_by_id": [], + "user_lesson_deck_by_id": [], + "user_live_mv_deck_by_id": [], + "user_live_mv_deck_custom_by_id": [], + "user_live_difficulty_by_difficulty_id": [], + "user_story_main_by_story_main_id": [], + "user_story_main_selected_by_story_main_cell_id": [], + "user_voice_by_voice_id": [], + "user_emblem_by_emblem_id": [], + "user_gacha_ticket_by_ticket_id": [], + "user_gacha_point_by_point_id": [], + "user_lesson_enhancing_item_by_item_id": [], + "user_training_material_by_item_id": [], + "user_grade_up_item_by_item_id": [], + "user_custom_background_by_id": [], + "user_story_side_by_id": [], + "user_story_member_by_id": [], + "user_communication_member_detail_badge_by_id": [], + "user_story_event_history_by_id": [], + "user_recovery_lp_by_id": [], + "user_recovery_ap_by_id": [], + "user_mission_by_mission_id": [], + "user_daily_mission_by_mission_id": [], + "user_weekly_mission_by_mission_id": [], + "user_info_trigger_basic_by_trigger_id": [], + "user_info_trigger_card_grade_up_by_trigger_id": [], + "user_info_trigger_member_guild_support_item_expired_by_trigger_id": [], + "user_info_trigger_member_love_level_up_by_trigger_id": [], + "user_accessory_by_user_accessory_id": [], + "user_accessory_level_up_item_by_id": [], + "user_accessory_rarity_up_item_by_id": [], + "user_unlock_scenes_by_enum": [], + "user_scene_tips_by_enum": [], + "user_rule_description_by_id": [], + "user_exchange_event_point_by_id": [], + "user_school_idol_festival_id_reward_mission_by_id": [], + "user_gps_present_received_by_id": [], + "user_event_marathon_by_event_master_id": [], + "user_event_mining_by_event_master_id": [], + "user_event_coop_by_event_master_id": [], + "user_live_skip_ticket_by_id": [], + "user_story_event_unlock_item_by_id": [], + "user_event_marathon_booster_by_id": [], + "user_reference_book_by_id": [], + "user_review_request_process_flow_by_id": [], + "user_rank_exp_by_id": [], + "user_share_by_id": [], + "user_tower_by_tower_id": [], + "user_recovery_tower_card_used_count_item_by_recovery_tower_card_used_count_item_master_id": [], + "user_story_linkage_by_id": [], + "user_subscription_status_by_id": [], + "user_story_main_part_digest_movie_by_id": [], + "user_member_guild_by_id": [], + "user_member_guild_support_item_by_id": [], + "user_daily_theater_by_daily_theater_id": [], + "user_play_list_by_id": [] + } +} \ No newline at end of file diff --git a/assets/updateCardNewFlag.json b/assets/updateCardNewFlag.json new file mode 100644 index 0000000..24260fb --- /dev/null +++ b/assets/updateCardNewFlag.json @@ -0,0 +1,122 @@ +{ + "user_model_diff": { + "user_status": { + "name": { + "dot_under_text": "梦路2号机@果果厨" + }, + "nickname": { + "dot_under_text": "梦路" + }, + "last_login_at": 1684754024, + "rank": 122, + "exp": 416263, + "message": { + "dot_under_text": "B站主播:梦路_YumeMichi" + }, + "recommend_card_master_id": 200013001, + "max_friend_num": 0, + "live_point_full_at": 1684158189, + "live_point_broken": 150, + "live_point_subscription_recovery_daily_count": 1, + "live_point_subscription_recovery_daily_reset_at": 1656259200, + "activity_point_count": 0, + "activity_point_reset_at": 1684123200, + "activity_point_payment_recovery_daily_count": 10, + "activity_point_payment_recovery_daily_reset_at": 1683734400, + "game_money": 115665089, + "card_exp": 32316167, + "free_sns_coin": 280, + "apple_sns_coin": 0, + "google_sns_coin": 0, + "cash": 0, + "subscription_coin": 30, + "birth_date": null, + "birth_month": 10, + "birth_day": 18, + "latest_live_deck_id": 1, + "main_lesson_deck_id": 1, + "favorite_member_id": 1, + "last_live_difficulty_id": 12092302, + "lp_magnification": 1, + "emblem_id": 13100608, + "device_token": "", + "tutorial_phase": 99, + "tutorial_end_at": 1622217482, + "login_days": 446, + "navi_tap_count": 1, + "navi_tap_recover_at": 1683043200, + "is_auto_mode": false, + "max_score_live_difficulty_master_id": 12037401, + "live_max_score": 40553270, + "max_combo_live_difficulty_master_id": 12037401, + "live_max_combo": 301, + "lesson_resume_status": 1, + "accessory_box_additional": 90, + "terms_of_use_version": 0, + "bootstrap_sifid_check_at": 1683178908, + "gdpr_version": 0, + "member_guild_member_master_id": 1, + "member_guild_last_updated_at": 1659485328 + }, + "user_member_by_member_id": [], + "user_card_by_card_id": [], + "user_suit_by_suit_id": [], + "user_live_deck_by_id": [], + "user_live_party_by_id": [], + "user_lesson_deck_by_id": [], + "user_live_mv_deck_by_id": [], + "user_live_mv_deck_custom_by_id": [], + "user_live_difficulty_by_difficulty_id": [], + "user_story_main_by_story_main_id": [], + "user_story_main_selected_by_story_main_cell_id": [], + "user_voice_by_voice_id": [], + "user_emblem_by_emblem_id": [], + "user_gacha_ticket_by_ticket_id": [], + "user_gacha_point_by_point_id": [], + "user_lesson_enhancing_item_by_item_id": [], + "user_training_material_by_item_id": [], + "user_grade_up_item_by_item_id": [], + "user_custom_background_by_id": [], + "user_story_side_by_id": [], + "user_story_member_by_id": [], + "user_communication_member_detail_badge_by_id": [], + "user_story_event_history_by_id": [], + "user_recovery_lp_by_id": [], + "user_recovery_ap_by_id": [], + "user_mission_by_mission_id": [], + "user_daily_mission_by_mission_id": [], + "user_weekly_mission_by_mission_id": [], + "user_info_trigger_basic_by_trigger_id": [], + "user_info_trigger_card_grade_up_by_trigger_id": [], + "user_info_trigger_member_guild_support_item_expired_by_trigger_id": [], + "user_info_trigger_member_love_level_up_by_trigger_id": [], + "user_accessory_by_user_accessory_id": [], + "user_accessory_level_up_item_by_id": [], + "user_accessory_rarity_up_item_by_id": [], + "user_unlock_scenes_by_enum": [], + "user_scene_tips_by_enum": [], + "user_rule_description_by_id": [], + "user_exchange_event_point_by_id": [], + "user_school_idol_festival_id_reward_mission_by_id": [], + "user_gps_present_received_by_id": [], + "user_event_marathon_by_event_master_id": [], + "user_event_mining_by_event_master_id": [], + "user_event_coop_by_event_master_id": [], + "user_live_skip_ticket_by_id": [], + "user_story_event_unlock_item_by_id": [], + "user_event_marathon_booster_by_id": [], + "user_reference_book_by_id": [], + "user_review_request_process_flow_by_id": [], + "user_rank_exp_by_id": [], + "user_share_by_id": [], + "user_tower_by_tower_id": [], + "user_recovery_tower_card_used_count_item_by_recovery_tower_card_used_count_item_master_id": [], + "user_story_linkage_by_id": [], + "user_subscription_status_by_id": [], + "user_story_main_part_digest_movie_by_id": [], + "user_member_guild_by_id": [], + "user_member_guild_support_item_by_id": [], + "user_daily_theater_by_daily_theater_id": [], + "user_play_list_by_id": [] + } +} \ No newline at end of file diff --git a/model/live.go b/model/live.go index 45369f5..7d297b7 100644 --- a/model/live.go +++ b/model/live.go @@ -1,5 +1,6 @@ package model +/* ==== SIF START ==== */ // GameOverResp ... type GameOverResp struct { ResponseData []interface{} `json:"response_data"` @@ -653,3 +654,67 @@ type LiveIconInfoResp struct { CommandNum bool `json:"commandNum"` TimeStamp int64 `json:"timeStamp"` } + +/* ==== SIF END ==== */ + +/* ==== AS START ==== */ +// LiveSaveDeckReq ... +type LiveSaveDeckReq struct { + LiveMasterID int `json:"live_master_id"` + LiveMvDeckType int `json:"live_mv_deck_type"` + MemberMasterIDByPos []int `json:"member_master_id_by_pos"` + SuitMasterIDByPos []int `json:"suit_master_id_by_pos"` + ViewStatusByPos []int `json:"view_status_by_pos"` +} + +// LiveSaveDeckResp ... +type LiveSaveDeckResp struct { + UserModel UserModel `json:"user_model"` +} + +// UserMemberInfo ... +type UserMemberInfo struct { + MemberMasterID int `json:"member_master_id"` + CustomBackgroundMasterID int `json:"custom_background_master_id"` + SuitMasterID int `json:"suit_master_id"` + LovePoint int `json:"love_point"` + LovePointLimit int `json:"love_point_limit"` + LoveLevel int `json:"love_level"` + ViewStatus int `json:"view_status"` + IsNew bool `json:"is_new"` +} + +// UserMemberByMemberID ... +type UserMemberByMemberID interface{} + +// UserLiveMvDeckInfo ... +type UserLiveMvDeckInfo struct { + LiveMasterID interface{} `json:"live_master_id"` + MemberMasterID1 interface{} `json:"member_master_id_1"` + MemberMasterID2 interface{} `json:"member_master_id_2"` + MemberMasterID3 interface{} `json:"member_master_id_3"` + MemberMasterID4 interface{} `json:"member_master_id_4"` + MemberMasterID5 interface{} `json:"member_master_id_5"` + MemberMasterID6 interface{} `json:"member_master_id_6"` + MemberMasterID7 interface{} `json:"member_master_id_7"` + MemberMasterID8 interface{} `json:"member_master_id_8"` + MemberMasterID9 interface{} `json:"member_master_id_9"` + MemberMasterID10 interface{} `json:"member_master_id_10"` + MemberMasterID11 interface{} `json:"member_master_id_11"` + MemberMasterID12 interface{} `json:"member_master_id_12"` + SuitMasterID1 interface{} `json:"suit_master_id_1"` + SuitMasterID2 interface{} `json:"suit_master_id_2"` + SuitMasterID3 interface{} `json:"suit_master_id_3"` + SuitMasterID4 interface{} `json:"suit_master_id_4"` + SuitMasterID5 interface{} `json:"suit_master_id_5"` + SuitMasterID6 interface{} `json:"suit_master_id_6"` + SuitMasterID7 interface{} `json:"suit_master_id_7"` + SuitMasterID8 interface{} `json:"suit_master_id_8"` + SuitMasterID9 interface{} `json:"suit_master_id_9"` + SuitMasterID10 interface{} `json:"suit_master_id_10"` + SuitMasterID11 interface{} `json:"suit_master_id_11"` + SuitMasterID12 interface{} `json:"suit_master_id_12"` +} + +// UserLiveMvDeckCustomByID ... +type UserLiveMvDeckCustomByID interface{} diff --git a/model/login.go b/model/login.go index 08a0e8a..422d88f 100644 --- a/model/login.go +++ b/model/login.go @@ -45,14 +45,14 @@ type AsLoginRes struct { // UserModel ... type UserModel struct { UserStatus AsUserStatus `json:"user_status"` - UserMemberByMemberID []interface{} `json:"user_member_by_member_id"` + UserMemberByMemberID interface{} `json:"user_member_by_member_id"` UserCardByCardID []interface{} `json:"user_card_by_card_id"` UserSuitBySuitID []interface{} `json:"user_suit_by_suit_id"` UserLiveDeckByID []interface{} `json:"user_live_deck_by_id"` UserLivePartyByID []interface{} `json:"user_live_party_by_id"` UserLessonDeckByID []interface{} `json:"user_lesson_deck_by_id"` UserLiveMvDeckByID []interface{} `json:"user_live_mv_deck_by_id"` - UserLiveMvDeckCustomByID []interface{} `json:"user_live_mv_deck_custom_by_id"` + UserLiveMvDeckCustomByID interface{} `json:"user_live_mv_deck_custom_by_id"` UserLiveDifficultyByDifficultyID []interface{} `json:"user_live_difficulty_by_difficulty_id"` UserStoryMainByStoryMainID []interface{} `json:"user_story_main_by_story_main_id"` UserStoryMainSelectedByStoryMainCellID []interface{} `json:"user_story_main_selected_by_story_main_cell_id"` @@ -126,7 +126,7 @@ type Message struct { type AsUserStatus struct { Name Name `json:"name"` Nickname Nickname `json:"nickname"` - LastLoginAt int `json:"last_login_at"` + LastLoginAt int64 `json:"last_login_at"` Rank int `json:"rank"` Exp int `json:"exp"` Message Message `json:"message"` diff --git a/router/router.go b/router/router.go index 3ed8cb4..058078d 100644 --- a/router/router.go +++ b/router/router.go @@ -306,5 +306,244 @@ func AsRouter(r *gin.Engine) { ctx.Header("Content-Type", "application/json") ctx.String(http.StatusOK, string(mm)) }) + s.POST("/card/updateCardNewFlag", func(ctx *gin.Context) { + resp := SignResp(ctx.GetString("ep"), utils.ReadAllText("assets/updateCardNewFlag.json"), sessionKey) + + ctx.Header("Content-Type", "application/json") + ctx.String(http.StatusOK, resp) + }) + s.POST("/bootstrap/getClearedPlatformAchievement", func(ctx *gin.Context) { + resp := SignResp(ctx.GetString("ep"), utils.ReadAllText("assets/getClearedPlatformAchievement.json"), sessionKey) + + ctx.Header("Content-Type", "application/json") + ctx.String(http.StatusOK, resp) + }) + s.POST("/live/fetchLiveMusicSelect", func(ctx *gin.Context) { + resp := SignResp(ctx.GetString("ep"), utils.ReadAllText("assets/fetchLiveMusicSelect.json"), sessionKey) + + ctx.Header("Content-Type", "application/json") + ctx.String(http.StatusOK, resp) + }) + s.POST("/liveMv/start", func(ctx *gin.Context) { + resp := SignResp(ctx.GetString("ep"), utils.ReadAllText("assets/liveMvStart.json"), sessionKey) + + ctx.Header("Content-Type", "application/json") + ctx.String(http.StatusOK, resp) + }) + s.POST("/liveMv/saveDeck", func(ctx *gin.Context) { + body, err := io.ReadAll(ctx.Request.Body) + if err != nil { + panic(err) + } + defer ctx.Request.Body.Close() + // fmt.Println(string(body)) + + req := []model.AsReq{} + err = json.Unmarshal(body, &req) + if err != nil { + panic(err) + } + + reqBody, ok := req[0].(map[string]interface{}) + if !ok { + panic("Assertion failed!") + } + + reqB, err := json.Marshal(reqBody) + if err != nil { + panic(err) + } + // fmt.Println(string(reqB)) + + saveReq := model.LiveSaveDeckReq{} + err = json.Unmarshal(reqB, &saveReq) + if err != nil { + panic(err) + } + // fmt.Println(saveReq) + + userLiveMvDeckInfo := model.UserLiveMvDeckInfo{ + LiveMasterID: saveReq.LiveMasterID, + } + + memberIds := map[int]int{} + for k, v := range saveReq.MemberMasterIDByPos { + if k%2 == 0 { + memberId := saveReq.MemberMasterIDByPos[k+1] + memberIds[v] = memberId + + switch v { + case 1: + userLiveMvDeckInfo.MemberMasterID1 = memberId + case 2: + userLiveMvDeckInfo.MemberMasterID2 = memberId + case 3: + userLiveMvDeckInfo.MemberMasterID3 = memberId + case 4: + userLiveMvDeckInfo.MemberMasterID4 = memberId + case 5: + userLiveMvDeckInfo.MemberMasterID5 = memberId + case 6: + userLiveMvDeckInfo.MemberMasterID6 = memberId + case 7: + userLiveMvDeckInfo.MemberMasterID7 = memberId + case 8: + userLiveMvDeckInfo.MemberMasterID8 = memberId + case 9: + userLiveMvDeckInfo.MemberMasterID9 = memberId + case 10: + userLiveMvDeckInfo.MemberMasterID10 = memberId + case 11: + userLiveMvDeckInfo.MemberMasterID11 = memberId + case 12: + userLiveMvDeckInfo.MemberMasterID12 = memberId + } + } + } + // fmt.Println(memberIds) + + suitIds := map[int]int{} + for k, v := range saveReq.SuitMasterIDByPos { + if k%2 == 0 { + suitId := saveReq.SuitMasterIDByPos[k+1] + suitIds[v] = suitId + + switch v { + case 1: + userLiveMvDeckInfo.SuitMasterID1 = suitId + case 2: + userLiveMvDeckInfo.SuitMasterID2 = suitId + case 3: + userLiveMvDeckInfo.SuitMasterID3 = suitId + case 4: + userLiveMvDeckInfo.SuitMasterID4 = suitId + case 5: + userLiveMvDeckInfo.SuitMasterID5 = suitId + case 6: + userLiveMvDeckInfo.SuitMasterID6 = suitId + case 7: + userLiveMvDeckInfo.SuitMasterID7 = suitId + case 8: + userLiveMvDeckInfo.SuitMasterID8 = suitId + case 9: + userLiveMvDeckInfo.SuitMasterID9 = suitId + case 10: + userLiveMvDeckInfo.SuitMasterID10 = suitId + case 11: + userLiveMvDeckInfo.SuitMasterID11 = suitId + case 12: + userLiveMvDeckInfo.SuitMasterID12 = suitId + } + } + } + // fmt.Println(suitIds) + + userLiveMvDeckCustomByID := []model.UserLiveMvDeckCustomByID{} + userLiveMvDeckCustomByID = append(userLiveMvDeckCustomByID, saveReq.LiveMasterID) + userLiveMvDeckCustomByID = append(userLiveMvDeckCustomByID, userLiveMvDeckInfo) + // fmt.Println(userLiveMvDeckCustomByID) + + viewStatusIds := map[int]int{} + for k, v := range saveReq.ViewStatusByPos { + if k%2 == 0 { + viewStatusId := saveReq.ViewStatusByPos[k+1] + viewStatusIds[v] = viewStatusId + } + } + // fmt.Println(viewStatusIds) + + userMemberByMemberID := []model.UserMemberByMemberID{} + for k, v := range memberIds { + userMemberByMemberID = append(userMemberByMemberID, v) + userMemberByMemberID = append(userMemberByMemberID, model.UserMemberInfo{ + MemberMasterID: v, + CustomBackgroundMasterID: 103506600, + SuitMasterID: suitIds[k], + LovePoint: 0, + LovePointLimit: 999999, + LoveLevel: 1, + ViewStatus: viewStatusIds[k], + IsNew: true, + }) + } + // fmt.Println(userMemberByMemberID) + + saveResp := model.LiveSaveDeckResp{ + UserModel: model.UserModel{ + UserStatus: CommonUserStatus(), + UserMemberByMemberID: userMemberByMemberID, + UserCardByCardID: []interface{}{}, + UserSuitBySuitID: []interface{}{}, + UserLiveDeckByID: []interface{}{}, + UserLivePartyByID: []interface{}{}, + UserLessonDeckByID: []interface{}{}, + UserLiveMvDeckByID: []interface{}{}, + UserLiveMvDeckCustomByID: userLiveMvDeckCustomByID, + UserLiveDifficultyByDifficultyID: []interface{}{}, + UserStoryMainByStoryMainID: []interface{}{}, + UserStoryMainSelectedByStoryMainCellID: []interface{}{}, + UserVoiceByVoiceID: []interface{}{}, + UserEmblemByEmblemID: []interface{}{}, + UserGachaTicketByTicketID: []interface{}{}, + UserGachaPointByPointID: []interface{}{}, + UserLessonEnhancingItemByItemID: []interface{}{}, + UserTrainingMaterialByItemID: []interface{}{}, + UserGradeUpItemByItemID: []interface{}{}, + UserCustomBackgroundByID: []interface{}{}, + UserStorySideByID: []interface{}{}, + UserStoryMemberByID: []interface{}{}, + UserCommunicationMemberDetailBadgeByID: []interface{}{}, + UserStoryEventHistoryByID: []interface{}{}, + UserRecoveryLpByID: []interface{}{}, + UserRecoveryApByID: []interface{}{}, + UserMissionByMissionID: []interface{}{}, + UserDailyMissionByMissionID: []interface{}{}, + UserWeeklyMissionByMissionID: []interface{}{}, + UserInfoTriggerBasicByTriggerID: []interface{}{}, + UserInfoTriggerCardGradeUpByTriggerID: []interface{}{}, + UserInfoTriggerMemberGuildSupportItemExpiredByTriggerID: []interface{}{}, + UserInfoTriggerMemberLoveLevelUpByTriggerID: []interface{}{}, + UserAccessoryByUserAccessoryID: []interface{}{}, + UserAccessoryLevelUpItemByID: []interface{}{}, + UserAccessoryRarityUpItemByID: []interface{}{}, + UserUnlockScenesByEnum: []interface{}{}, + UserSceneTipsByEnum: []interface{}{}, + UserRuleDescriptionByID: []interface{}{}, + UserExchangeEventPointByID: []interface{}{}, + UserSchoolIdolFestivalIDRewardMissionByID: []interface{}{}, + UserGpsPresentReceivedByID: []interface{}{}, + UserEventMarathonByEventMasterID: []interface{}{}, + UserEventMiningByEventMasterID: []interface{}{}, + UserEventCoopByEventMasterID: []interface{}{}, + UserLiveSkipTicketByID: []interface{}{}, + UserStoryEventUnlockItemByID: []interface{}{}, + UserEventMarathonBoosterByID: []interface{}{}, + UserReferenceBookByID: []interface{}{}, + UserReviewRequestProcessFlowByID: []interface{}{}, + UserRankExpByID: []interface{}{}, + UserShareByID: []interface{}{}, + UserTowerByTowerID: []interface{}{}, + UserRecoveryTowerCardUsedCountItemByRecoveryTowerCardUsedCountItemMasterID: []interface{}{}, + UserStoryLinkageByID: []interface{}{}, + UserSubscriptionStatusByID: []interface{}{}, + UserStoryMainPartDigestMovieByID: []interface{}{}, + UserMemberGuildByID: []interface{}{}, + UserMemberGuildSupportItemByID: []interface{}{}, + UserDailyTheaterByDailyTheaterID: []interface{}{}, + UserPlayListByID: []interface{}{}, + }, + } + respB, err := json.Marshal(saveResp) + if err != nil { + panic(err) + } + // fmt.Println(string(b)) + + resp := SignResp(ctx.GetString("ep"), string(respB), sessionKey) + // fmt.Println(resp) + + ctx.Header("Content-Type", "application/json") + ctx.String(http.StatusOK, resp) + }) } } diff --git a/router/utils.go b/router/utils.go index 4da9d58..eecdbba 100644 --- a/router/utils.go +++ b/router/utils.go @@ -4,6 +4,7 @@ import ( "fmt" "honoka-chan/config" "honoka-chan/encrypt" + "honoka-chan/model" "time" ) @@ -15,3 +16,64 @@ func SignResp(ep, body, key string) (resp string) { resp = fmt.Sprintf("[%s,\"%s\"]", signBody, sign) return } + +func CommonUserStatus() model.AsUserStatus { + return model.AsUserStatus{ + Name: model.Name{ + DotUnderText: "梦路2号机@果果厨", + }, + Nickname: model.Nickname{ + DotUnderText: "梦路", + }, + LastLoginAt: time.Now().Unix(), + Rank: 122, + Exp: 416263, + Message: model.Message{ + DotUnderText: "B站主播:梦路_YumeMichi", + }, + RecommendCardMasterID: 200013001, + MaxFriendNum: 0, + LivePointFullAt: 1684158189, + LivePointBroken: 150, + LivePointSubscriptionRecoveryDailyCount: 1, + LivePointSubscriptionRecoveryDailyResetAt: 1656259200, + ActivityPointCount: 0, + ActivityPointResetAt: 1684123200, + ActivityPointPaymentRecoveryDailyCount: 10, + ActivityPointPaymentRecoveryDailyResetAt: 1683734400, + GameMoney: 115665089, + CardExp: 32316167, + FreeSnsCoin: 280, + AppleSnsCoin: 0, + GoogleSnsCoin: 0, + Cash: 0, + SubscriptionCoin: 30, + BirthDate: nil, + BirthMonth: 10, + BirthDay: 18, + LatestLiveDeckID: 1, + MainLessonDeckID: 1, + FavoriteMemberID: 1, + LastLiveDifficultyID: 12092302, + LpMagnification: 1, + EmblemID: 13100608, + DeviceToken: "", + TutorialPhase: 99, + TutorialEndAt: 1622217482, + LoginDays: 446, + NaviTapCount: 2, + NaviTapRecoverAt: 1684771200, + IsAutoMode: false, + MaxScoreLiveDifficultyMasterID: 12037401, + LiveMaxScore: 40553270, + MaxComboLiveDifficultyMasterID: 12037401, + LiveMaxCombo: 301, + LessonResumeStatus: 1, + AccessoryBoxAdditional: 90, + TermsOfUseVersion: 0, + BootstrapSifidCheckAt: 1683178908, + GdprVersion: 0, + MemberGuildMemberMasterID: 1, + MemberGuildLastUpdatedAt: 1659485328, + } +}