Create JavaScript Discord bot to alert Twitch live streams

agarwal24

Preeti Agarwal

Posted on May 17, 2024

Create JavaScript Discord bot to alert Twitch live streams

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.
  • 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).
  1. 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.
    • 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:


    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);
Enter fullscreen mode Exit fullscreen mode

Step 4: Run the Bot

Run the bot with the following command:

node bot.js
Enter fullscreen mode Exit fullscreen mode

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, MEE6 and others.

💖 💪 🙅 🚩
agarwal24
Preeti Agarwal

Posted on May 17, 2024

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related