Execute Scripts

Integrate Python, Javascript, or other scripts into your Streamer.bot actions

You can utilize the Run a Program sub-action to execute scripts on the fly.

Read more in API > Sub Actions > Core > System > Run A Program

This can be great if you are more comfortable in another language, such as Python or Javascript, and less comfortable in C#.

Streamer.bot's built-in C# Code sub-actions are much more powerful, as a first-class integration, but you can still do a lot with some quick scripts in other languages!

Be;pw, we are going to showcase some basic ways you can use this functionality.

Basic Math

With node you can quickly evaluate inline scripts using node -e

Similarly, in python you can use python -c

In this example, we are going to use node to do a basic addition of two Streamer.bot variables

This is for example purposes, and you should probably utilize Inline Functions for quick math operations!
  1. Add a Test trigger
    You can use any variables you want, but for this example we are going to populate %value1% and %value2%: trigger preview
  2. Configure your sub-action
    To add together the two variables, we will use Javascript.
    sub-action preview
    • Target: node
    • Arguments: -e "console.log(%value1% + %value2%)"
    • Wait: 1
    You must set the Wait parameter to a value greater than zero in order to get output from scripts
  3. Run the action
    Execute the test trigger to run the action
  4. Read Output
    If you browse to Action Queues > Action History and inspect the variables for the action execution, you will see output# variables were populated from the executed script.
    The result of our simple math equation will be available in %output0%!

HTTP POST Requests

Streamer.bot ships with a Fetch URL sub-action, but it can only send GET requests.

In this example, we will use node to send POST requests with variable data.

  1. Create your script
    We are going to place the following script, fetch.js, inside the <YOUR_STREAMERBOT_DIR>/data/scripts directory.
    If you don't already have a scripts directory, feel free to create it place your scripts whereever you'd like!
    fetch.js
    const url = process.env.URL;
    fetch(url, {
      // Default to GET, override if provided in environment variables
      method: process.env.METHOD || 'GET',
      headers: {
        // Default to applicaton/json, override if provided in environment variables
        'Content-Type': process.env.CONTENT_TYPE || 'application/json',
      },
      body: process.env.DATA,
    }).then(response => {
      // Send the response status code to %output0%
      console.log(response.status);
    
      // Send the response body to %output1%
      // If the response is not JSON, you can use .text() instead of .json()
      // We are just making sure we un-prettyify the JSON response to place it on a single line of output
      response.json().then(data => console.log(JSON.stringify(data)));
    });
    
  2. Configure your sub-action
    sub-action preview
    • Target: node
    • Working Directory: <path/to/your/scripts/directory>
    • Arguments: fetch.js
    • Wait: 1
    • Environment Variables:
      This is where we will pass any data, including variables, to our script.
      NameValueDescription
      URLhttps://httpbin.org/postExample URL, useful for testing
      METHODPOSTSend a HTTP POST request
      DATA{ "test": %value1% }Example JSON data containing variables
  3. Run the action
    Execute the test trigger to run the action
  4. Read Output
    If you browse to Action Queues > Action History and inspect the variables for the action execution, you will see output# variables were populated from the executed script.
    If successful, the status code 200 be available in %output0% Any response data, in this case a JSON string, will be available in %output1%

Discord Webhook Embeds

By extending the HTTP POST request example, you can create custom Discord Webhooks with your own embeds.

  1. Create your script
    discord-webhook.js
    const data = {
      "embeds": [
        {
          "title": "Hello, world!",
          "description": "This is an embed, sent from Streamer.bot, via a NodeJS sub-action!",
          "color": 36863,
          "fields": [
            {
              "name": process.env.FIELD_1_NAME,
              "value": process.env.FIELD_1_VALUE,
            },
            {
              "name": process.env.FIELD_2_NAME,
              "value": process.env.FIELD_2_VALUE,
            }
          ],
          "author": {
            "name": "Streamer.bot",
            "url": "https://streamer.bot",
            "icon_url": "https://streamer.bot/logo-transparent.png"
          }
        }
      ],
    };
    
    const url = process.env.WEBHOOK_URL;
    fetch(url, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(data),
    }).then(response => {
      // Send the response status code to %output0%
      console.log(response.status);
    });
    
  2. Configure your sub-action
    sub-action preview
    • Target: node
    • Working Directory: <path/to/your/scripts/directory>
    • Arguments: fetch.js
    • Wait: 1
    • Environment Variables:
      This is where we will pass any data, including variables, to our script.
      NameValueDescription
      FIELD_1_NAMEvalue1Label for embed field 1
      FIELD_1_VALUE%value1%Value of embed field 1, loaded from variable
      FIELD_2_NAMEvalue2Label for embed field 2
      FIELD_2_VALUE%value2%Value of embed field 2, loaded from variable
      WEBHOOK_URL<secret webhook url>Find in Discord channel settings -> Integrations
  3. Run the action
    Execute the test trigger to run the action
  4. Read Output
    If you browse to Action Queues > Action History and inspect the variables for the action execution, you will see output# variables were populated from the executed script.
    If successful, the status code 204 be available in %output0%

    This is a very basic example and could be expanded further to allow variable customization over the entire webhook structure.