mirror of
https://github.com/RYGhub/royalnet.git
synced 2024-11-30 15:04:18 +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))
|