Nextcord命令名称无效错误排查求助
Nextcord 命令同步报错:命令名称无效
报错信息
Ignoring exception in on_guild_available Traceback (most recent call last): File "C:\Users\Administrator\AppData\Local\Programs\Python\Python312\Lib\site-packages\nextcord\client.py", line 497, in _run_event await coro(*args, **kwargs) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python312\Lib\site-packages\nextcord\client.py", line 2567, in on_guild_available await self.sync_application_commands( File "C:\Users\Administrator\AppData\Local\Programs\Python\Python312\Lib\site-packages\nextcord\client.py", line 2350, in sync_application_commands await self._connection.sync_application_commands( File "C:\Users\Administrator\AppData\Local\Programs\Python\Python312\Lib\site-packages\nextcord\state.py", line 802, in sync_application_commands await self.register_new_application_commands(data=data, guild_id=guild_id) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python312\Lib\site-packages\nextcord\state.py", line 1003, in register_new_application_commands await self.register_application_command(app_cmd, guild_id) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python312\Lib\site-packages\nextcord\state.py", line 1038, in register_application_command raise e File "C:\Users\Administrator\AppData\Local\Programs\Python\Python312\Lib\site-packages\nextcord\state.py", line 1030, in register_application_command raw_response = await self.http.upsert_guild_command( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\AppData\Local\Programs\Python\Python312\Lib\site-packages\nextcord\http.py", line 399, in request raise HTTPException(response, data) nextcord.errors.HTTPException: 400 Bad Request (error code: 50035): Invalid Form Body In options.0.options.1.name: Command name is invalid
问题背景
已知报错源于名称不符合^[\w-]{1,32}$正则规则,但对正则不熟悉。相关代码如下:
# modlink (link/unlink/purgeall) @client.slash_command(guild_ids=serverids,description="Link/Unlink mods ids from the reports section. (Manager Only)") async def mod(interaction: Interaction): pass @mod.subcommand(description="Links/Adds their mod in-game id's to their discord UserID. (Manager Only)") async def add(interaction: Interaction, target: nextcord.User, ingameID: str): if check_manager(interaction.user.id) == True: print("test") else: await interaction.response.send_message(f"{interaction.user.mention}",embed=prefabembeds.NoManagerPerms) print(f"~$- log: (failed) modlink add (target: [{target}, {target.id}], ingameID: {ingameID}), user: [{interaction.user.id}, {interaction.user}]")
已尝试修改装饰器参数和函数名重命名命令,问题仍未解决。
问题分析与解决方案
正则规则通俗解释
^[\w-]{1,32}$ 实际要求:
- 只能用小写英文字母、数字、下划线、连字符
- 长度在1-32字符之间
- 不能含空格、大写字母、特殊符号(如中文、引号等)
错误定位
报错里的options.0.options.1.name指向的是命令参数名称,而非命令本身。你的代码中参数ingameID包含大写字母(I、D),违反了Discord应用命令的参数命名规则。
修改方案
将参数名改为全小写格式,比如ingame_id或ingameid,修改后的代码示例:
# modlink (link/unlink/purgeall) @client.slash_command(guild_ids=serverids,description="Link/Unlink mods ids from the reports section. (Manager Only)") async def mod(interaction: Interaction): pass @mod.subcommand(description="Links/Adds their mod in-game id's to their discord UserID. (Manager Only)") async def add(interaction: Interaction, target: nextcord.User, ingame_id: str): if check_manager(interaction.user.id) == True: print("test") else: await interaction.response.send_message(f"{interaction.user.mention}",embed=prefabembeds.NoManagerPerms) print(f"~$- log: (failed) modlink add (target: [{target}, {target.id}], ingameID: {ingame_id}), user: [{interaction.user.id}, {interaction.user}]")
额外提醒
- 所有命令参数的名称都需符合上述规则,包括子命令参数
- 命令名称(主命令、子命令)同样要遵守规则,但你的代码中
mod和add是合规的
内容的提问来源于stack exchange,提问作者cu1e
相关产品推荐
相关产品推荐

