# Discord Bots
## Adding a discord bot
there are a few variants.
the simplest and most common:
- Bot owner's end:
1. bot author signs up as a discord developer.
2. they publish their bot at the dev portal.
3. their bot gets an authorization link.
4. they send that link to server admin.
- Server's end:
1. server admin visits that link.
2. server admin chooses whether to invite bot (pic 2).
## Authorization Link
- The authorization links look like this:
- `https://discord.com/api/oauth2/authorize?<&-SEPARATED LIST OF PARAM=VALUE PAIRS>`
- There are four important parameters for this link.
| query param | description |
| ----------- | ------------------------------ |
| client_id | integer given by bot owner |
| scope | %20-separated list of scopes |
| permissions | bitwise calculated permissions |
| guild_id | integer given by server admin |
## TLDR
- At minimum, the server admin requires the following from the bot owner:
1. its client_id
2. information about which permissions it requires for what functionality
3. any other setup-related instructions
- Decide on a permissions set from [recommended values](#Recommended-Values)
- Create the corresponding link for that set
- 0: `https://discord.com/api/oauth2/authorize?client_id=DANNY_PROVIDES_THIS&scope=bot&permissions=0&guild_id=854180783828762664`
- 1: `https://discord.com/api/oauth2/authorize?client_id=DANNY_PROVIDES_THIS&scope=bot&permissions=446676978752&guild_id=854180783828762664`
- 2: `https://discord.com/api/oauth2/authorize?client_id=DANNY_PROVIDES_THIS&scope=bot%20applications.commands&permissions=448824462400&guild_id=854180783828762664`
## Recommended Values
| query param | recommended value | rationale |
| ----------- | --------------------------- |:--------------------------------------- |
| client_id | tbd | danny provides this |
| scope | bot | typical |
| scope | bot%20applications.commands | if danny's bot has slash commands |
| permissions | 0 | [permissions set 0](#permissions-set-0) |
| permissions | 446676978752 | [permissions set 1](#permissions-set-1) |
| permissions | 448824462400 | [permissions set 2](#permissions-set-0) |
| guild_id | 854180783828762664 | friendzymes server ID |
### permissions set 0
permissions set 0 is no permissions.
the bot is added without any special permissions.
then a role is created for it by server admin.
the bot is assigned that role for permissions.
### permissions set 1
permissions set 1 is the following:
- view channels
- send messages
- send in threads
- create public threads
- embed links
- attach files
- add reacts
- use external emoji
- use external stickers
- read message history
- Calculation: 446676978752 = 0x400 | 0x40 | 0x800 | 0x4000000000 | 0x800000000 | 0x4000 | 0x8000 | 0x10000 | 0x40000 | 0x2000000000
### permissions set 2
permissions set 2 is the following:
- permissions set 1
- use application commands
- Calculation: 448824462400 = 0x400 | 0x40 | 0x800 | 0x4000000000 | 0x800000000 | 0x4000 | 0x8000 | 0x10000 | 0x40000 | 0x2000000000 | 0x80000000
This set is for the scenario where danny's bot has slash commands.
## More On Permissions
:::spoiler List of relevant permissions
https://discord.com/developers/docs/topics/permissions#permissions-bitwise-permission-flags
| type | safe | permission | value (hex) | value (dec) |
|:------- |:----:|:--------------------------------------- |:------------ | ------------:|
| | Y | no permissions | 0 | 0 |
| | | | | |
| general | Y | view channels | 0x400 | 1024 |
| general | Y | create invite | 0x1 | 1 |
| general | Y | change nickname | 0x4000000 | 67108864 |
| general | N | manage channels | 0x10 | 16 |
| general | N | manage roles | 0x10000000 | 268435456 |
| general | N | manage emojis and stickers | 0x40000000 | 1073741824 |
| general | N | view audit log | 0x80 | 128 |
| general | N | view server insights | 0x80000 | 524288 |
| general | N | manage webhooks | 0x20000000 | 536870912 |
| general | N | manage server | 0x20 | 32 |
| general | N | manage nicknames | 0x8000000 | 134217728 |
| general | N | kick members | 0x2 | 2 |
| general | N | ban members | 0x4 | 4 |
| general | N | manage events | 0x200000000 | 8589934592 |
| general | N | administrator (all permissions) | 0x8 | 8 |
| | | | | |
| text | Y | send messages | 0x800 | 2048 |
| text | Y | send messages in threads | 0x4000000000 | 274877906944 |
| text | Y | create public threads | 0x800000000 | 34359738368 |
| text | Y | embed links | 0x4000 | 16384 |
| text | Y | attach files | 0x8000 | 32768 |
| text | Y | add reactions | 0x40 | 64 |
| text | Y | use external emoji | 0x40000 | 262144 |
| text | Y | use external stickers | 0x2000000000 | 137438953472 |
| text | Y | read message history | 0x10000 | 65536 |
| text | Y | use application commands | 0x80000000 | 2147483648 |
| text | N | create private threads | 0x1000000000 | 68719476736 |
| text | N | mention @everyone, @here, and All Roles | 0x20000 | 131072 |
| text | N | send text-to-speech messages | 0x1000 | 4096 |
| text | N | manage messages | 0x2000 | 8192 |
| text | N | manage threads | 0x400000000 | 17179869184 |
| | | | | |
| voice | Y | connect | 0x100000 | 1048576 |
| voice | Y | speak | 0x200000 | 2097152 |
| voice | Y | video | 0x200 | 512 |
| voice | Y | start activities | 0x8000000000 | 549755813888 |
| voice | Y | use voice activity | 0x2000000 | 33554432 |
| voice | Y | priority speaker | 0x100 | 256 |
| voice | Y | mute members | 0x400000 | 4194304 |
| voice | Y | deafen members | 0x800000 | 8388608 |
| voice | Y | move members | 0x1000000 | 16777216 |
| voice | Y | request to speak | 0x100000000 | 4294967296 |
:::