import inspect import os import pathlib from discord.ext import commands class ConfigError(Exception): pass class MineBot(commands.Bot): def __init__(self, *args, **kwargs): self.cleanup = [] super().__init__(*args, **kwargs) def add_cleanup(self, callback): self.cleanup.append(callback) async def close(self): for callback in self.cleanup: r = callback() # coroutines etc. return an awaitable object if inspect.isawaitable(r): await r await super().close() def getconfig(key, default=None): if key in os.environ: return os.environ[key] elif f'{key}_FILE' in os.environ: p = os.environ[f'{key}_FILE'] return pathlib.Path(p).read_text() elif default != None: return default else: raise ConfigError('Missing config:', key)