# Copyright (c) 2026 Krzysztof Rudnicki. MIT licence. """Default upstream endpoints for the image commands. Split out of config.py, which had reached the 250-line cap. Like the groups.py and trust.py splits before it this is a filing change, not an interface change: config re-exports every name here, so nothing that imported them has to move. """ from __future__ import annotations from typing import Final DEFAULT_CAT_API_URL: Final = "https://api.thecatapi.com/v1/images/search" DEFAULT_DOG_API_URL: Final = "https://dog.ceo/api/breeds/image/random" # taxon_id 371057 is Gekkota, the gecko infraorder. The licence filter is not # decoration: without it the API happily returns all-rights-reserved photos, # and this bot reposts whatever it is handed into a group chat. # Deliberately no order_by=random -- see animals.paged_url for why it does # not work and what supplies the randomness instead. DEFAULT_GECKO_API_URL: Final = ( "https://api.inaturalist.org/v1/observations" "?taxon_id=371057&photos=true&quality_grade=research" "&photo_license=cc-by,cc-by-sa,cc0&per_page=1" ) # Commons resolves a portrait *filename* to a real upload.wikimedia.org URL. # Special:FilePath would be shorter but answers 302, and this repo's httpx # client does not follow redirects; imageinfo hands back the final URL and a # thumbnail in one hop, which is also what keeps a 4000px original off Signal. DEFAULT_COMMONS_API_URL: Final = "https://commons.wikimedia.org/w/api.php" # Wide enough to look like a photograph rather than an avatar, small enough # that the whole 267-portrait cache stays well under 100 MB. PORTRAIT_WIDTH: Final = 640