99"""
1010
1111import asyncio
12+ import json
1213import re
1314from dataclasses import dataclass
1415from datetime import datetime
@@ -190,6 +191,7 @@ async def check_app_up_to_date(
190191 "Get detailed information about a Steam app including description, "
191192 "price, genres, release date, and more. Uses the Steam Store API."
192193 ),
194+ supports_json = True ,
193195 params = {
194196 "app_id" : {
195197 "type" : "integer" ,
@@ -208,6 +210,7 @@ async def get_app_details(
208210 self ,
209211 app_id : int ,
210212 country_code : str = "us" ,
213+ format : str = "text" ,
211214 ) -> str :
212215 """Get detailed app information from the Store API."""
213216 try :
@@ -220,24 +223,33 @@ async def get_app_details(
220223 },
221224 )
222225 except Exception as e :
223- return f"Error fetching app details: { e } "
226+ err = f"Error fetching app details: { e } "
227+ if format == "json" :
228+ return json .dumps ({"error" : err })
229+ return err
224230
225231 app_data = result .get (str (app_id ), {})
226232
227233 if not app_data .get ("success" , False ):
228- return f"App ID { app_id } not found or unavailable in region '{ country_code } '."
234+ err = f"App ID { app_id } not found or unavailable in region '{ country_code } '."
235+ if format == "json" :
236+ return json .dumps ({"error" : err })
237+ return err
229238
230239 data = app_data .get ("data" , {})
231240
232241 if not data :
233- return f"No data available for App ID { app_id } ."
242+ err = f"No data available for App ID { app_id } ."
243+ if format == "json" :
244+ return json .dumps ({"error" : err })
245+ return err
234246
235247 name = data .get ("name" , "Unknown" )
236248 app_type = data .get ("type" , "unknown" )
237249 is_free = data .get ("is_free" , False )
238250 short_desc = data .get ("short_description" , "" )
239- developers = ", " . join ( data .get ("developers" , ["Unknown" ]) )
240- publishers = ", " . join ( data .get ("publishers" , ["Unknown" ]) )
251+ developers = data .get ("developers" , [] )
252+ publishers = data .get ("publishers" , [] )
241253
242254 # Release date
243255 release_info = data .get ("release_date" , {})
@@ -279,6 +291,48 @@ async def get_app_details(
279291
280292 # Metacritic
281293 metacritic = data .get ("metacritic" , {})
294+
295+ if format == "json" :
296+ json_data : dict [str , Any ] = {
297+ "app_id" : app_id ,
298+ "name" : name ,
299+ "type" : app_type ,
300+ "is_free" : is_free ,
301+ "short_description" : short_desc ,
302+ "developers" : developers ,
303+ "publishers" : publishers ,
304+ "release_date" : release_date ,
305+ "coming_soon" : release_info .get ("coming_soon" , False ),
306+ "platforms" : {
307+ "windows" : platforms .get ("windows" , False ),
308+ "mac" : platforms .get ("mac" , False ),
309+ "linux" : platforms .get ("linux" , False ),
310+ },
311+ "genres" : genres ,
312+ "categories" : categories ,
313+ "store_url" : f"https://store.steampowered.com/app/{ app_id } " ,
314+ }
315+ # Add price info
316+ if is_free :
317+ json_data ["price" ] = {"is_free" : True }
318+ elif price_info :
319+ json_data ["price" ] = {
320+ "is_free" : False ,
321+ "currency" : price_info .get ("currency" , "" ),
322+ "initial" : price_info .get ("initial" , 0 ),
323+ "final" : price_info .get ("final" , 0 ),
324+ "discount_percent" : price_info .get ("discount_percent" , 0 ),
325+ "final_formatted" : price_info .get ("final_formatted" , "" ),
326+ }
327+ # Add metacritic if available
328+ if metacritic :
329+ json_data ["metacritic" ] = {
330+ "score" : metacritic .get ("score" ),
331+ "url" : metacritic .get ("url" , "" ),
332+ }
333+ return json .dumps (json_data , indent = 2 )
334+
335+ # Text format
282336 metacritic_str = ""
283337 if metacritic :
284338 score = metacritic .get ("score" , "N/A" )
@@ -287,8 +341,8 @@ async def get_app_details(
287341 output = [
288342 f"{ name } " ,
289343 f"App ID: { app_id } | Type: { app_type .title ()} " ,
290- f"Developer: { developers } " ,
291- f"Publisher: { publishers } " ,
344+ f"Developer: { ', ' . join ( developers ) if developers else 'Unknown' } " ,
345+ f"Publisher: { ', ' . join ( publishers ) if publishers else 'Unknown' } " ,
292346 f"Release Date: { release_date } " ,
293347 f"Price: { price_str } " ,
294348 f"Platforms: { platforms_str } " ,
0 commit comments