boredscripter
boredscripter

Reputation: 108

Problem with *.shutdown* command on discord.py

I am currently looking to fix this code. I am trying to make a .shutdown command, which basically logs out of the bot and takes the bot down. I have made a code, but it seems like it is not working. Here is my code. Help is very appreciated ;p


@client.command()
async def shutdown(ctx, *, reason):
    if ctx.message.author.id(581457749724889102):
        ctx.send('Bot is shutting down... ;(')
        logs_channel = client.get_channel(825005282535014420)
        logs_channel.send(f"Bot is being shutdown for: {reason}")
        exit()
    else:
        ctx.send("I'm sorry, only officer grr#6609 can do that."

Thanks early for the help!

edit:

here is my error

Ignoring exception in on_command_error
Traceback (most recent call last):
  File "C:\Users\USER\AppData\Local\Programs\Python\Python39-32\lib\site-packages\discord\ext\commands\core.py", line 85, in wrapped
    ret = await coro(*args, **kwargs)
  File "c:\Users\USER\Desktop\discord bot folder\Nuova cartella\connor.py", line 173, in shutdown
    if ctx.message.author.id(581457749724889102):
TypeError: 'int' object is not callable

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\USER\AppData\Local\Programs\Python\Python39-32\lib\site-packages\discord\client.py", line 343, in _run_event
    await coro(*args, **kwargs)
  File "c:\Users\USER\Desktop\discord bot folder\Nuova cartella\connor.py", line 82, in on_command_error
    raise error
  File "C:\Users\USER\AppData\Local\Programs\Python\Python39-32\lib\site-packages\discord\ext\commands\bot.py", line 902, in invoke
    await ctx.command.invoke(ctx)
  File "C:\Users\USER\AppData\Local\Programs\Python\Python39-32\lib\site-packages\discord\ext\commands\core.py", line 864, in invoke
    await injected(*ctx.args, **ctx.kwargs)
  File "C:\Users\USER\AppData\Local\Programs\Python\Python39-32\lib\site-packages\discord\ext\commands\core.py", line 94, in wrapped
    raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: TypeError: 'int' object is not callable


Upvotes: 0

Views: 786

Answers (1)

Dominik
Dominik

Reputation: 3592

Please always consider to await your functions. You also have some formation and comprehension errors in the code, maybe take another look at the docs

You can check whether the user executing the command is the owner of the bot. If he is not, there is of course an error message.

Have a look at the following code:

@client.command()
@commands.is_owner() # Checks if the bot owner exectued the command
async def shutdown(ctx):
    await ctx.send("Logging out.")
    await client.logout() # Logging out


@shutdown.error
async def shutdown_error(ctx, error):
    if isinstance(error, commands.NotOwner):
        await ctx.send("You are not the owner of the bot.") # Error message

What did we do?

  • awaited most of the functions.
  • Built in a check to check if the owner executed the command.
  • Built in an error handler which will give out a message if a non-owner tries to shutdown the bot.

Upvotes: 1

Related Questions