This is a collaborative jukebox for Slack built with Elixir.
This repository contains the code for a webserver that has 2 main endpoints:
POST /api
receives requests from Slack and allows controlling the player (starting, stopping, adding tracks)GET /stream
returns an audio stream that can be opened in your media player or browserYou need to add a "Slash Command" integration, with such settings:
/radio
http://radio.example.com/api
POST
SLACK_TOKEN
env var)Radio
Play YouTube or SoundCloud tracks
[ status | playlist | add <url> | help ]
In Slack:
/radio status
- displays the player status/radio playlist
- displays the tracks in the playlist/radio add <url>
- adds a new track to the playlist (YouTube or SoundCloud links)/radio start
- starts the player/radio stop
- stops the player/radio help
- displays the help
You can access the audio stream at $HOSTNAME/stream
(http://localhost:4000/stream
by default).
Most the players accept to open such a stream (it works with VLC or iTunes or even in your browser).
If you just want to run it (with production settings), use the Docker image:
docker run \
-p 4000:4000 \
-e PORT=4000 \
-e HOSTNAME=http://example.com \
-e SLACK_TOKEN=132456 \
-e SOUNDCLOUD_CLIENT_ID=123456 \
maxdec/radioslack
If you don't want to run a Docker container, you can run the elixir app.
That's the way to go for development.
Before running the app, make sure you have the following packages or binaries:
Erlang/OTP
and Elixir
(obviously)
ffmpeg
for audio transcoding
Please refer to the download page and follow the instructions for your OS.
Example: sudo apt-get install ffmpeg
Download the binary from the releases page and put it somewhere in your $PATH
(e.g. in /usr/local/bin
)
$ git clone https://github.com/maxdec/radioslack
$ cd radioslack
$ mix deps.get compile
$ SLACK_TOKEN=123 SOUNDCLOUD_CLIENT_ID=456 mix run --no-halt
Now you have the radio server running at http://localhost:4000.
You can configure the following environment variables:
PORT - Port for the server (Default: "4000")
HOSTNAME - The hostname to display in the links (Defaults: "http://localhost:4000")
SLACK_TOKEN - The verification token that is sent by Slack "Slash Commands" (Defaults: "123")
SOUNDCOUD_CLIENT_ID - SoundCloud API Client ID, required for SouldCloud tracks (Defaults: nil)
/!\ Those variables need to be set at compile time (not runtime).