Crypto Prices In Discord - Webhook
Tags: tutorial, crypto, discord, javascript
Published: 2020-07-21 03:30:41

In this 2 part tutorial I will show how you can put cryptocurrency prices in Discord using two methods:
1. Discord Webhook
2. Discord Bot

Today, we will be going over using a webhook.

## How the bot will work

A configuration file will be provided with the IDs of cryptocurrencies to watch, the currency to compare them with, and the interval to send updates on prices in minutes.

## Setting up the workspace
Create a new folder and call `npm init`. Then, install the two packages we will be using, `coingecko-api` and `discord.js`, with `npm install coingecko-api discord.js --save`.

Inside a Discord server, create a webhook for the channel you want to send the crypto information to. You will get a link, which is patterned like this: `https://discordapp.com/api/webhooks/webhookID/webhookToken`.

Create a file called `config.json` and in that put the webhookID and webhookToken attributes in their appropriate fields. In this file create an array named `watchlist` filled with the cryptocurrencies to watch. Then, create an array called `compare` filled with the currencies to compare those cryptocurrencies to. Also create a field called `interval` and give it whatever number of minutes you want to wait before getting each update.

Now, lets get started with the programming.

## Programming the program

We first have to write some basic starter code:
```javascript
const Discord = require("discord.js");
const CoinGecko = require("coingecko-api");
const config = require("./config.json");

const webhookClient = new Discord.WebhookClient(config.webhookID, config.webhookToken);

const CoinGeckoClient = new CoinGecko();
```
Lets first try making it so the program will send prices when it is run.
```javascript
const sendPrices = async () => {
  let data = await CoinGeckoClient.simple.price({
    ids: config.watchlist,
    vs_currencies: config.compare
  });
  var embed = {
    title: "Crypto Update",
    fields: []
  };
  for (const i in data.data) {
    for (const j in data.data[i]) {
      embed.fields.push({name: i + " -> " + j, value: "1 -> " + data.data[i][j] });
    }
  }
  webhookClient.send("Crypto Prices", {embeds: [embed]});
}

sendPrices();
```
This will get the prices and organize into an embed message and send it through the webhook.

Now we have to make it timed. We first have to calculate the milliseconds we have to wait, so put this where you initialize the webhook client and the CoinGeckoClient:
```javascript
const waitTime = config.interval * 60 * 1000;
```
We are now going to create a simple Promise based delay function, so we can use that in a loop.
```javascript
const delay = async () => {
  return new Promise(resolve => setTimeout(resolve, waitTime));
}
```
Now delete the `sendPrices();` statement. We need to create an asynchronous loop to run and delay the wait time. This is what we could do:
```javascript
(async () => {
  while (true) {
    await sendPrices();
    await delay();
  }
})();
```
If you test it, it should work. Congratulations you made a program to send cryptocurrency prices to a Discord channel using Discord webhooks. The next post in the series will detail how to do the same thing with a bot instead of using a webhook.

The source code for this tutorial is on [Github](https://github.com/shadowtime2000/discord-crypto-webhook)