From a615d62afd62e3ab2ad2a1bb9c604fd01021159f Mon Sep 17 00:00:00 2001 From: Dustin Pianalto Date: Sun, 15 Dec 2019 22:19:42 -0900 Subject: [PATCH] Move Geeksbot class to it's own file Add inspect to auto_load list Change default prefix to be casefolded --- geeksbot/__main__.py | 104 +------------------------------- geeksbot/config/bot_config.json | 3 +- geeksbot/imports/geeksbot.py | 79 ++++++++++++++++++++++++ 3 files changed, 84 insertions(+), 102 deletions(-) create mode 100644 geeksbot/imports/geeksbot.py diff --git a/geeksbot/__main__.py b/geeksbot/__main__.py index 13d01f2..9a490ba 100644 --- a/geeksbot/__main__.py +++ b/geeksbot/__main__.py @@ -3,6 +3,9 @@ import time from datetime import datetime import os +from geeksbot.imports.geeksbot import Geeksbot +from geeksbot.imports.checks import is_me + log_format = '{asctime}.{msecs:03.0f}|{levelname:<8}|{name}::{message}' date_format = '%Y.%m.%d %H.%M.%S' @@ -26,107 +29,6 @@ logger.info('Logging Setup Complete') time.sleep(1) -logger.info('Starting Imports') - -start = datetime.utcnow() -# noinspection PyPackageRequirements -import discord # noqa: E402 -logger.info('Discord.py Imported') -# noinspection PyPackageRequirements -from discord.ext import commands # noqa: E402 -logger.info('commands Imported') -# noinspection PyPackageRequirements -from discord.ext.commands.view import StringView # noqa: E402 -logger.info('StringView Imported') -# noinspection PyPackageRequirements -from discord.ext.commands.context import Context # noqa: E402 -logger.info('Context Imported') -logger.info(f'Discord.py Import Complete - Took {(datetime.utcnow() - start).total_seconds()} seconds') -# noinspection PyRedeclaration -start = datetime.utcnow() -from concurrent import futures # noqa: E402 -logger.info('Concurrent futures Imported') -from multiprocessing import Pool # noqa: E402 -logger.info('Multiprocesing Pool Imported') -logger.info(f'Process Libs Import Complete - Took {(datetime.utcnow() - start).total_seconds()} seconds') -# noinspection PyRedeclaration -start = datetime.utcnow() -import re # noqa: E402 -logger.info('re Imported') -import json # noqa: E402 -logger.info('JSON Imported') -import aiohttp # noqa: E402 -logger.info('aiohttp Imported') -import redis # noqa: E402 -logger.info('redis Imported') -logger.info(f'Misc Libs Import Complete - Took {(datetime.utcnow() - start).total_seconds()} seconds') -# noinspection PyRedeclaration -# start = datetime.utcnow() -# from geeksbot.imports.rcon_lib import arcon -# from geeksbot.imports import message_logging -# logger.info(f'Geeksbot Libs Import Complete - Took {(datetime.utcnow() - start).total_seconds()} seconds') - -from geeksbot.imports.checks import is_me - - -logger.info('Imports Complete') - - -class Geeksbot(commands.Bot): - def __init__(self, *args, **kwargs): - self.default_prefix = os.environ.get('DISCORD_DEFAULT_PREFIX', 'g$') - kwargs['command_prefix'] = self.default_prefix - self.description = "Geeksbot v2" - kwargs['description'] = self.description - super().__init__(*args, **kwargs) - self.config_dir = 'geeksbot/config/' - self.config_file = 'bot_config.json' - self.extension_dir = 'exts' - self.cache = redis.Redis(host=os.environ['REDIS_HOST'], port=os.environ['REDIS_PORT'], db=1, charset="utf-8", decode_responses=True) - self.api_token = os.environ['API_TOKEN'] - self.aio_session = aiohttp.ClientSession(loop=self.loop) - self.auth_header = {'Authorization': f'Token {self.api_token}'} - self.api_base = 'https://geeksbot.app/api' - with open(f'{self.config_dir}{self.config_file}') as f: - self.bot_config = json.load(f) - self.embed_color = discord.Colour.from_rgb(49, 107, 111) - self.error_color = discord.Colour.from_rgb(142, 29, 31) - self.tpe = futures.ThreadPoolExecutor(max_workers=20) - self.process_pool = Pool(processes=4) - self.geo_api = '2d4e419c2be04c8abe91cb5dd1548c72' - self.git_url = 'https://github.com/dustinpianalto/geeksbot_v2' - self.load_default_extensions() - self.owner_id = 351794468870946827 - - self.book_emojis = { - 'unlock': '🔓', - 'start': '⏮', - 'back': '◀', - 'hash': '#\N{COMBINING ENCLOSING KEYCAP}', - 'forward': '▶', - 'end': '⏭', - 'close': '🇽', - } - - async def load_ext(self, mod): - logger.info(f"Starting to load {mod}") - self.load_extension(f'geeksbot.{self.extension_dir}.{mod}') - logger.info(f'Extension Loaded: {mod}') - - async def unload_ext(self, mod): - logger.info(f"Starting to unload {mod}") - self.unload_extension(f'geeksbot.{self.extension_dir}.{mod}') - logger.info(f'Extension Unloaded: {mod}') - - def load_default_extensions(self): - for load_item in self.bot_config['load_list']: - self.loop.create_task(self.load_ext(load_item)) - - async def close(self): - await super().close() - await self.aio_session.close() - - bot = Geeksbot(case_insensitive=True) diff --git a/geeksbot/config/bot_config.json b/geeksbot/config/bot_config.json index 723d939..6059063 100644 --- a/geeksbot/config/bot_config.json +++ b/geeksbot/config/bot_config.json @@ -4,6 +4,7 @@ "exec", "message_events", "user_events", - "tickets" + "tickets", + "inspect" ] } diff --git a/geeksbot/imports/geeksbot.py b/geeksbot/imports/geeksbot.py new file mode 100644 index 0000000..32561c1 --- /dev/null +++ b/geeksbot/imports/geeksbot.py @@ -0,0 +1,79 @@ +import os +import json +from concurrent import futures +from multiprocessing import Pool +import logging + +import discord +from discord.ext import commands +import redis +import aiohttp + +geeksbot_logger = logging.getLogger('Geeksbot') + + +class Geeksbot(commands.Bot): + def __init__(self, *args, **kwargs): + self.default_prefix = os.environ.get('DISCORD_DEFAULT_PREFIX', 'g$') + kwargs['command_prefix'] = self.get_prefixes + self.description = "Geeksbot v2" + kwargs['description'] = self.description + super().__init__(*args, **kwargs) + self.config_dir = 'geeksbot/config/' + self.config_file = 'bot_config.json' + self.extension_dir = 'exts' + self.cache = redis.Redis(host=os.environ['REDIS_HOST'], port=os.environ['REDIS_PORT'], db=1, charset="utf-8", decode_responses=True) + self.api_token = os.environ['API_TOKEN'] + self.aio_session = aiohttp.ClientSession(loop=self.loop) + self.auth_header = {'Authorization': f'Token {self.api_token}'} + self.api_base = 'https://geeksbot.app/api' + with open(f'{self.config_dir}{self.config_file}') as f: + self.bot_config = json.load(f) + self.embed_color = discord.Colour.from_rgb(49, 107, 111) + self.error_color = discord.Colour.from_rgb(142, 29, 31) + self.tpe = futures.ThreadPoolExecutor(max_workers=20) + self.process_pool = Pool(processes=4) + self.geo_api = '2d4e419c2be04c8abe91cb5dd1548c72' + self.git_url = 'https://github.com/dustinpianalto/geeksbot_v2' + self.load_default_extensions() + self.owner_id = 351794468870946827 + + self.book_emojis = { + 'unlock': '🔓', + 'start': '⏮', + 'back': '◀', + 'hash': '#\N{COMBINING ENCLOSING KEYCAP}', + 'forward': '▶', + 'end': '⏭', + 'close': '🇽', + } + + async def load_ext(self, mod): + try: + self.load_extension(f'geeksbot.{self.extension_dir}.{mod}') + geeksbot_logger.info(f'Extension Loaded: {mod}') + except Exception: + geeksbot_logger.exception(f"Error loading {mod}") + + async def unload_ext(self, mod): + try: + self.unload_extension(f'geeksbot.{self.extension_dir}.{mod}') + geeksbot_logger.info(f'Extension Unloaded: {mod}') + except Exception: + geeksbot_logger.exception(f"Error loading {mod}") + + def load_default_extensions(self): + for load_item in self.bot_config['load_list']: + self.loop.create_task(self.load_ext(load_item)) + + async def get_prefixes(self, message): + return self.default_prefix.casefold() + + async def close(self): + try: + await super().close() + await self.aio_session.close() + except Exception: + geeksbot_logger.exception(f"Error Closing Connections.") + geeksbot_logger.info('Exiting...') +