from typing import * import royalnet.commands as rc import aiohttp import io class DogCommand(rc.Command): name: str = "dog" description: str = "Invia un cane della razza specificata in chat." syntax: str = "[razza|list]" _breeds = [ "affenpinscher", "african", "airedale", "akita", "appenzeller", "australian/shepherd", "basenji", "beagle", "bluetick", "borzoi", "bouvier", "boxer", "brabancon", "briard", "buhund/norwegian", "bulldog/boston", "bulldog/english", "bulldog/french", "bullterrier/staffordshire", "cairn", "cattledog/australian", "chihuahua", "chow", "clumber", "cockapoo", "collie/border", "coonhound", "corgi/cardigan", "cotondetulear", "dachshund", "dalmatian", "dane/great", "deerhound/scottish", "dhole", "dingo", "doberman", "elkhound/norwegian", "entlebucher", "eskimo", "finnish/lapphund", "frise/bichon", "germanshepherd", "greyhound/italian", "groenendael", "havanese", "hound/afghan", "hound/basset", "hound/blood", "hound/english", "hound/ibizan", "hound/plott", "hound/walker", "husky", "keeshond", "kelpie", "komondor", "kuvasz", "labrador", "leonberg", "lhasa", "malamute", "malinois", "maltese", "mastiff/bull", "mastiff/english", "mastiff/tibetan", "mexicanhairless", "mix", "mountain/bernese", "mountain/swiss", "newfoundland", "otterhound", "ovcharka/caucasian", "papillon", "pekinese", "pembroke", "pinscher/miniature", "pitbull", "pointer/german", "pointer/germanlonghair", "pomeranian", "poodle/miniature", "poodle/standard", "poodle/toy", "pug", "puggle", "pyrenees", "redbone", "retriever/chesapeake", "retriever/curly", "retriever/flatcoated", "retriever/golden", "ridgeback/rhodesian", "rottweiler", "saluki", "samoyed", "schipperke", "schnauzer/giant", "schnauzer/miniature", "setter/english", "setter/gordon", "setter/irish", "sheepdog/english", "sheepdog/shetland", "shiba", "shihtzu", "spaniel/blenheim", "spaniel/brittany", "spaniel/cocker", "spaniel/irish", "spaniel/japanese", "spaniel/sussex", "spaniel/welsh", "springer/english", "stbernard", "terrier/american", "terrier/australian", "terrier/bedlington", "terrier/border", "terrier/dandie", "terrier/fox", "terrier/irish", "terrier/kerryblue", "terrier/lakeland", "terrier/norfolk", "terrier/norwich", "terrier/patterdale", "terrier/russell", "terrier/scottish", "terrier/sealyham", "terrier/silky", "terrier/tibetan", "terrier/toy", "terrier/westhighland", "terrier/wheaten", "terrier/yorkshire", "vizsla", "waterdog/spanish", "weimaraner", "whippet", "wolfhound/irish", ] async def run(self, args: rc.CommandArgs, data: rc.CommandData) -> None: breed = args.joined() if breed: if breed == "list": await data.reply("\n".join(["ℹ️ Razze disponibili:", *[f"[c]{breed}[/c]" for breed in self._breeds]])) if breed in self._breeds: url = f"https://dog.ceo/api/breed/{breed}/images/random" else: raise rc.InvalidInputError("Questa razza non è disponibile.\n") else: url = f"https://dog.ceo/api/breeds/image/random" async with aiohttp.ClientSession() as session: async with session.get(url) as response: if response.status >= 400: raise rc.ExternalError(f"Request returned {response.status}") result = await response.json() assert "status" in result assert result["status"] == "success" assert "message" in result url = result["message"] async with session.get(url) as response: img = await response.content.read() await data.reply_image(image=io.BytesIO(img))