Skip to content
Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

crcophony /kəˈkɒf(ə)ni/

read: cacophony

release badge

A simple Discord Terminal UI written in Crystal.


Self-bots are not allowed by Discord's Terms of Service. Using crcophony could technically count as using a self-bot. Use this project at your own risk, it isn't my fault if it gets you banned.

That being said, I'm trying my best to ensure the application is as safe as possible. You cannot do anything in crcophony that you can't do in the normal Discord client (in fact, there are things you can do in the Discord client that you can't do in crcophony) so it should be okay.

Bottom line: Use at your own risk



  • Ctrl+C: Quit Application
  • Enter: Send Message
  • Ctrl+W / Up: Scroll Up
  • Ctrl+S / Down: Scroll Down
  • Ctrl+N: Add line break to message input

Channel Switching

  • Ctrl+K: Open / Close Channel Selection Menu
  • Enter: Select Channel
  • Ctrl+W / Up: Scroll Selection Up
  • Ctrl+S / Down: Scroll Selection Down
  • ESC: Alternative Close Button



If you use Arch Linux or any similar variant, then there's a PKGBUILD in the repo. I haven't published this project to the AUR yet but I intend to at some stage.

From source

If you're not on Arch, currently the only way is to install from source.

Install requirements

The requirements for the application are as follows;


  1. Clone this repo
  2. Run shards install and then shards build --release -Dpreview_mt to install all the requirements and build the application.
    • This will create an executable in the bin folder local to the cloned repo, which can then be moved wherever it needs to be moved.


Before you can run Crcophony, you need to gather a bit of data.

Gathering Data

To use the system, you must gather the following information and export the data as environment variables. These variables are as follows;

  • CRCOPHONY_TOKEN: Your user token used to authenticate yourself with the client
  • CRCOPHONY_USER_ID: Your user id (might not be necessary, requires investigation and could be removed at a later point)

Here are the instructions for you to get these bits of data;

  1. Turn on Developer Mode
  2. To get the user_id, right click on your own name in the Users sidebar of any channel and click "Copy ID". This is the value you should put in as the user_id
  3. Follow this guide to get your token.

If you use the fish or bash shells, a sample .env file has been included in this project ( and env.sample.bash respectively). Simply rename the appropriate file to .env, populate the strings inside with your gathered data and run source .env in the directory to get the correct environment variables created.

Running the Application

After the environment variables are defined, simply run the crcophony executable.


As far as I am currently aware, placing crcophony in a bin folder and running it as crcophony does not work when attempting to spawn threads. This is because Crystal tries to spawn by reading the file passed in as the command following it like a path from your current directory. The workaround I currently use is creating a small bash script that runs crcophony using an absolute path, and placing this executable script in your bin folder.


  1. Fork it (
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request


  • freyamade - creator, maintainer