Create JavaScript Discord bot to alert Twitch live streams
Tags: discord, node, javascript
Published: 2024-05-17 15:46:52

Creating a Discord bot for Twitch live alerts using Node.js involves several steps. You'll need to set up a Discord bot, a Twitch app to get notified when a stream goes live, and then connect them together.

Here is a step-by-step guide to create a basic Discord bot that sends an alert to a Discord channel when a specified Twitch user goes live.

# Prerequisites

* Node.js and npm (Node Package Manager) installed.
* Discord account and a Discord server where you have permissions to add a bot.
* Twitch account and a Twitch developer application.

# Step 1: Set Up Your Discord Bot

Create a Discord Bot:
   - Go to the [Discord Developer Portal](https://discord.com/developers/applications).
   - Click "New Application", name it, and save.
   - Go to the "Bot" section and click "Add Bot".
   - Save the token for later (this is the bot's authentication token).

2. **Invite the Bot to Your Server**:
   - Go to the "OAuth2" section.
   - In "OAuth2 URL Generator", under "Scopes", select `bot`.
   - Under "Bot Permissions", select `Send Messages`.
   - Copy the generated URL, paste it in your browser, and invite the bot to your server.

## Step 2: Set Up Your Twitch Developer Application

1. **Create a Twitch App**:
   - Go to the [Twitch Developer Console](https://dev.twitch.tv/console/apps).
   - Click "Register Your Application", fill in the details, and save.
     - For OAuth Redirect URLs, enter "https://localhost". OAuth Redirect is not used for this bot.
     - Choose the "Confidential" client type.
   - Note down the **Client ID** and **Client Secret**.

## Step 3: Create the Bot Using Node.js

Create the bot script:

Create a file named bot.js and add the following code:

```javascript

    const { Client, GatewayIntentBits } = require('discord.js');
    const axios = require('axios');

    // Discord bot token and channel ID
    const DISCORD_TOKEN = 'YOUR_DISCORD_BOT_TOKEN';
    const CHANNEL_ID = 'YOUR_DISCORD_CHANNEL_ID';

    // Twitch credentials
    const TWITCH_CLIENT_ID = 'YOUR_TWITCH_CLIENT_ID';
    const TWITCH_CLIENT_SECRET = 'YOUR_TWITCH_CLIENT_SECRET';
    const TWITCH_USER_NAME = 'TWITCH_USER_NAME';

    const client = new Client({
      intents: [
        GatewayIntentBits.Guilds,
        GatewayIntentBits.GuildMessages,
        GatewayIntentBits.MessageContent
      ]
    });

    let twitchAccessToken = '';

    // Function to get Twitch access token
    async function getTwitchAccessToken() {
      const response = await axios.post('https://id.twitch.tv/oauth2/token', null, {
        params: {
          client_id: TWITCH_CLIENT_ID,
          client_secret: TWITCH_CLIENT_SECRET,
          grant_type: 'client_credentials'
        }
      });
      twitchAccessToken = response.data.access_token;
    }

    // Function to check if the Twitch user is live
    async function isTwitchUserLive() {
      const response = await axios.get(`https://api.twitch.tv/helix/streams`, {
        headers: {
          'Client-ID': TWITCH_CLIENT_ID,
          'Authorization': `Bearer ${twitchAccessToken}`
        },
        params: {
          user_login: TWITCH_USER_NAME
        }
      });

      return response.data.data.length > 0;
    }

    client.once('ready', () => {
      console.log(`Logged in as ${client.user.tag}!`);

      // Check Twitch status every 60 seconds
      setInterval(async () => {
        try {
          const live = await isTwitchUserLive();
          if (live) {
            const channel = await client.channels.fetch(CHANNEL_ID);
            channel.send(`${TWITCH_USER_NAME} is now live on Twitch! Check it out at https://www.twitch.tv/${TWITCH_USER_NAME}`);
          }
        } catch (error) {
          console.error('Error checking Twitch status:', error);
        }
      }, 60000); // Check every 60 seconds
    });

    client.login(DISCORD_TOKEN);

    // Get Twitch access token at the start
    getTwitchAccessToken().catch(console.error);
```

# Step 4: Run the Bot

Run the bot with the following command:

```bash
node bot.js
```

# Conclusion

This bot periodically checks if a specified Twitch user is live and sends a message to a Discord channel if they are. Remember to replace placeholders (YOUR_DISCORD_BOT_TOKEN, YOUR_DISCORD_CHANNEL_ID, YOUR_TWITCH_CLIENT_ID, YOUR_TWITCH_CLIENT_SECRET, TWITCH_USER_NAME) with actual values.

There are also many free services that provide Twitch Discord alerts. These services include [Readybot.io Twitch Bot](https://readybot.io), [MEE6](https://mee6.xyz) and [others](https://top.gg).