fix: add error handling for getserve.rs

This commit is contained in:
2025-12-31 17:37:13 +01:00
parent 0a9b862fe9
commit 3f000b3cf7

View File

@@ -1,10 +1,10 @@
import random import random
import re import re
from datetime import datetime, timedelta, timezone from datetime import datetime, timedelta, timezone
import requests
from requests.exceptions import RequestException, Timeout, ConnectionError
import discord import discord
import requests
from bot.log import logger from bot.log import logger
@@ -13,18 +13,91 @@ def aware_utcnow():
def fetch_api_data(): def fetch_api_data():
response = requests.get("https://api.getserve.rs/v1/servers/alterware") """
Fetch data from the getserve.rs API
Returns:
dict: API response data or empty dict on failure
"""
url = "https://api.getserve.rs/v1/servers/alterware"
try:
response = requests.get(url, timeout=10)
response.raise_for_status()
if response.status_code == 200: if response.status_code == 200:
return response.json() return response.json()
else:
logger.warning(f"API returned non-200 status: {response.status_code}")
return {}
except Timeout:
logger.error(f"Request to {url} timed out after 10 seconds")
return {}
except ConnectionError as e:
# This catches DNS resolution errors, connection refused, etc.
logger.error(f"Connection error for {url}: {e}")
return {}
except RequestException as e:
logger.error(f"Request failed for {url}: {e}")
return {}
except ValueError as e:
logger.error(f"Failed to parse JSON response from {url}: {e}")
return {}
except Exception as e:
logger.error(f"Unexpected error while fetching data from {url}: {e}")
return {} return {}
async def fetch_game_stats(game: str): async def fetch_game_stats(game: str):
"""
Fetch game-specific stats from the getserve.rs API
Args:
game (str): Game identifier
Returns:
dict: Game stats data or None on failure
"""
url = f"https://api.getserve.rs/v1/servers/alterware/{game}" url = f"https://api.getserve.rs/v1/servers/alterware/{game}"
response = requests.get(url)
try:
response = requests.get(url, timeout=10)
response.raise_for_status()
if response.status_code == 200: if response.status_code == 200:
return response.json() return response.json()
else: else:
logger.warning(
f"API returned non-200 status for game {game}: {response.status_code}"
)
return None
except Timeout:
logger.error(f"Request to {url} timed out after 10 seconds")
return None
except ConnectionError as e:
# This catches DNS resolution errors, connection refused, etc.
logger.error(f"Connection error for {url}: {e}")
return None
except RequestException as e:
logger.error(f"Request failed for {url}: {e}")
return None
except ValueError as e:
logger.error(f"Failed to parse JSON response from {url}: {e}")
return None
except Exception as e:
logger.error(f"Unexpected error while fetching game stats from {url}: {e}")
return None return None