class Charfred(commands.Bot): def __init__(self): super().__init__(command_prefix=_get_prefixes, description=description, pm_help=False, intents=Intents.all()) self.session = aiohttp.ClientSession(loop=self.loop) self.dir = Path(__file__).parent self.cfg = Config(f'{self.dir}/configs/botCfg.toml', load=True, loop=self.loop) if 'prefix' not in self.cfg: self.cfg['prefix'] = {} if 'nodes' not in self.cfg: self.cfg['nodes'] = {} if 'hierarchy' not in self.cfg: self.cfg['hierarchy'] = [] if 'cogcfgs' not in self.cfg: self.cfg['cogcfgs'] = {} self.cfg._save() self.keywords = Config( f'{self.dir}/configs/keywords.json', load=True, loop=self.loop, default=f'{self.dir}/configs/keywords.json_default') try: os.chdir(self.dir) for admincog in _admincogs('admincogs'): self.load_extension( admincog.replace('/', '.').replace('\\', '.')) except ClientException: log.critical('Could not load administrative cogs!') except ImportError: log.critical('Administrative cogs could not be imported!') traceback.print_exc() def register_nodes(self, nodes): for node in nodes: if node not in self.cfg['nodes']: self.cfg['nodes'][node] = None def register_cfg(self, cfg, prompt=None, defaultvalue=None): if cfg not in self.cfg['cogcfgs']: self.cfg['cogcfgs'][cfg] = (defaultvalue, prompt) async def get_context(self, message, *, cls=CharfredContext): return await super().get_context(message, cls=cls) async def on_command(self, ctx): log.info(f'[{ctx.author.name}]: {ctx.message.content}') async def on_ready(self): log.info(f'{self.user} reporting for duty!') log.info(f'ID: {self.user.id}') if not hasattr(self, 'uptime'): self.uptime = datetime.datetime.now() async def on_message(self, message): if message.author.bot: return if message.guild is None: is_owner = await self.is_owner(message.author) if not is_owner: return ctx = await self.get_context(message) await self.invoke(ctx) async def close(self): log.info('Shutting down, this may take a couple seconds...') await super().close() log.info('Client disconnected.') await self.session.close() log.info('Session closed.') log.info('All done, goodbye sir!') def run(self, token=None): if token is None: log.info('Using pre-configured Token...') try: token = self.cfg['botToken'] except KeyError: log.error('No token given, no token saved, abort!') return else: self.cfg['botToken'] = token self.cfg._save() log.info('Token saved for future use!') super().run(token, reconnect=True)