discord / discord-api-docs

Official Discord API Documentation
https://discord.com/developers/docs/intro
Other
5.91k stars 1.25k forks source link

Cannot publish two commands with a same subcommand #4964

Closed Nyfos closed 2 years ago

Nyfos commented 2 years ago

Description

When publishing my commands, Discord is replying with a 429 Bad Request 400 Bad Request error and says that "command name toggle got already used is this options". So I can't publish /logs toggle and /xp toggle commands. Renaming one of those two commands like logs enable will make things work correctly.

Steps to Reproduce

Just make a put request to https://discord.com/api/v9/applications/<clientId>/commands with the following JSON* plus headers that only contains an Authorization with the bot token.

[
    {"name":"logs","description":"Permet de gérer le système de logs.","options":[

        {"name":"toggle","type":1,"name_localizations":{},"description_localizations":{},"options":[{"name":"toggle","name_localizations":{},"description":"Si le système de logs doit être activé.","description_localizations":{},"type":3,"required":true,"choices":[{"name":"Activer","name_localizations":{},"value":"true"},{"name":"Désactiver","name_localizations":{},"value":"false"}]}],"description":"Permet d'activer ou de désactiver le système de logs."},

        {"name":"toggleall","type":1,"name_localizations":{},"description_localizations":{},"options":[{"name":"toggle","name_localizations":{},"description":"Si les évènements doivent être activés.","description_localizations":{},"type":3,"required":true,"choices":[{"name":"Activer tous les évènements","name_localizations":{},"value":"true"},{"name":"Désactiver tous les évènements","name_localizations":{},"value":"false"}]}],"description":"Permet de modifier tous les évènements en même temps."}

    ],"type":1},

    {"name":"xp","description":"Permet de gérer le système d'expérience du serveur.","options":[

        {"name":"toggle","type":1,"options":[{"name":"toggle","description":"Si le système d'xp doit être activé.","type":3,"required":true,"choices":[{"name":"Activer","value":"true"},{"name":"Désactiver","value":"false"}]}],"description":"Permet d'activer ou de désactiver le système d'xp."}

    ],"type":1}
]

Expected Behavior

I could be able to create two different commands with a same subcommand, like /do that and /make that.

Current Behavior

I need to rename one of the two subcommands to publish my commands. Currently, I'm replacing /logs toggle with /logs enable.

Screenshots/Videos

No response

Client and System Information

Package version

13.6.0

Node.js version

16.14.0

Operating system

Windows

Partials configured

No Partials

Gateway intents I am subscribing to

Guilds, GuildMembers, GuildBans, GuildEmojisAndStickers, GuildIntegrations, GuildWebhooks, GuildInvites, GuildPresences, GuildMessages, GuildMessageReactions

i0bs commented 2 years ago

429 is an HTTP status code for ratelimits.

Nyfos commented 2 years ago

Oh, I'm sorry.. I get a 400 Bad Request error... 😅

{
  "code": "APPLICATION_COMMAND_OPTIONS_NAME_INVALID",
  "message": "Option name toggle is already used in these options"
}
Nyfos commented 2 years ago

No idea @ffl0w ?

freya022 commented 2 years ago

This command setup seem to work for me at least, this is my payload:

[
  {
    "name_localizations": {},
    "default_permission": true,
    "name": "xp",
    "options": [
      {
        "name_localizations": {},
        "name": "toggle",
        "options": [
          {
            "name_localizations": {},
            "autocomplete": false,
            "name": "toggle",
            "description": "No description",
            "description_localizations": {},
            "type": 3,
            "required": true
          }
        ],
        "description": "No description",
        "description_localizations": {},
        "type": 1
      }
    ],
    "description": "No description (base name)",
    "description_localizations": {},
    "type": 1
  },
  {
    "name_localizations": {},
    "default_permission": true,
    "name": "logs",
    "options": [
      {
        "name_localizations": {},
        "name": "toggleall",
        "options": [
          {
            "name_localizations": {},
            "autocomplete": false,
            "name": "toggle",
            "description": "No description",
            "description_localizations": {},
            "type": 3,
            "required": true
          }
        ],
        "description": "No description",
        "description_localizations": {},
        "type": 1
      },
      {
        "name_localizations": {},
        "name": "toggle",
        "options": [
          {
            "name_localizations": {},
            "autocomplete": false,
            "name": "toggle",
            "description": "No description",
            "description_localizations": {},
            "type": 3,
            "required": true
          }
        ],
        "description": "No description",
        "description_localizations": {},
        "type": 1
      }
    ],
    "description": "No description (base name)",
    "description_localizations": {},
    "type": 1
  }
]
Nyfos commented 2 years ago

