from functools import reduce import requests from requests.exceptions import ConnectionError def post_message(msg, bot_id): requests.post( "https://api.groupme.com/v3/bots/post", json={ "bot_id": bot_id, "text": msg }, timeout=10 ) def upload_image(key, content): try: return True, requests.post( "https://image.groupme.com/pictures", headers={ "Content-Type": "image/png", "X-Access-Token": key, }, data=content ).json()["payload"]["url"] except ConnectionError as ce: return False, { "explain": "Could not reach GroupMe image service.", "exception": ce } except (KeyError, JSONDecodeError) as e: return False, { "explain": "Could not parse response from GroupMe image service.", "exception": e } def find_all_subclasses(baseClass): def get_subclasses(clazz): s = set(clazz.__subclasses__()) return s | reduce(set.union, (get_subclasses(sc) for sc in s), set()) return get_subclasses(baseClass)