Debugging with an HTTP Client ============================= This section describes how you may debug your bot locally by issuing commands through tools such as `curl `_, `Postman `_, or any other HTTP client. It is assumed you already know the basics of setting up a bot. If not, see :ref:`tutorial-page`. Configuration ------------- Messages sent from Discord to your bot are signed and are verified when received. Having to calculate the signature for your request can be time consuming and shouldn't be needed in a local environment. A config parameter ``DONT_VALIDATE_SIGNATURE`` is provided which when set to ``True`` will bypass signature verification. This should only be set in debug mode and never in production. Another config parameter ``DONT_REGISTER_WITH_DISCORD`` may be set to ``True`` to bypass registering your commands with Discord when launched. Registering too many times in succession may result in being temporarily limited by Discord. For local debugging it is not needed. Example ------- The following is simple example of a bot that will disable signature verification and Discord registration. It exposes one command ``/ping`` with an optional ``pong`` parameter. .. code-block:: python import os import sys from flask import Flask sys.path.insert(1, ".") from flask_discord_interactions import DiscordInteractions app = Flask(__name__) discord = DiscordInteractions(app) app.config["DISCORD_CLIENT_ID"] = os.environ["DISCORD_CLIENT_ID"] app.config["DISCORD_PUBLIC_KEY"] = os.environ["DISCORD_PUBLIC_KEY"] app.config["DISCORD_CLIENT_SECRET"] = os.environ["DISCORD_CLIENT_SECRET"] app.config["DONT_VALIDATE_SIGNATURE"] = True app.config["DONT_REGISTER_WITH_DISCORD"] = True discord.update_commands() @discord.command() def ping(ctx, pong: str = 'pong'): f"Respond with a friendly 'pong'!" return f"{pong} with no signature verification!" discord.set_route("/interactions") discord.update_commands(guild_id=os.environ["TESTING_GUILD"]) if __name__ == '__main__': app.run() Testing ------- Assuming your bot is running at ``http://127.0.0.1:5000`` and uses the ``/interactions`` route, the below is a simple example of calling ``/ping`` with a ``pong`` parameter set to ``Pong``. This is only a subset of the available JSON that may be passed in, but is the minimal needed for this example to work. .. code-block:: sh $ curl --location --request POST 'http://127.0.0.1:5000/interactions' --header 'Content-Type: application/json' --data-raw '{ "type": 2, "id": 1, "channel_id": "", "guild_id": "", "token": "", "data": { "id": 1, "name": "ping", "options": [ { "type": 1, "name": "Pong" } ] }, "member": { "id": 1, "nick": "", "user": { "id": 1, "username": "test" } } }' In Postman, you would issue a POST request to ``http://127.0.0.1:5000/interactions`` setting the header ``Content-Type: application/json`` and your message as a raw JSON body. In the Curl example above, the value given to the ``--data-raw`` parameter would be the JSON body content, without the single quotes at the start and end.