Skip to content

Commit

Permalink
Merge pull request #285 from iyad-f/reloadext
Browse files Browse the repository at this point in the history
added the reload extension command
  • Loading branch information
hitblast authored Oct 9, 2024
2 parents 5435d9a + b0d2d6c commit 7576784
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 7 deletions.
61 changes: 61 additions & 0 deletions cogs/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# SPDX-License-Identifier: MIT


# Imports.


from disnake.ext import commands
from disnake.ext.commands import errors

import core


class Admin(commands.Cog):
@commands.command(name='reloadext')
async def reload_extension(
self, ctx: commands.Context[core.IgKnite], name: str
) -> None:
try:
ctx.bot.reload_extension(name)
except Exception as e:
if isinstance(e, errors.ExtensionNotLoaded):
msg = f'`{name}` extension is not loaded.'
elif isinstance(e, errors.ExtensionNotFound):
msg = f'No extension with name `{name}` exists.'
elif isinstance(e, errors.ExtensionFailed):
msg = f'Failed to load `{name}` extension.'
elif isinstance(e, errors.NoEntryPointError):
msg = f'Setup function is not defined in `{name}` file.'
# getting here shouldnt happen, just making sure msg
# doesnt have an Unbound type.
else:
msg = f'Something went wrong while loading `{name}` extension.'

embed = core.TypicalEmbed(description=msg, is_error=True)
await ctx.send(embed=embed)
else:
embed = core.TypicalEmbed(
description=f'Successfully reloaded `{name}` extension.'
)
await ctx.send(embed=embed)

@reload_extension.error
async def reload_ext(
self, ctx: commands.Context[core.IgKnite], error: errors.CommandError
) -> None:
if isinstance(error, errors.MissingRequiredArgument):
embed = core.TypicalEmbed(
description='Please provide an extension name.', is_error=True
)
await ctx.send(embed=embed)
# a check failure would be raised when someone who is not
# an owner uses the command but we dont wanna catch it,
# since we dont wanna send any messages if someone who
# isn't an owner uses the command.

async def cog_check(self, ctx: commands.Context[core.IgKnite]) -> bool:
return await ctx.bot.is_owner(ctx.author)


def setup(bot: core.IgKnite) -> None:
bot.add_cog(Admin())
17 changes: 10 additions & 7 deletions core/bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,23 @@


# Set up a custom class for core functionality.
class IgKnite(commands.AutoShardedInteractionBot):
class IgKnite(commands.AutoShardedBot):
"""
A subclassed version of `commands.AutoShardedInteractionBot`.\n
A subclassed version of `commands.AutoShardedBot`.\n
Basically works as the core class for all-things IgKnite!
"""

def __init__(
self, *args, ignored_extensions: Optional[Set[str]] = None, **kwargs
) -> None:
super().__init__(*args, **kwargs)
super().__init__(
command_prefix=commands.when_mentioned_or('.'),
strip_after_prefix=True,
case_insensitive=True,
# owner_ids={}, # provide this if you dont want a api call to fetch the owner
*args,
**kwargs,
)

to_load = EXTENTIONS
if ignored_extensions is not None:
Expand Down Expand Up @@ -62,10 +69,6 @@ async def on_guild_join(self, _: disnake.Guild) -> None:
async def on_guild_remove(self, _: disnake.Guild) -> None:
await self._update_presence()

async def on_message(self, message: disnake.Message) -> None:
if message.author == self.user:
return

async def on_message_delete(self, message: disnake.Message) -> None:
keychain.snipeables.append(message)
await asyncio.sleep(25)
Expand Down

0 comments on commit 7576784

Please sign in to comment.