import logging import json from errbot import botcmd, BotPlugin import requests class Dog(BotPlugin): """Get random dog image URLs""" BASE_URL = 'https://dog.ceo/api' breeds = None @botcmd(split_args_with=' ') def doggo(self, msg, args): url = None if len(args) > 0: breed = args[0] if not self.breeds: self.reload_breeds(self, msg, args) if breed in self.breeds: url = '{}/breed/{}/images/random'.format(self.BASE_URL, breed) if not url: url = '{}/breeds/image/random'.format(self.BASE_URL) try: resp = requests.get(url) resp.raise_for_status() except requests.exceptions.HTTPError as e: logging.debug(e) return 'Unable to return a dog image' return resp.json()['message'] @botcmd def breeds(self, msg, args): if not self.breeds: self.reload_breeds(self, msg, args) if not self.breeds: return 'Unable to load breeds list' # Send the output to the user to prevent spamming the channel direct_to_user = self.build_identifier(str(mess.frm.nick)) for breed in sorted(self.breeds): self.send(direct_to_user, breed) @botcmd(admin_only=True) def reload_breeds(self, msg, args): url = '{}/breeds/list'.format(self.BASE_URL) try: resp = requests.get(url) resp.raise_for_status() except requests.exceptions.HTTPError as e: logging.debug(e) return 'Unable to load breeds list' data = resp.json()['message'] if not isinstance(data, list): return 'Unable to load breeds list' self.breeds = data