Merge pull request #6 from prosolis/claude/gaming-deals-matrix-bot-ONjS7

Fixed confusing rating for CheapShark, added debugging.
This commit is contained in:
prosolis
2026-02-27 18:34:08 -08:00
committed by GitHub
5 changed files with 19 additions and 7 deletions

View File

@@ -8,7 +8,7 @@ MATRIX_DEALS_ROOM_ID=!roomid:example.com
ITAD_API_KEY= ITAD_API_KEY=
# Deal filtering # Deal filtering
MIN_DEAL_RATING=80 MIN_DEAL_RATING=8.0
MIN_DISCOUNT_PERCENT=50 MIN_DISCOUNT_PERCENT=50
MAX_PRICE_USD=20 MAX_PRICE_USD=20

View File

@@ -60,7 +60,7 @@ All configuration is via environment variables (see `.env.example`):
| `MATRIX_BOT_ACCESS_TOKEN` | Yes | — | Bot's access token | | `MATRIX_BOT_ACCESS_TOKEN` | Yes | — | Bot's access token |
| `MATRIX_DEALS_ROOM_ID` | Yes | — | Room ID to post deals in | | `MATRIX_DEALS_ROOM_ID` | Yes | — | Room ID to post deals in |
| `ITAD_API_KEY` | No | — | IsThereAnyDeal API key for historical low detection | | `ITAD_API_KEY` | No | — | IsThereAnyDeal API key for historical low detection |
| `MIN_DEAL_RATING` | No | 80 | Minimum CheapShark deal rating (0-100) | | `MIN_DEAL_RATING` | No | 8.0 | Minimum CheapShark deal rating (0-10) |
| `MIN_DISCOUNT_PERCENT` | No | 50 | Minimum discount percentage | | `MIN_DISCOUNT_PERCENT` | No | 50 | Minimum discount percentage |
| `MAX_PRICE_USD` | No | 20 | Maximum sale price in USD | | `MAX_PRICE_USD` | No | 20 | Maximum sale price in USD |
| `DATABASE_PATH` | No | deals.db | Path to SQLite database file | | `DATABASE_PATH` | No | deals.db | Path to SQLite database file |

View File

@@ -13,17 +13,22 @@ from .config import Config
from .preflight import run_preflight from .preflight import run_preflight
def setup_logging(): def setup_logging(*, debug: bool = False):
logging.basicConfig( logging.basicConfig(
level=logging.INFO, level=logging.DEBUG if debug else logging.INFO,
format="%(asctime)s [%(levelname)s] %(name)s: %(message)s", format="%(asctime)s [%(levelname)s] %(name)s: %(message)s",
stream=sys.stdout, stream=sys.stdout,
) )
if not debug:
# Keep noisy third-party loggers quiet even in debug mode
logging.getLogger("httpx").setLevel(logging.WARNING)
logging.getLogger("httpcore").setLevel(logging.WARNING)
async def main(): async def main():
load_dotenv() load_dotenv()
setup_logging() debug_mode = "--debug" in sys.argv
setup_logging(debug=debug_mode)
logger = logging.getLogger("gaming_deals_bot") logger = logging.getLogger("gaming_deals_bot")
check_mode = "--check" in sys.argv check_mode = "--check" in sys.argv

View File

@@ -68,14 +68,21 @@ async def fetch_deals(
logger.error("CheapShark API error: %s", exc) logger.error("CheapShark API error: %s", exc)
return [] return []
logger.info(
"CheapShark returned %d raw deals (before filtering)", len(raw_deals),
)
deals = [] deals = []
for d in raw_deals: for d in raw_deals:
savings = float(d.get("savings", 0)) savings = float(d.get("savings", 0))
rating = float(d.get("dealRating", 0)) rating = float(d.get("dealRating", 0))
title = d.get("title", "?")
if savings < min_discount: if savings < min_discount:
logger.debug("Filtered out %s: savings %.1f%% < %.1f%%", title, savings, min_discount)
continue continue
if rating * 10 < min_rating: # dealRating is 0-10, config is 0-100 if rating < min_rating:
logger.debug("Filtered out %s: rating %.1f < %.1f", title, rating, min_rating)
continue continue
steam_app_id = d.get("steamAppID") or None steam_app_id = d.get("steamAppID") or None

View File

@@ -15,7 +15,7 @@ class Config:
self.itad_api_key = os.environ.get("ITAD_API_KEY", "") self.itad_api_key = os.environ.get("ITAD_API_KEY", "")
# Deal filtering # Deal filtering
self.min_deal_rating = int(os.environ.get("MIN_DEAL_RATING", "80")) self.min_deal_rating = float(os.environ.get("MIN_DEAL_RATING", "8.0"))
self.min_discount_percent = int(os.environ.get("MIN_DISCOUNT_PERCENT", "50")) self.min_discount_percent = int(os.environ.get("MIN_DISCOUNT_PERCENT", "50"))
self.max_price_usd = float(os.environ.get("MAX_PRICE_USD", "20")) self.max_price_usd = float(os.environ.get("MAX_PRICE_USD", "20"))