---
title: Discord.js and HTTP requests
tags: discord, discord.js, http, express
---
## Discord.js and HTTP requests
The basic idea goes by that if discord commands were used, the `message` object would contain the information required like channel ID, guild ID, etc.
But this is not possible if a request is used to perform certain functionalities.
**What is available to us?**
> `client` object is available for making everything. `client` is a treasure of its own. From roles to channels to guild everything can be obtianed from it.
### Lets start how to use discord.js functions in server (Express) requests.
> **NOTE** We are using the discord.js@12.x.x version. A recent version has been released. Updates will come soon.
- **First step would to import the module**
```javascript
const {Client} = require('discord.js')
```
- **Create a `client` object**
```javascript
const client = new Client()
```
- **Now if your server code is broken down into modular format, you should make the `client` object available all around the modules**
> Provided you have set up your server using Express.js framework and your code is on modular format.
```javascript
app.set('discord', client)
```
- **Now in the request you want to use, just get the `discord`**
```javascript
router.get('/some-endpoint', (req, res)=>{
const client = req.app.get('discord')
//now use the client object as per requirement.
})
```
- **First we need to find the guild**
> Guilds are nothing but the discord servers your bot is installed.
To get all the guilds, use
```javascript
client.guilds.cache
```
It returns a `collection`. You can find the documention for `collection` [here](https://discord.js.org/#/docs/collection/main/class/Collection).
Now lets use a method of collection to find your server.
```javascript
client.guilds.cache.find((each) => each.name === "Your_Server_Name")
```
Returns a `Guild` object. You can documentation of `Guild` class [here](https://discord.js.org/#/docs/main/stable/class/Guild).
- ### Adding a channel
> Idea behind adding a channel is first find the guild then use that to create channels. But these channels will not be added under any category. To add them under a category, we need to find the category id and provide that while creating the channel.
Now lets find the category first.
>To find the category, either we need to know the name of the category or we need to find them in brute-force manner
If we know the category name,
```javascript
<guild>.channels.cache.find((each)=> each.name==="CATEGORY_NAME" && each.type === 'category')
```
>Replace the `CATEGORY_NAME` with the name of the category in your server. Use the `guild` object obtained previouly in `<guild>`
If you want to find the categories available,
```javascript
console.log(<guild>.channels.cache.filter((each)=>each.type==='category'))
```
>Use the `guild` object obtained previouly in `<guild>`
After obtaining the name, you can use that to find the category.
Now lets use the guild and category to create a channel inside that category.
```javascript
<guild>.channels.create("CHANNEL_NAME", {
type: 'DESIRED_TYPE',
permissionOverwrites: [
{
id: <guild>.roles.everyone,
allow: ["VIEW_CHANNEL", "SEND_MESSAGES", "READ_MESSAGE_HISTORY"],
},
],
parent: <catergory>.id,
})
```
>Replace `CHANNEL_NAME` with your channel name, `DESIRED_TYPE` with the type of channel you want text/voice/category, `<guild>` with desired guild, `<category>` with the category obtained before. You can use own `permissionOverwrites`.
**Example**
> A full example how to create a public channel with all permissions
```javascript
exports.createChannel = async (req, res) => {
const client = req.app.get("discord")
const allGuilds = client.guilds.cache
const result = allGuilds.find((each) => each.name === "Pratyay Server")
const textCategory = result.channels.cache.find(
(each) => each.name === "Text Channels"
)
result.channels.create("Random Channel", {
type: "text",
permissionOverwrites: [
{
id: result.roles.everyone,
allow: ["VIEW_CHANNEL", "SEND_MESSAGES", "READ_MESSAGE_HISTORY"],
},
],
parent: textCategory.id,
})
return res.json({ status: 'Channel Created'})
}
```
- **Send text to a channel**