diff --git a/.env.example b/.env.example index 4ad0663..f70b443 100644 --- a/.env.example +++ b/.env.example @@ -31,7 +31,7 @@ EXTRA_CURRENCIES=CAD,EUR,GBP # (Falls back to shared MIN_DISCOUNT_PERCENT / MAX_PRICE if not set) #ITAD_MIN_DISCOUNT=50 #ITAD_MAX_PRICE=20 -#ITAD_DEALS_LIMIT=100 +#ITAD_DEALS_LIMIT=200 # Shared filter defaults (used when source-specific values are not set) MIN_DISCOUNT_PERCENT=50 diff --git a/README.md b/README.md index 92ae4f8..f66e29b 100644 --- a/README.md +++ b/README.md @@ -82,7 +82,7 @@ Each deal source has its own filter settings. Source-specific values take priori | `CHEAPSHARK_MAX_PRICE` | CheapShark | 20 | Maximum sale price (USD) | | `ITAD_MIN_DISCOUNT` | ITAD | 50 | Minimum discount percentage | | `ITAD_MAX_PRICE` | ITAD | 20 | Maximum sale price (USD, prices from other regions are converted) | -| `ITAD_DEALS_LIMIT` | ITAD | 100 | Number of deals to fetch per country (max 200) | +| `ITAD_DEALS_LIMIT` | ITAD | 200 | Number of deals to fetch per country (max 200) | | `MIN_DISCOUNT_PERCENT` | Shared | 50 | Fallback minimum discount when source-specific value is not set | | `MAX_PRICE` | Shared | 20 | Fallback maximum price when source-specific value is not set | diff --git a/gaming_deals_bot/config.py b/gaming_deals_bot/config.py index c65947e..98c424f 100644 --- a/gaming_deals_bot/config.py +++ b/gaming_deals_bot/config.py @@ -60,7 +60,7 @@ class Config: self.itad_max_price = float( os.environ.get("ITAD_MAX_PRICE", _max_price) ) - self.itad_deals_limit = int(os.environ.get("ITAD_DEALS_LIMIT", "100")) + self.itad_deals_limit = int(os.environ.get("ITAD_DEALS_LIMIT", "200")) # Intro message on startup self.send_intro_message = os.environ.get( diff --git a/gaming_deals_bot/itad_deals.py b/gaming_deals_bot/itad_deals.py index 37d1e7f..19f7528 100644 --- a/gaming_deals_bot/itad_deals.py +++ b/gaming_deals_bot/itad_deals.py @@ -50,10 +50,15 @@ async def fetch_deals( countries: list[str] | None = None, max_price: float = 20, min_discount: float = 50, - limit: int = 100, + limit: int = 200, ) -> list[ITADDeal]: """Fetch current deals from IsThereAnyDeal across one or more countries. + Defaults to the API maximum of 200 deals per country so that client-side + filtering (discount, price, type) has the widest possible pool to work + with — this avoids missing deals that wouldn't appear in a smaller window + sorted only by discount. + Deals are fetched per-country, merged (first country in the list wins when the same game+shop appears in multiple regions), and finally sorted by timestamp so that the newest deals appear first. @@ -105,7 +110,7 @@ async def _fetch_country_deals( country: str = "US", max_price: float = 20, min_discount: float = 50, - limit: int = 100, + limit: int = 200, ) -> list[ITADDeal]: """Fetch deals for a single country from the ITAD ``/deals/v2`` endpoint.""" params: dict = {