What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
You can create a Discord bot without a prebuilt bot service. The basic process is to create an application, configure how it can be installed, register commands, and connect code to handle interactions or Gateway events.
For a simple slash-command bot, you do not need to read ordinary messages or enable the Message Content intent. You can register commands through Discord’s HTTP API and receive them through an HTTP interactions endpoint; use a Gateway connection when you need real-time Discord events.
What you need before creating the bot
- A Discord account
- Permission to install applications in a test server, normally the Manage Server permission
- A programming environment if you want the bot to perform actions
- A public HTTPS endpoint if you use HTTP interactions locally; a tunnel such as ngrok is suitable for testing
Use a private test server while developing. Guild commands update instantly and are useful for testing; global commands are intended for broader release.
1. Create a Discord application
- Open the Discord Developer Portal.
- Select Create App.
- Enter an app name and select Create.
The new application opens on General Information. Copy the Application ID if you will register commands through the API. The same page contains the application’s Public Key, which Discord uses to verify HTTP interaction signatures.
#1 Best Overall
A newly created application already has a bot user enabled. Current Discord instructions do not require an Add Bot or Add Bot User step.
2. Generate and protect the bot token
- In the application’s left sidebar, select Bot.
- Under Token, select Reset Token.
- Copy the newly generated token and store it in a password manager or environment variable.
Discord will not show the token again unless you regenerate it. The token authenticates as the bot for Gateway connections and most REST API calls, so treat it like a password.
Do not put it in a GitHub repository, screenshot, client-side JavaScript, or support forum. A typical local .env file might contain:
DISCORD_TOKEN=your_bot_token_here
DISCORD_APPLICATION_ID=your_application_id_here
DISCORD_GUILD_ID=your_test_server_id_here
Add .env to .gitignore. If the token is exposed, return to Bot, select Reset Token, and replace the old value everywhere your code uses it.
3. Configure the installation link
- Select Installation in the application sidebar.
- Under Installation Contexts, enable Guild Install for a server bot. Enable User Install only if you want users to install the application for their own use.
- Under Install Link, choose Discord Provided Link.
With that option selected, Discord displays Default Install Settings. Configure the scopes based on how the application will work:
| Installation and use | Scopes | Bot permission |
|---|---|---|
| User Install for commands | applications.commands |
None |
| Guild Install for a bot that acts as a server member | applications.commands and bot |
Only what the bot needs |
| Guild Install for commands only, without a bot user in the server | applications.commands |
None |
Discord’s quick-start example selects Send Messages for a bot. Request only the permissions it actually needs. Installing a bot and granting its permissions are separate decisions; channel-level permission overwrites can restrict it further.
Copy the generated install link from the Installation page and open it in a browser while logged into Discord. Depending on the selected context, Discord displays Add to server or Add to my apps.
Rank #2
A Discord Provided Link takes its scopes and bot permission bitfield from Default Install Settings; those values are not encoded in the URL. It supports the standard applications.commands and bot scopes. If your application needs other OAuth2 user scopes, create a custom OAuth2 authorization URL instead.
4. Decide how the bot will connect
Discord applications can use one or more of these interfaces:
| Interface | Use it for |
|---|---|
| Gateway WebSocket | Real-time events and state, such as presence, member events, and message events |
| HTTP API | REST operations and slash-command registration |
| HTTP interactions endpoint | Receiving slash commands, buttons, select menus, and other interactions |
If your goal is a slash command such as /hello, a full Gateway bot is not required. Application commands use Discord’s interactions model. A user-installed application is visible only to the authorizing user and is limited to commands; it does not behave like an ordinary server member.
Use the Gateway when the bot must continuously observe Discord events. Intents determine which events Discord sends over that connection. They do not control HTTP interactions.
The Tool Desk
Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →5. Register a slash command
Commands are registered through an HTTP endpoint. During development, use a guild command:
POST https://discord.com/api/v10/applications/<application_id>/guilds/<guild_id>/commands
For a global command, use:
POST https://discord.com/api/v10/applications/<application_id>/commands
Authenticate the request with:
Authorization: Bot <bot_token>
For example, this curl request registers a simple /blep command in a test server:
Rank #3
curl -X POST -H "Authorization: Bot $DISCORD_TOKEN" -H "Content-Type: application/json" -d '{"name":"blep","type":1,"description":"Send a random adorable animal photo"}' "https://discord.com/api/v10/applications/$DISCORD_APPLICATION_ID/guilds/$DISCORD_GUILD_ID/commands"
type: 1 means CHAT_INPUT, Discord’s slash-command type. In the official JavaScript quick-start project, the equivalent command-registration step is:
npm run register
Registering a command with the same name, type, and scope updates the existing command rather than creating a duplicate. Avoid repeatedly creating commands in deployment code: Discord documents a limit of 200 application-command creates per day per guild.
Command rules that commonly cause rejection
- Slash-command names and option names must contain 1–32 characters and follow Discord’s Unicode-aware naming rule.
- If a letter has a lowercase form, use the lowercase form for a
CHAT_INPUTname. - The description must contain 1–100 characters.
- A command can have no more than 25 options.
- Required options must come before optional options in the options array.
- The combined command text, including names, descriptions, options, subcommands, groups, and choices, cannot exceed 8,000 characters.
Guild commands update instantly but are not available in direct messages. Global commands are available in every guild where the app is installed and should be used once the command is ready for broader release.
Quick wins for a faster PC:
Scan for outdated or missing drivers - takes under a minuteDriver Scan →Repair Windows errors before they cause bigger problemsFix Now →6. Make the bot respond to interactions
Registering /blep only tells Discord that the command exists. Your application must still receive and handle the interaction.
For an HTTP interactions bot:
- Run your application locally.
- Expose its port through HTTPS. The official JavaScript sample listens on port
3000by default. - Start a tunnel with
ngrok http 3000. - In the Developer Portal, open General Information.
- Paste the forwarding URL into Interaction Endpoint URL, append
/interactions, and select Save Changes.
For example, if ngrok gives you https://example.ngrok-free.app, the endpoint could be https://example.ngrok-free.app/interactions.
The endpoint must do two important things:
- Verify Discord’s request signature with the application’s Public Key.
- Answer Discord’s initial
PINGrequest with the requiredPONGresponse.
After Discord verifies the endpoint, type /blep in the server where the command was installed. Your handler should identify the command and send an interaction response. The exact code depends on your language or framework, but command registration makes the command visible while interaction handling makes it do something.
The official JavaScript quick-start sample uses these commands:
Crashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minutePC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Rank #4
npm run register
npm run start
The sample listens on port 3000 by default. Set PORT in .env to use a different port, and make sure the application and ngrok use the same port.
7. Add options and permissions
A useful command normally accepts input. For example, a command can define a required string option, then read that option in the interaction payload. Keep required options before optional ones.
For command-level restrictions, use default_member_permissions. Setting it to the string "0" disables the command for everyone except administrators by default. Do not build new commands around the older default_permission field, which is scheduled for deprecation. Likewise, dm_permission is deprecated; use the current contexts field to describe where a command can be used.
Command permission API updates are a separate matter: they require a user-authorized Bearer token with the applications.commands.permissions.update scope. A bot token will fail for those calls.
8. Add Gateway events only when you need them
If the bot needs to react to messages, joins, reactions, or other live events, connect it to the Gateway using a Discord library for your chosen language. Enable only the necessary intents in code and, where applicable, on the application’s Bot page.
The Message Content intent is not needed for ordinary slash commands. It matters when Gateway event payloads must contain message text. Privileged intents require approval before an application is verified, while standard intents do not require additional approval.
Common problems and fixes
| Symptom | Likely cause | Fix |
|---|---|---|
| Interaction endpoint verification fails | Wrong forwarding URL, mismatched ports, missing PING handling, or failed Public Key verification | Confirm both local processes use port 3000, check the /interactions path, and inspect the request-signature code |
| Slash command appears but does nothing | Registration succeeded, but no interaction handler is running or reachable | Check the application logs, public tunnel, endpoint URL, signature verification, and response code |
| Command is missing from a server | Wrong guild_id, or the app was installed without applications.commands |
Register it for the correct server and reinstall using the current Installation settings |
| Command works in a server but not in DMs | It is a guild command, which is unavailable in DMs | Register globally and configure the appropriate installation and interaction contexts |
| Message events contain no content | Message Content is a privileged intent and was not enabled or requested | Enable it on the Bot page and in code, or use slash commands instead |
| Bot cannot send or manage something | Missing bot permission or a channel-level overwrite | Review the install permission bitfield and the target channel’s permissions |
| Command registration is rejected | Invalid name, description, option order, option count, or total text length | Check the command schema against Discord’s limits |
Removing or changing a command
To update a command, use PATCH with its command ID. To remove it, use DELETE. Global commands use paths such as:
PATCH /applications/<application_id>/commands/<command_id>
DELETE /applications/<application_id>/commands/<command_id>
Free tools Windows power users keep installed
One-click scans. No signup required.
Best Value
Guild commands add /guilds/<guild_id> before /commands. If your registration script sends the same command name and type again, Discord normally upserts it, so you do not need to delete it first.
Useful official references
- Discord getting started guide
- Application commands documentation
- Application installation settings
- Discord bot connection overview
FAQ
Do I need to click Add Bot User for a new Discord application?
No. Newly created applications currently have a bot user enabled by default. Open the Bot page to generate or reset its token.
Do slash commands require the Message Content intent?
No. Slash commands use Discord interactions and do not require Message Content. That privileged intent is needed when Gateway events must include message text.
What is the difference between a guild command and a global command?
A guild command is registered for one server and updates instantly, making it useful for testing. A global command is available in every guild where the application is installed, but it is intended for commands ready for public use.
Recommended Free Tools
Can I make a Discord bot without using the Gateway?
Yes. An application can register commands through the HTTP API and receive slash commands through an HTTP interactions endpoint. Use the Gateway when you need real-time Discord events or state.
What should I do if my bot token is exposed?
Go to the application’s Bot page, select Reset Token, update the token in your environment variables and deployment secrets, and remove the exposed value from logs or repositories.
The Bottom Line
The shortest current route is: create the application, generate its token if you need a bot user, configure Installation → Install Link → Discord Provided Link, grant only required scopes and permissions, register a guild slash command through API v10, and connect an HTTP endpoint that verifies signatures and handles PING and interactions. Add Gateway intents only for features that genuinely need live event data.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.
Do these 3 things before closing this tab:
1Scan for outdated or missing drivers - takes under a minute2Repair Windows errors before they cause bigger problems3Fix the driver behind crashes, sound loss and screen glitches

