discord.py - нужна помощь для использования cog_command_error - PullRequest
0 голосов
/ 20 апреля 2020

Я создаю бот-диск с python, используя переписанную версию библиотеки диска. Я хочу создать обработчик событий speci c для каждого cog , и я нашел метод ' cog_command_error ', просматривая документацию. Проблема в том, что я не могу использовать его из-за ошибки, я пытался интерпретировать это, но без каких-либо реальных результатов. Я думаю, что речь идет о передаче параметра в качестве аргумента ошибки, но я не уверен; Я не опытный человек в этой области, действительно, я часами гуглял в поисках примера, который действительно работает, но все образцы, которые я нашел и опробовал, не работают. если я использую on_command_error, он работает, но обрабатывает ошибки других винтиков, и я не хочу, чтобы это произошло.

Извините за мой плохой английский sh, но я итальянец.

Вот этот код:

import discord
import os
from discord.ext import commands
from dotenv import load_dotenv

client = commands.Bot(command_prefix = '.', case_insensitive=True)

load_dotenv(os.path.join('bot.env'))
TOKEN = os.getenv('BOT_TOKEN')

async def cog_command_error(ctx, error):
    print("\nsalve\n")
    if isinstance(error, commands.MissingRequiredArgument):
        await ctx.send('You need to specify a module')
    else:
        raise error

@client.command()
async def load(ctx, extension):
    if extension.casefold() == 'all':
        for filename in os.listdir('./cogs'):
            if filename.endswith('.py'):
                try:
                    client.load_extension(f'cogs.{filename[:-3]}') #Cut last 3 char (.py)
                except:
                    pass

        await ctx.send('Loaded all extensions')
    else:
        try:
            client.load_extension(f'cogs.{extension}')
            await ctx.send(f'Loaded {extension} extension')
        except:
            await ctx.send("Extension already loaded or doesn't exist")

for filename in os.listdir('./cogs'):
    if filename.endswith('.py'):
        client.load_extension(f'cogs.{filename[:-3]}') #Cut last 3 char (.py)

client.run(TOKEN);

И ошибка:

Ignoring exception in command load:
Traceback (most recent call last):
    File "C:\Users\Manuel\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\discord\ext\commands\bot.py", line 892, in invoke
        await ctx.command.invoke(ctx)
    File "C:\Users\Manuel\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\discord\ext\commands\core.py", line 790, in invoke
        await self.prepare(ctx)
    File "C:\Users\Manuel\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\discord\ext\commands\core.py", line 751, in prepare
        await self._parse_arguments(ctx)
    File "C:\Users\Manuel\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\discord\ext\commands\core.py", line 670, in _parse_arguments
        transformed = await self.transform(ctx, param)
    File "C:\Users\Manuel\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\discord\ext\commands\core.py", line 516, in transform
        raise MissingRequiredArgument(param)
discord.ext.commands.errors.MissingRequiredArgument: extension is a required argument that is missing.

1 Ответ

0 голосов
/ 28 апреля 2020

Чтобы использовать обработчик ошибок, определяемый командой c, вам нужно использовать декоратор, чтобы определить, что функция предназначена для этой команды c, например:

@load.error
async def load_error(ctx, error):
    print("\nsalve\n")
    if isinstance(error, commands.MissingRequiredArgument):
        await ctx.send('You need to specify a module')
    else:
        raise error
...