1
Fork 0
mirror of https://github.com/RYGhub/royalnet.git synced 2024-11-26 21:14:19 +00:00
royalnet/royalpack/commands/dog.py

220 lines
4.8 KiB
Python

import logging
import io
import pathlib
import aiohttp
import royalnet.engineer as engi
import royalpack.bolts as rb
import royalpack.config as cfg
log = logging.getLogger(__name__)
@rb.capture_errors
@engi.TeleportingConversation
async def dog_any(*, _msg: engi.Message, **__):
"""
Invia un doggo in chat! 🐶
"""
log.debug("Evaluating config...")
config = cfg.lazy_config.evaluate()
async with aiohttp.ClientSession() as session:
log.debug("Fetching dog (not the opposite. ironic, huh?)")
async with session.get("https://dog.ceo/api/breeds/image/random") as response:
result = await response.json()
url = result["message"]
filename = url.split("/")[-1]
path = pathlib.Path(config["files.cache.dog"]).joinpath(filename)
log.debug("Saving dog to: %s", path)
async with session.get(url) as response:
with path.open("wb") as img:
img.write(await response.content.read())
await _msg.reply(files=[img])
path.unlink()
_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",
]
@engi.TeleportingConversation
async def dog_breed(*, _msg: engi.Message, breed: str, **__):
"""
Invia un doggo di una razza specifica in chat! 🐶
"""
breed = breed.lower()
if breed not in _breeds:
await _msg.reply(text="⚠️ La razza che hai specificato non esiste nel database.")
async with aiohttp.ClientSession() as session:
async with session.get(f"https://dog.ceo/api/breed/{breed}/images/random") as response:
result = await response.json()
url = result["message"]
async with session.get(url) as response:
img = await response.content.read()
await _msg.reply(files=[io.BytesIO(img)])
@engi.TeleportingConversation
async def dog_breedlist(*, _msg: engi.Message, **__):
"""
Elenca tutte le razze di dogghi disponibili! 🐶
"""
msg = [
"🐶 \uE01BRazze disponibili:\uE00B",
", ".join(_breeds),
]
await _msg.reply(text="\n".join(msg))
__all__ = ("dog_any", "dog_breed", "dog_breedlist")