Pycord-Development / pycord

Pycord is a modern, easy to use, feature-rich, and async ready API wrapper for Discord written in Python
https://docs.pycord.dev
MIT License
2.71k stars 459 forks source link

sync_commands doesnt raise error #2465

Closed Lumabots closed 3 months ago

Lumabots commented 3 months ago

Summary

sync_commands doesnt raise error when a list is passed

Reproduction Steps

use the sync_command and pass command with an error as arg and not only await bot.sync_commands() the issue is when the command should not be able to be register because there is an issue its still registering it without raising error. If a command doesnt have error its working fine

Minimal Reproducible Code

async def on_connect(bot: discord.Client):
        async def sync_command(command):
            nonlocal num_not_loaded
            try:
                await bot.sync_commands([command])
            except Exception as e:
                logger.critical(f"Error loading command {command.name}: {e}")

Expected Results

it should raise an error like when using await bot.sync_commands()

discord.errors.HTTPException: 400 Bad Request (error code: 50035): Invalid Form Body In 2.options.5.name: String value did not match validation regex.

Actual Results

no error raise command but command will not be register (doesnt appear on discord)

Intents

all

System Information

py-cord 2.5.0

Checklist

Additional Context

No response

NeloBlivion commented 3 months ago

you're using try-except...

Lumabots commented 3 months ago

you're using try-except...

yeah and the except is not trigger

Lumabots commented 3 months ago

Update: it raise an error if im loading the command but not if am loading a subcommand etc.

        for command in bot._pending_application_commands:
            await sync_command(command)
            continue
            if isinstance(command, discord.SlashCommandGroup):
                for sub_command in command.subcommands:
                    if isinstance(sub_command, discord.SlashCommandGroup):
                        for sub_sub_command in sub_command.subcommands:
                            await sync_command(sub_sub_command)
                    else:
                        await sync_command(sub_command)
            else:
                await sync_command(command)

here with the continue is raise the error : Error loading command bot: 400 Bad Request (error code: 50035): Invalid Form Body and without the continue, it does not raise anything

So to summarise it load the subcommand etc but does not raise error, while if i load the command, it raise the error. Why does the subcommand doesnt raise error while it still loading it (if subcommand without error it appear on discord, if subcommand with error, doesnt raise anythign but command doesnt appear on discord)

Lumabots commented 3 months ago

Anyways I think syncommand is just not mean to be used like that