Introduction
Recently I discovered a tool called Huginn. It’s a neat tool that allows you to automate many tasks – like a self hosted Zapier. I also realized a desire to automate the discovery + publication of codes from Hideout.tv’s Facebook page – so I figured, why not use Huginn to solve that problem?
Setup Tutorial
Setup for your own Discord server is pretty simple. All you need is a server to host Huginn and the JSON file for my Huginn scenario (basically a bundle that runs itself).
If you don’t want to set up your own server, and just want to get notifications, I have a demo Discord server where an instance of the bot lives.
Huginn Setup
You’ll need a server with at least 2GB RAM, a decent CPU, and Ubuntu or Debian. Make sure you have Docker and Docker-compose installed:
curl https://get.docker.com | bash
apt install docker-compose
Huginn can easily be run with a simple docker-compose
script:
version: '2'
services:
mysqldata:
image: mysql:5.7
command: /bin/true
volumes:
- /opt/huginn/mysql-data:/var/lib/mysql
mysql:
image: mysql:5.7
restart: always
env_file:
- ./mysql.env
volumes_from:
- mysqldata
web:
image: huginn/huginn-single-process
restart: always
ports:
- "127.0.0.1:3000:3000"
env_file:
- ./mysql.env
- ./secrets.env
depends_on:
- mysql
threaded:
image: huginn/huginn-single-process
command: /scripts/init bin/threaded.rb
restart: always
env_file:
- ./mysql.env
- ./secrets.env
depends_on:
- mysql
- web
watchtower:
volumes:
- '/var/run/docker.sock:/var/run/docker.sock'
image: containrrr/watchtower
Put this in a file called docker-compose.yaml
in a folder of your choice, download secrets.env and mysql.env to the same folder, and run docker-compose up -d
. Huginn will be running on 1.2.3.4:3000
(where 1.2.3.4 is your server’s IP).
(You should know that Huginn is incredibly configurable. Config options are available in the GitHub repo, but are outside the scope of this guide.)
You should use a reverse proxy like Caddy in front of Huginn, but that is outside the scope of this guide.
Once you access the web UI by opening 1.2.3.4:3000
in your web browser, login using the default username and password, admin / password
(you should change these).
Discord Webhook Setup
Make sure you are the admin of a server (or at least have Manage Webhooks permission). Create a webhook by opening Server Settings > Webhooks > Create Webhook, specify a channel of your choice for the bot to post to, and copy the URL at the bottom. You’ll need this to configure the scenario at the next step.
Scenario Setup
Download the scenario from my Huginn server: https://huginn.unixfy.me/scenarios/2/export.json
Upload it through the “Import Scenario” button in the “Scenarios” section of Huginn.
Go to “Credentials” and create a new credential called discord_hideout_webhook_url
. Set the value to the webhook URL you copied earlier.
Now, wait for Hideout.tv to post a new code to their Facebook page and watch the notification automagically appear in your Discord server!
Editing the notification sent to Discord by the bot
To change how the notification appears or add/remove mentions, you can edit the Agent titled “Publish codes to Discord“. In the payload
section of the JSON configuration, you can modify the POST request sent to Discord (hint: use this tool to generate an embed!).
If you run into any problems with the setup, feel free to comment down below 🙂
Write-up
The logic behind the bot is pretty simple, and thanks to Huginn, requires exactly 0 lines of code.
A web scraper agent parses the posts list of Hideout’s Facebook page and converts the contents of each post into a text string (postContent). All posts are dropped except the most recent one. A trigger agent reads the output of the most recent post and checks if it contains “free points” (a string present in every post with a promo code). If it does, it’s sent to a post agent that POSTs the Discord webhook, if not, the data is discarded. It’s that simple (and shows how powerful Huginn is!).