Skip to content
Perl JavaScript PLpgSQL
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

Song Request Queue


You can try a live demo at The admin account has the username and password demo, and demo also works as a bot key.


  • PostgreSQL 9.5+
  • Perl 5.20+


  1. Create a PostgreSQL database and user (that can create tables in the database) for the app to use.
$ createuser song_request_user -lP
$ createdb song_request_queue -O song_request_user
  1. Create song_request_queue.conf as a perl configuration file, example:
  pg => 'postgresql://user:pass@/dbname',
  hypnotoad => {
    listen => ['http://*:8080'], # 8080 is default for hypnotoad
  secrets => ['change this'],
  1. Create an empty stopwords file named empty.stop in the tsearch_data subdirectory of your PostgreSQL share directory.
# pg_config --sharedir
# touch /path/to/sharedir/tsearch_data/empty.stop
  1. Install the perl module prerequisites from the cpanfile.
$ cpanm --installdeps .
  1. Start the application.
$ perl daemon --listen='http://*:3000'

Or with hypnotoad (production web server):

$ hypnotoad

See the Mojolicious deployment cookbook for more information on deployment options.


Admin users must be manually added to the users table (created once the webapp has been run and successfully connected to the database). The binary field password_reset_code can be set to a one-time-use code to allow the user to set a password on the /set_password page.

> INSERT INTO "users" ("username","password_reset_code","is_admin","is_mod") VALUES ('someuser',E'\\xDEADBEEF',true,true);

Admin users can add queue moderators on the /admin page. The reset code will be returned and can be used similarly on the /set_password page.

Song format

Songs can be manually added on the Admin page, but can also be imported in CSV or JSON format. The CSV format is expected to be that exported by the C3 Tools Setlist Manager, or in general to have headers and the following columns (order not important):

  • Song Title
  • Artist
  • Album Name
  • Track #
  • Source
  • Duration

The JSON format is expected to be that exported by Clone Hero, or in general to be an array of JSON objects with the following elements (order not important):

  • songName
  • artistName
  • albumName
  • charterName
  • songLength

Bot Requests

Requests can be sent from a bot to the API endpoint /api/queue/add. The parameters bot_key, requested_by, and query should be included in the query string. bot_key must match a value in the bot_keys array in the config file. The endpoint accepts GET requests to accomodate bots with limited HTTP request functionality, but POST should be used when possible to avoid resubmitting requests. The endpoint returns a text string indicating success or error that can be displayed by the bot.

  bot_keys => ['foobar'],

Copyright and License

This software is Copyright (c) 2017 by Dan Book.

This is free software, licensed under:

The Artistic License 2.0 (GPL Compatible)
You can’t perform that action at this time.