Discord CLI client written in Python, based on urwid.

pip install discurses==0.3.5



PyPI version

A CLI for discord, written in Python. The name is a combination of discord and curses, as in the terminal interface library. Discurses doesn’t use curses, but i originally planned to. It is now built using urwid, a widget library which can use curses as a rendering engine, but discurses works fine without it.

Questions, bug reports, PRs and comments are all very welcome.

I can be contacted at topisani@hamsterpoison.com Discurses chat view

Contributors list can be seen in the CONTRIBUTORS file. If you have contributed to the project and do not find your name, please let us know.



That one is pretty easy:

$ pip install discurses

Python 3.6 is required (as discord.py does not yet work with 3.7).

If you're having trouble launching the application post-install, check your PATH variable.

$ echo $PATH

Pip installs by default into $HOME/.local/bin which is not typically part of your path. You can add it with the following command:

$ export PATH=$PATH:$HOME/.local/bin

Note: this is a temporary fix, you would need to add $HOME/.local/bin to your .profile or .bashrc to make it permanent, check your distributions documentation for PATH settings.


Start out by following this guide.

After that, follow the instructions for linux above

Seriously: urwid is sadly not supported on Windows, and since discurses is built on top of that, such an OS is not supported. You may use the official desktop client anyway.


Put the file example_discurses.yaml in your ~/.config/ directory, replace the placeholder with your discord token and rename the file to discurses.yaml. You can get the token by visiting https://discordapp.com/channels/@me, opening the developer tools (Ctrl+shift+i or Command+shift+i) and click on the Application tab, then on the sidebar: Local Storage then click the URL from the dropdown and you should see the token key followed by your token, copy what's inside the speech marks and put it in your .yaml file. This may not be easy using the Discord webapp as there is a mechanism in place to delete the token from storage once the page is loaded (occurs when the splash screen disappears).


Full list available in discurses/keymaps.py…

When your cursor is in the text box:

Key Action
enter send message
meta + enter insert newline
down show channel seclector
up focus on the message list
esc cancel message

General Commands:

Key Action
meta + s toggle server list
meta + b toggle member list
meta + q quit


First of all, please do, and if you do, feel free to ask me any questions. Also, the issue reports are up for grabs, but id be very happy to be notified before you start work, just so we dont work on the same thing.