Uh, really? That's strange, let me try.. Thank you for your response.

Nyfos commented 2 years ago

Mh.. I made a request by only keeping essential data like you, and it seems to be working... (I apologize for the displaying of the code...)

[

    {"name":"logs","name_localizations":{},"description":"Permet de gérer le système de logs.","description_localizations":{},"options":[

        {"name":"channel","type":1,"name_localizations":{},"description_localizations":{},"options":[{"name":"salon","name_localizations":{},"description":"Le salon où envoyer les logs.","description_localizations":{},"type":7,"channel_types":[0,5],"required":true}],"description":"Permet de choisir le salon où envoyer les messages du système de logs."},

        {"name":"config","type":1,"name_localizations":{},"description_localizations":{},"options":[{"name":"event","name_localizations":{},"description":"L'évènement à configurer.","description_localizations":{},"type":3,"required":true,"choices":[{"name":"Création de salon","value":"channel_create"},{"name":"Modification de salon","value":"channel_update"},{"name":"Suppression de salon","value":"channel_delete"},{"name":"Création de rôle","value":"role_create"},{"name":"Modification de rôle","value":"role_update"},{"name":"Suppression de rôle","value":"role_delete"},{"name":"Création d'émoji","value":"emoji_create"},{"name":"Modification d'émoji","value":"emoji_update"},{"name":"Suppression d'émoji","value":"emoji_delete"},{"name":"Arrivée de membre","value":"member_add"},{"name":"Modification de membre","value":"member_update"},{"name":"Départ de membre","value":"member_remove"},{"name":"Édition de message","value":"message_update"},{"name":"Suppression de message","value":"message_delete"},{"name":"Suppression simultanée de plusieurs messages","value":"message_bulk_delete"},{"name":"Suppression de réaction","value":"reaction_remove"},{"name":"Suppression de réaction par un bot","value":"reaction_remove_bot"},{"name":"Suppression de toutes les réactions d'un message","value":"reaction_remove_all"},{"name":"Bannissement de membre","value":"ban"},{"name":"Révocation de bannissement","value":"ban_revoke"},{"name":"Modification du serveur","value":"guild_update"},{"name":"Modification de webhook","value":"webhook_update"},{"name":"Modification d'intégration","value":"integration_update"},{"name":"Création d'invitation","value":"invite_create"},{"name":"Suppression d'invitation","value":"invite_delete"}]},{"name":"toggle","name_localizations":{},"description":"Si l'évènement doit être déclenché ou non.","description_localizations":{},"type":3,"required":true,"choices":[{"name":"Activer","name_localizations":{},"value":"true"},{"name":"Désactiver","name_localizations":{},"value":"false"}]}],"description":"Permet de modifier la configuration du système de logs."},

        {"name":"detect","type":1,"name_localizations":{},"description_localizations":{},"options":[{"name":"type","name_localizations":{},"description":"Les utilisateurs à détecter","description_localizations":{},"type":3,"required":true,"choices":[{"name":"Seulement les utilisateurs humains","name_localizations":{},"value":"only-humans"},{"name":"Seulements les bots","name_localizations":{},"value":"only-bots"},{"name":"Tous les utilisateurs","name_localizations":{},"value":"all-users"}]}],"description":"Permet de choisir les utilisateurs détectés par le système de logs."},

        {"name":"info","type":1,"name_localizations":{},"description_localizations":{},"description":"Permet d'obtenir la configuration actuelle du système de logs."},

        {"name":"toggle","type":1,"name_localizations":{},"description_localizations":{},"options":[{"name":"toggle","name_localizations":{},"description":"Si le système de logs doit être activé.","description_localizations":{},"type":3,"required":true,"choices":[{"name":"Activer","name_localizations":{},"value":"true"},{"name":"Désactiver","name_localizations":{},"value":"false"}]}],"description":"Permet d'activer ou de désactiver le système de logs."},

        {"name":"toggleall","type":1,"name_localizations":{},"description_localizations":{},"options":[{"name":"toggle","name_localizations":{},"description":"Si les évènements doivent être activés.","description_localizations":{},"type":3,"required":true,"choices":[{"name":"Activer tous les évènements","name_localizations":{},"value":"true"},{"name":"Désactiver tous les évènements","name_localizations":{},"value":"false"}]}],"description":"Permet de modifier tous les évènements en même temps."}

    ],"type":1},

    {"name":"xp","name_localizations":{},"description":"Permet de gérer le système d'expérience du serveur.","description_localizations":{},"options":[

        {"name":"add","type":1,"name_localizations":{},"description_localizations":{},"options":[{"name":"utilisateur","name_localizations":{},"description":"L'utilisateur à qui vous souhaitez donner de l'xp.","description_localizations":{},"type":6,"required":true},{"name":"quantité","name_localizations":{},"description":"La quantité d'xp à donner à l'utilisateur.","description_localizations":{},"type":4,"min_value":1,"required":true}],"description":"Permet d'ajouter de l'xp à un utilisateur."},

        {"name":"remove","type":1,"name_localizations":{},"description_localizations":{},"options":[{"name":"utilisateur","name_localizations":{},"description":"L'utilisateur à qui vous souhaitez retirer de l'xp.","description_localizations":{},"type":6,"required":true},{"name":"quantité","name_localizations":{},"description":"La quantité d'xp à retirer à l'utilisateur.","description_localizations":{},"type":4,"min_value":1,"required":true}],"description":"Permet de retirer de l'xp à un utilisateur."},

        {"name":"toggle","type":1,"options":[{"name":"toggle","description":"Si le système d'xp doit être activé.","type":3,"required":true,"choices":[{"name":"Activer","value":"true"},{"name":"Désactiver","value":"false"}]}],"description":"Permet d'activer ou de désactiver le système d'xp."}

    ],"type":1}

]

