mirror of
https://github.com/RYGhub/royalnet.git
synced 2024-11-23 19:44:20 +00:00
181 lines
4.7 KiB
Python
181 lines
4.7 KiB
Python
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))
|