import uuid import json import datetime import argparse import requests import glob, os import sys import re session = requests.Session() def change_state(server_address, access_token, quest_content_id, state): api_url = f"{server_address}/api/v1/QuestEditor/quest-state/{quest_content_id}?state={state}" headers = { "Authorization": f"Bearer {access_token}" } response = session.patch(api_url, headers=headers) print(json.dumps(response.json(), ensure_ascii=False, indent=4)) return response def delete_all_quest(server_address, access_token): api_url = f"{server_address}/api/v1/QuestEditor/summaries" headers = { "Authorization": f"Bearer {access_token}" } response = session.get(api_url, headers=headers) for quest in response.json()["summaries"]: questContentId = quest["questContentId"] api_url = f"{server_address}/api/v1/QuestEditor/quest/{questContentId}" response = session.delete(api_url, headers=headers) if __name__ == '__main__': parser = argparse.ArgumentParser(prog='insert-quest', description='insert quest') parser.add_argument('--env', required=True, type=str, help=f'') parser.add_argument('--login_id', required=True, type=str, help=f'') parser.add_argument('--folder', required=True, type=str, help=f'') args = parser.parse_args() print(args.env) print(args.login_id) print(args.folder) server_address = "" if args.env == "local": server_address="http://localhost:11000/" elif args.env == "aws": server_address="https://dev-ugqapi.caliverse.io:11000" print(f'server_address: {server_address}') api_url = f"{server_address}/api/v1/Account/dev-login-v2" body = { "loginAccountId": args.login_id } response = session.post(api_url, json=body) access_token = response.json()["accessToken"] user_guid = response.json()["userGuid"] print(access_token) delete_all_quest(server_address, access_token) questContentId = "" with open(f'{args.folder}/QuestContent.json', encoding='utf-8') as json_file: json_data = json.load(json_file) api_url = f"{server_address}/api/v1/QuestEditor/quest" headers = { "Authorization": f"Bearer {access_token}", "accept-language": "ko" } response = session.post(api_url, json=json_data, headers=headers) print(json.dumps(response.json(), ensure_ascii=False, indent=4)) questContentId = response.json()["questContentId"] for file in glob.glob(f"{args.folder}/QuestDialog*.json"): with open(file, encoding='utf-8') as json_file: json_data = json.load(json_file) result = re.search('\\[(.*)\\]', file) index = result.group(1) print(f"{file} -> {index}") api_url = f"{server_address}/api/v1/QuestEditor/quest-dialog/{questContentId}?taskIndex={index}" response = session.post(api_url, json=json_data, headers=headers) print(json.dumps(response.json(), ensure_ascii=False, indent=4)) api_url = f"{server_address}/api/v1/QuestEditor/quest-image/{questContentId}?titleImageId=1&bannerImageId=2" response = session.post(api_url, headers=headers) print(json.dumps(response.json(), ensure_ascii=False, indent=4)) api_url = f"{server_address}/api/v1/QuestEditor/quest-state/{questContentId}?state=Test" response = session.patch(api_url, headers=headers) print(json.dumps(response.json(), ensure_ascii=False, indent=4)) quest_id = response.json()["questId"] revision = response.json()["revision"] ## ingame api api_url = f"{server_address}/api/v1/InGame/set-test-completed/{user_guid}?questId={quest_id}&revision={revision}" response = session.post(api_url) ## web api api_url = f"{server_address}/api/v1/QuestEditor/quest-state/{questContentId}?state=Live" response = session.patch(api_url, json=json_data, headers=headers) print(json.dumps(response.json(), ensure_ascii=False, indent=4)) change_state(server_address, access_token, questContentId, "Standby") change_state(server_address, access_token, questContentId, "Editable") response = change_state(server_address, access_token, questContentId, "Test") questContentId = response.json()["questContentId"] quest_id = response.json()["questId"] revision = response.json()["revision"] api_url = f"{server_address}/api/v1/InGame/set-test-completed/{user_guid}?questId={quest_id}&revision={revision}" response = session.post(api_url) change_state(server_address, access_token, questContentId, "Live")