Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

added the reload extension command #285

Merged
merged 4 commits into from
Oct 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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')

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hey @hitblast this should be @commands.slash_commands right?
@iyad-f , Can you provide a example of how to use this command. I am not able to use this command. Wanted to know if there is any other way of using command than "slash"

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it is not going to be a slash command since we don't wanna go with the overhead of registring it to just one guild where admins is present, we rather go with a prefixed command which only owners of the bot will be able to use. As for the second part of the question how to use this, its simple ?reloadext <extiontion_path> e.g. ?reloadext cogs.admin

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
Loading