@@ -61,6 +61,20 @@ def __init__(self, options: Dict[str, Any]) -> None:
6161 credentials = options .get ("credentials" )
6262 if not credentials :
6363 raise ValueError ("Twitter API credentials are required." )
64+
65+ # Capture token for internal use
66+ self .game_twitter_access_token = credentials .get ("gameTwitterAccessToken" )
67+
68+ # Auth gate: require EITHER gameTwitterAccessToken OR full credential set
69+ has_api_credentials = all (
70+ credentials .get (key ) for key in ["bearerToken" , "apiKey" , "apiSecretKey" , "accessToken" , "accessTokenSecret" ]
71+ )
72+
73+ if not self .game_twitter_access_token and not has_api_credentials :
74+ raise ValueError (
75+ "Missing valid authentication. Provide either a 'gameTwitterAccessToken' or all required Twitter API credentials."
76+ )
77+
6478 # Init Tweepy client
6579 self .twitter_client : virtuals_tweepy .Client = virtuals_tweepy .Client (
6680 bearer_token = credentials .get ("bearerToken" ),
@@ -74,7 +88,16 @@ def __init__(self, options: Dict[str, Any]) -> None:
7488 # Configure logging
7589 logging .basicConfig (level = logging .INFO )
7690 self .logger : logging .Logger = logging .getLogger (__name__ )
77-
78- self .game_twitter_access_token = credentials .get ("gameTwitterAccessToken" )
79-
8091
92+ self ._check_authentication ()
93+
94+ def _check_authentication (self ) -> None :
95+ """
96+ Check if the credentials provided are valid by calling the /me endpoint or fetching user info.
97+ """
98+ try :
99+ user = self .twitter_client .get_me (user_fields = ["public_metrics" ]).get ('data' )
100+ self .logger .info (f"Authenticated as: { user .get ('name' )} (@{ user .get ('username' )} )" )
101+ except virtuals_tweepy .TweepyException as e :
102+ self .logger .error (f"Authentication failed: { e } " )
103+ raise ValueError ("Invalid Twitter credentials or failed authentication." )
0 commit comments