Turned extend into command group

This commit is contained in:
Adriene Hutchins 2020-03-02 15:47:58 -05:00
parent 002ac17047
commit 504567a334
4 changed files with 51 additions and 32 deletions

View File

@ -24,10 +24,8 @@ class Core(commands.Cog):
# Main Stuff # Main Stuff
self.bot = bot self.bot = bot
self.extensions_list = bot.extensions_list
self.emoji = "\U0001F4E6" self.emoji = "\U0001F4E6"
self.settings = {
'extensions': []
}
# Help Command # Help Command
self._original_help_command = bot.help_command self._original_help_command = bot.help_command
@ -35,21 +33,6 @@ class Core(commands.Cog):
bot.help_command = TaciHelpCommand() bot.help_command = TaciHelpCommand()
bot.help_command.cog = self bot.help_command.cog = self
# Extensions
self._init_extensions()
def _init_extensions(self):
"""Initializes extensions."""
for ext in os.listdir('extensions'):
if ext.endswith('.py') and not ext.startswith('core'):
try:
self.bot.load_extension(f'extensions.{ext[:-3]}')
self.settings['extensions'].append(
f'extensions.{ext[:-3]}')
except:
pass
def _humanbytes(self, B) -> str: # function lifted from StackOverflow def _humanbytes(self, B) -> str: # function lifted from StackOverflow
"""Return the given bytes as a human friendly KB, MB, GB, or TB string.""" """Return the given bytes as a human friendly KB, MB, GB, or TB string."""
@ -129,16 +112,37 @@ Number of extensions present: {len(ctx.bot.cogs)}
ping = (after - before) * 1000 ping = (after - before) * 1000
await pong.edit(content="`PING discordapp.com {}ms`".format(int(ping))) await pong.edit(content="`PING discordapp.com {}ms`".format(int(ping)))
@commands.command() @commands.group(aliases=['extensions', 'ext'],
invoke_without_command=True)
@commands.is_owner()
async def extend(self, ctx, name:str = None):
# Provides status of extension
if name is not None:
status = "is" if f'extensions.{name}' in self.extensions_list else "is not"
msg = f"**extensions.{name}** {status} currently loaded and/or existent."
# Handles empty calls
else:
msg = (
"**Nothing was provided!**\n\n"
"Please provide an extension name for status, "
"or provide a subcommand."
)
# Sends completed message
await ctx.send(msg)
@extend.command(aliases=['le', 'l'])
@commands.is_owner() @commands.is_owner()
async def load(self, ctx, name: str): async def load(self, ctx, name: str):
"""Load an extension into the bot.""" """Load an extension into the bot."""
m = await ctx.send(f'Loading {name}') m = await ctx.send(f'Loading {name}')
extension_name = 'extensions.{0}'.format(name) extension_name = f'extensions.{name}'
if extension_name not in self.settings['extensions']: if extension_name not in self.extensions_list:
try: try:
self.bot.load_extension(extension_name) self.bot.load_extension(extension_name)
self.settings['extensions'].append(extension_name) self.extensions_list.append(extension_name)
await m.edit(content='Extension loaded.') await m.edit(content='Extension loaded.')
except Exception as e: except Exception as e:
await m.edit( await m.edit(
@ -146,34 +150,34 @@ Number of extensions present: {len(ctx.bot.cogs)}
else: else:
await m.edit(content='Extension already loaded.') await m.edit(content='Extension already loaded.')
@commands.command(aliases=["ule", "ul"]) @extend.command(aliases=["ule", "ul"])
@commands.is_owner() @commands.is_owner()
async def unload(self, ctx, name: str): async def unload(self, ctx, name: str):
"""Unload an extension from the bot.""" """Unload an extension from the bot."""
m = await ctx.send(f'Unloading {name}') m = await ctx.send(f'Unloading {name}')
extension_name = 'extensions.{0}'.format(name) extension_name = f'extensions.{name}'
if extension_name in self.settings['extensions']: if extension_name in self.extensions_list:
self.bot.unload_extension(extension_name) self.bot.unload_extension(extension_name)
self.settings['extensions'].remove(extension_name) self.extensions_list.remove(extension_name)
await m.edit(content='Extension unloaded.') await m.edit(content='Extension unloaded.')
else: else:
await m.edit(content='Extension not found or not loaded.') await m.edit(content='Extension not found or not loaded.')
@commands.command(aliases=["rle", "rl"]) @extend.command(aliases=["rle", "rl"])
@commands.is_owner() @commands.is_owner()
async def reload(self, ctx, name: str): async def reload(self, ctx, name: str):
"""Reload an extension of the bot.""" """Reload an extension of the bot."""
m = await ctx.send(f'Reloading {name}') m = await ctx.send(f'Reloading {name}')
extension_name = 'extensions.{0}'.format(name) extension_name = f'extensions.{name}'
if extension_name in self.settings['extensions']: if extension_name in self.extensions_list:
self.bot.unload_extension(extension_name) self.bot.unload_extension(extension_name)
try: try:
self.bot.load_extension(extension_name) self.bot.load_extension(extension_name)
await m.edit(content='Extension reloaded.') await m.edit(content='Extension reloaded.')
except Exception as e: except Exception as e:
self.settings['extensions'].remove(extension_name) self.extensions_list.remove(extension_name)
await m.edit( await m.edit(
content=f'Failed to reload extension\n`{type(e).__name__}: {e}`') content=f'Failed to reload extension\n`{type(e).__name__}: {e}`')
else: else:

View File

@ -38,6 +38,7 @@ class Developer(commands.Cog):
def _cleanup_code(self, content): def _cleanup_code(self, content):
"""Automatically removes code blocks from the code.""" """Automatically removes code blocks from the code."""
# remove ```py\n``` # remove ```py\n```
if content.startswith('```') and content.endswith('```'): if content.startswith('```') and content.endswith('```'):
return '\n'.join(content.split('\n')[1:-1]) return '\n'.join(content.split('\n')[1:-1])
@ -47,6 +48,7 @@ class Developer(commands.Cog):
def _get_syntax_error(self, err): def _get_syntax_error(self, err):
"""Returns SyntaxError formatted for repl reply.""" """Returns SyntaxError formatted for repl reply."""
return '```py\n{0.text}{1:>{0.offset}}\n{2}: {0}```'.format( return '```py\n{0.text}{1:>{0.offset}}\n{2}: {0}```'.format(
err, err,
'^', '^',

17
main.py
View File

@ -29,7 +29,8 @@ class Bot(commands.Bot):
# Initializes parent class # Initializes parent class
super().__init__(self._get_prefix_new, **options) super().__init__(self._get_prefix_new, **options)
# Get Config Values # Setup
self.extensions_list = []
with open('config.json') as f: with open('config.json') as f:
self.config = json.load(f) self.config = json.load(f)
self.prefix = self.config['PREFIX'] self.prefix = self.config['PREFIX']
@ -45,6 +46,18 @@ class Bot(commands.Bot):
# Logging # Logging
print('Initialization complete.\n\n') print('Initialization complete.\n\n')
def _init_extensions(self):
"""Initializes extensions."""
for ext in os.listdir('extensions'):
if ext.endswith('.py'):
try:
bot.load_extension(f'extensions.{ext[:-3]}')
self.extensions_list.append(
f'extensions.{ext[:-3]}')
except Exception as e:
print(e)
async def _get_prefix_new(self, bot, msg): async def _get_prefix_new(self, bot, msg):
"""More flexible check for prefix.""" """More flexible check for prefix."""
@ -68,7 +81,7 @@ class Bot(commands.Bot):
# NOTE Extension Entry Point # NOTE Extension Entry Point
# Loads core, which loads all other extensions # Loads core, which loads all other extensions
self.load_extension('extensions.core') self._init_extensions()
# Logging # Logging
msg = "CONNECTED!\n" msg = "CONNECTED!\n"