""" Example script that enables using your one-time-free gamertag change """ import argparse import asyncio import os from pprint import pprint import sys from httpx import HTTPStatusError from pythonxbox.api.client import XboxLiveClient from pythonxbox.authentication.manager import AuthenticationManager from pythonxbox.authentication.models import OAuth2TokenResponse from pythonxbox.common.signed_session import SignedSession from pythonxbox.scripts import CLIENT_ID, CLIENT_SECRET, TOKENS_FILE async def async_main() -> None: parser = argparse.ArgumentParser(description="Change your gamertag") parser.add_argument( "--tokens", "-t", default=TOKENS_FILE, help=f"Token filepath. Default: '{TOKENS_FILE}'", ) parser.add_argument( "--client-id", "-cid", default=os.environ.get("CLIENT_ID", CLIENT_ID), help="OAuth2 Client ID", ) parser.add_argument( "--client-secret", "-cs", default=os.environ.get("CLIENT_SECRET", CLIENT_SECRET), help="OAuth2 Client Secret", ) args = parser.parse_args() if not os.path.exists(args.tokens): print("No token file found, run xbox-authenticate") sys.exit(-1) async with SignedSession() as session: auth_mgr = AuthenticationManager( session, args.client_id, args.client_secret, "" ) with open(args.tokens) as f: tokens = f.read() auth_mgr.oauth = OAuth2TokenResponse.model_validate_json(tokens) try: await auth_mgr.refresh_tokens() except HTTPStatusError: print("Could not refresh tokens") sys.exit(-1) with open(args.tokens, mode="w") as f: f.write(auth_mgr.oauth.json()) xbl_client = XboxLiveClient(auth_mgr) try: resp = await xbl_client.people.get_friends_own() except HTTPStatusError: print("Invalid HTTP response") sys.exit(-1) pprint(resp.dict()) def main() -> None: asyncio.run(async_main()) if __name__ == "__main__": main()