neo-2 / chat-app /roblox_api.py
bentosmau
Translate all code comments, strings, and variable names to English
9fae0c6
import requests
HEADERS = {
"User-Agent": "neo1/1.0",
"Accept": "application/json",
}
def search_player(name):
try:
url = "https://users.roblox.com/v1/usernames/users"
resp = requests.post(
url,
json={"usernames": [name], "excludeBannedUsers": False},
headers=HEADERS,
timeout=8,
)
data = resp.json()
users = data.get("data", [])
if not users:
return None
user = users[0]
user_id = user["id"]
profile = get_profile(user_id)
avatar = get_avatar(user_id)
stats = get_stats(user_id)
return {
"id": user_id,
"name": user.get("name"),
"display_name": user.get("displayName"),
"description": profile.get("description", ""),
"created": profile.get("created", "Unknown"),
"is_banned": profile.get("isBanned", False),
"avatar": avatar,
"friends": stats.get("friends", "N/A"),
"followers": stats.get("followers", "N/A"),
"following": stats.get("following", "N/A"),
}
except Exception as e:
return {"error": str(e)}
def get_profile(user_id):
try:
url = f"https://users.roblox.com/v1/users/{user_id}"
resp = requests.get(url, headers=HEADERS, timeout=8)
return resp.json()
except Exception:
return {}
def get_avatar(user_id):
try:
url = (
f"https://thumbnails.roblox.com/v1/users/avatar-headshot"
f"?userIds={user_id}&size=420x420&format=Png&isCircular=false"
)
resp = requests.get(url, headers=HEADERS, timeout=8)
data = resp.json()
return data.get("data", [{}])[0].get("imageUrl", None)
except Exception:
return None
def get_stats(user_id):
result = {}
try:
r = requests.get(
f"https://friends.roblox.com/v1/users/{user_id}/friends/count",
headers=HEADERS, timeout=8,
)
result["friends"] = r.json().get("count", "N/A")
except Exception:
result["friends"] = "N/A"
try:
r = requests.get(
f"https://friends.roblox.com/v1/users/{user_id}/followers/count",
headers=HEADERS, timeout=8,
)
result["followers"] = r.json().get("count", "N/A")
except Exception:
result["followers"] = "N/A"
try:
r = requests.get(
f"https://friends.roblox.com/v1/users/{user_id}/followings/count",
headers=HEADERS, timeout=8,
)
result["following"] = r.json().get("count", "N/A")
except Exception:
result["following"] = "N/A"
return result
def search_game(name):
try:
url = f"https://games.roblox.com/v1/games/list?keyword={name}&maxRows=5&startRows=0"
resp = requests.get(url, headers=HEADERS, timeout=8)
data = resp.json()
games = data.get("games", [])
if not games:
return None
universe_id = games[0].get("universeId")
if not universe_id:
return None
return get_game_details(universe_id)
except Exception as e:
return {"error": str(e)}
def get_game_details(universe_id):
try:
url = f"https://games.roblox.com/v1/games?universeIds={universe_id}"
resp = requests.get(url, headers=HEADERS, timeout=8)
data = resp.json()
games = data.get("data", [])
if not games:
return None
g = games[0]
last_update = g.get("updated", "Unknown")
if last_update and last_update != "Unknown":
last_update = last_update[:10]
return {
"name": g.get("name"),
"genre": g.get("genre", "Uncategorized"),
"visits": g.get("visits", 0),
"last_update": last_update,
"description": g.get("description") or "No description.",
"creator": g.get("creator", {}).get("name", "Unknown"),
"playing": g.get("playing", 0),
"id": universe_id,
}
except Exception as e:
return {"error": str(e)}
def format_player(data):
if not data:
return "I couldn't find that player on Roblox. Please check that the username is correct."
if "error" in data:
return f"An error occurred while searching for the player: {data['error']}"
description = data.get("description") or "No description."
created = data.get("created", "Unknown")
if created != "Unknown":
created = created[:10]
banned = "Yes โš ๏ธ" if data.get("is_banned") else "No โœ…"
friends = data.get("friends", "N/A")
followers = data.get("followers", "N/A")
following = data.get("following", "N/A")
lines = [
"Here's the public data for this Roblox player ๐Ÿ˜Š",
"",
f"๐Ÿ‘ค **Username:** {data['name']}",
f"โœ๏ธ **Display name:** {data['display_name']}",
f"๐Ÿ†” **ID:** {data['id']}",
f"๐Ÿ“ **Description:** {description}",
f"๐Ÿ“… **Account created:** {created}",
f"๐Ÿšซ **Banned?:** {banned}",
"",
"๐Ÿ“Š **Stats:**",
f"๐Ÿ‘ซ **Friends:** {friends}",
f"๐Ÿ‘ฅ **Followers:** {followers}",
f"โžก๏ธ **Following:** {following}",
]
if data.get("avatar"):
lines.append(f"\n๐Ÿ–ผ๏ธ **Avatar:** {data['avatar']}")
return "\n".join(lines)
def format_game(data):
if not data:
return "I couldn't find that game on Roblox. Try a different name."
if "error" in data:
return f"An error occurred while searching for the game: {data['error']}"
visits = data.get("visits", 0)
try:
visits = f"{int(visits):,}"
except Exception:
visits = str(visits)
playing = data.get("playing", 0)
try:
playing = f"{int(playing):,}"
except Exception:
playing = str(playing)
lines = [
"Roblox game data ๐Ÿ˜Ž",
"",
f"๐ŸŽฎ **Name:** {data.get('name', 'Unknown')}",
f"๐ŸŽญ **Genre:** {data.get('genre', 'Uncategorized')}",
f"๐Ÿ‘๏ธ **Visits:** {visits}",
f"๐Ÿ”„ **Last update:** {data.get('last_update', 'Unknown')}",
f"๐Ÿ“ **Description:** {data.get('description', 'No description.')}",
"",
f"๐Ÿ‘ค **Creator:** {data.get('creator', 'Unknown')}",
f"๐Ÿ‘ฅ **Currently playing:** {playing}",
]
return "\n".join(lines)