Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ciampo/discord-bot-ambrogio
discord-bot-ambrogio
https://github.com/ciampo/discord-bot-ambrogio
Last synced: 5 days ago
JSON representation
discord-bot-ambrogio
- Host: GitHub
- URL: https://github.com/ciampo/discord-bot-ambrogio
- Owner: ciampo
- Created: 2023-05-07T17:00:17.000Z (over 1 year ago)
- Default Branch: trunk
- Last Pushed: 2024-04-08T12:13:08.000Z (7 months ago)
- Last Synced: 2024-10-24T02:23:44.539Z (22 days ago)
- Language: JavaScript
- Size: 64.5 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Ambrogio discord bot
Simple Discord bot that responds to a few slash commands, using the Discord HTTP APIs.
## Resources used
- Based on [this tutorial](https://discord.com/developers/docs/tutorials/hosting-on-cloudflare-workers).
- [Discord Interactions API](https://discord.com/developers/docs/interactions/receiving-and-responding)
- [Cloudflare Workers](https://workers.cloudflare.com/) for hosting## Configuring project
> ⚙️ The dependencies in this project require at least v20 of [Node.js](https://nodejs.org/en/)
Before starting, you'll need a [Discord app](https://discord.com/developers/applications) with the following permissions:
- `bot` with the `Send Messages` and `Use Slash Command` permissions
- `applications.commands` scope> ⚙️ Permissions can be configured by clicking on the `OAuth2` tab and using the `URL Generator`. After a URL is generated, you can install the app by pasting that URL into your browser and following the installation flow.
## Creating your Cloudflare worker
Next, you'll need to create a Cloudflare Worker.
- Visit the [Cloudflare dashboard](https://dash.cloudflare.com/)
- Click on the `Workers` tab, and create a new service using the same name as your Discord bot## Running locally
### Local configuration
> 💡 More information about generating and fetching credentials can be found [in the tutorial](https://discord.com/developers/docs/tutorials/hosting-on-cloudflare-workers#storing-secrets)
Rename `example.dev.vars` to `.dev.vars`, and make sure to set each variable.
**`.dev.vars` contains sensitive data so make sure it does not get checked into git**.
### Register commands
Only run when new commands need to be registered with Discord
```
$ npm run register
```### Run app
Now you should be ready to start your server:
```
$ npm run dev
```### Setting up ngrok
When a user types a slash command, Discord will send an HTTP request to a given endpoint. During local development this can be a little challenging, so we're going to use a tool called `ngrok` to create an HTTP tunnel.
```
$ npm run ngrok
```![forwarding](https://user-images.githubusercontent.com/534619/157511497-19c8cef7-c349-40ec-a9d3-4bc0147909b0.png)
This is going to bounce requests off of an external endpoint, and forward them to your machine. Copy the HTTPS link provided by the tool. It should look something like `https://8098-24-22-245-250.ngrok.io`. Now head back to the Discord Developer Dashboard, and update the "Interactions Endpoint URL" for your bot:
![interactions-endpoint](https://user-images.githubusercontent.com/534619/157510959-6cf0327a-052a-432c-855b-c662824f15ce.png)
This is the process we'll use for local testing and development. When you've published your bot to Cloudflare, you will _want to update this field to use your Cloudflare Worker URL._
## Deploying app
This repository is set up to automatically deploy to Cloudflare Workers when new changes land on the `main` branch. To deploy manually, run `npm run publish`, which uses the `wrangler publish` command under the hood. Publishing via a GitHub Action requires obtaining an [API Token and your Account ID from Cloudflare](https://developers.cloudflare.com/workers/wrangler/cli-wrangler/authentication/#generate-tokens). These are stored [as secrets in the GitHub repository](https://docs.github.com/en/actions/security-guides/encrypted-secrets#creating-encrypted-secrets-for-a-repository), making them available to GitHub Actions. The following configuration in `.github/workflows/ci.yaml` demonstrates how to tie it all together:
```yaml
release:
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
needs: [test, lint]
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18
- run: npm install
- run: npm run publish
env:
CF_API_TOKEN: ${{ secrets.CF_API_TOKEN }}
CF_ACCOUNT_ID: ${{ secrets.CF_ACCOUNT_ID }}
```### Storing secrets
The credentials in `.dev.vars` are only applied locally. The production service needs access to credentials from your app:
```
$ wrangler secret put DISCORD_TOKEN
$ wrangler secret put DISCORD_PUBLIC_KEY
$ wrangler secret put DISCORD_APPLICATION_ID
```