I'm going to make more checks.

Nyfos commented 2 years ago

Here are the checks I made:

Well, it's working... I really don't understand.. I'll check the Discord API Changelog, it was probably a bug that is now patched. If not, I think it's a bug coming from my cache or something else on my computer. It's very strange.

Thank you so much for your response @freya022 !

Nyfos commented 2 years ago

Ok. I'm sorry for all of that. It seems I made a mistake in my code. The error came back, so I removed all of the commands one by one, until I was sending only the xp command. Then, I checked the data sent, and saw that:

[
    {"name":"xp","name_localizations":{},"description":"Permet de gérer le système d'expérience du serveur.","description_localizations":{},"options":[
        {"name":"toggle","type":1,"name_localizations":{},"description_localizations":{},"options":[
            {"name":"toggle","name_localizations":{},"description":"Si le système de logs doit être activé.","description_localizations":{},"type":3,"required":true,"choices":[
                {"name":"Activer","name_localizations":{},"value":"true"},
                {"name":"Désactiver","name_localizations":{},"value":"false"}
            ]}
        ],"description":"Permet d'activer ou de désactiver le système de logs."},
        {"name":"add","type":1,"name_localizations":{},"description_localizations":{},"options":[
            {"name":"utilisateur","name_localizations":{},"description":"L'utilisateur à qui vous souhaitez donner de l'xp.","description_localizations":{},"type":6,"required":true},
            {"name":"quantité","name_localizations":{},"description":"La quantité d'xp à donner à l'utilisateur.","description_localizations":{},"type":4,"min_value":1,"required":true}
        ],"description":"Permet d'ajouter de l'xp à un utilisateur."},
        {"name":"remove","type":1,"name_localizations":{},"description_localizations":{},"options":[
            {"name":"utilisateur","name_localizations":{},"description":"L'utilisateur à qui vous souhaitez retirer de l'xp.","description_localizations":{},"type":6,"required":true},
            {"name":"quantité","name_localizations":{},"description":"La quantité d'xp à retirer à l'utilisateur.","description_localizations":{},"type":4,"min_value":1,"required":true}
        ],"description":"Permet de retirer de l'xp à un utilisateur."},
        {"name":"toggle","type":1,"options":[
            {"name":"toggle","description":"Si le système d'xp doit être activé.","type":3,"required":true,"choices":[
                {"name":"Activer","value":"true"},{"name":"Désactiver","value":"false"}
            ]}
        ],"description":"Permet d'activer ou de désactiver le système d'xp."}
    ]}
]

That's so horrible to find a such bug, above all when you code since as long as me.. I apologize for the time taken. Have a nice evening!