The Discord terminal client you never knew you wanted.

I AM CLOSING DOWN THE CORDLESS PROJECT

Hey, so I know this is somewhat of a bummer, but I got banned because of ToS violation today. This seemed to be connected to creating a new PM channel via the /users/@me endpoint. As that's basically a confirmation for what we've believed would never be enforced, I decided to not work on the cordless project anymore. I'll be taking down cordless in package managers in hope that no new users will install it anymore without knowing the risks. I believe that if you manage to build it yourself, you've probably read the README and are aware of the risks. I'll keep the repository up, but might archive it at some point. And yes, you'll still be able to use existing binaries for as long as discord doesn't introduce any more breaking changes. However, be aware that the risk of getting a ban will only get higher with time!

Cordless

Overview

WARNING: Third party clients are discouraged and against the Discord TOS. There have already been cordless users that got banned, including me (Bios-Marcel, the maker and maintainer)

Cordless is a custom Discord client that aims to have a low memory footprint and be aimed at power-users.

The application only uses the official Discord API and doesn't send data to third parties. However, this application is not an official product by Discord Inc.

Demo Screenshot

Installation

Using prebuilt binaries

If you don't want to build the application yourself or use some kind of package management system, you can get the latest binaries for the three major systems in the release overview:

https://github.com/Bios-Marcel/cordless/releases/latest

Building from source

In order to execute the following commands, you need to install go 1.13 or higher. You can find golang packages at https://golang.org/doc/install. On top of that, you need to have git installed. It can be fund at https://git-scm.com/downloads.

UPDATES HAVE TO BE INSTALLED MANUALLY

Open a command line and execute the following commands:

git clone https://github.com/Bios-Marcel/cordless.git
cd cordless
go build

This will create an executable file called cordless or cordless.exe depending on whether you are on Windows or not. Move that file anywhere that your terminal can find it. I recommend adding a bin folder to your user home and adding it to your systems PATH variable. Please search the internet, using your favourite search engine, for how to set an environment variable in XXX in order to update your PATH variable correctly.

For updateing you simply have to delete the folder you downloaded last time and repeat the instructions.

Note:

  • X11 users need xclip in order to copy and paste.
  • Wayland users need wl-clipboard in order to copy and paste.
  • Mac OS users need pngpaste in order to copy and paste images.

Login

YOUR PASSWORD IS NEVER SAVED LOCALLY.

Logging in works via the UI on first startup of the application.

If you are logging in with a bot token, you have to prepend Bot in front of the token.

If you need to find out how to retrieve your token, check the wiki.

Currently captcha-code login isn't supported. Thanks for your SHIT-API, Google

Quick overview - Navigation (switching between boxes / containers)

Shortcut Action
Alt + S Sets the focus on the servers (guilds) container
Alt + C Sets the focus on the channels container
Alt + T Sets the focus on the messages container
Alt + M Sets the focus on the messages input field
Alt + U Sets the focus on the users container
Alt + P Opens the direct messages container
Alt + . Toggles the internal console view

Further shortcuts / key-bindings can be found in the manual on the internal console with the command manual.

If any of the default commands don't work for you, open the keyboard shortcut changer via Ctrl + K.

Extending Cordless via the scripting interface

Check the wiki

Troubleshooting

If you happen to encounter a crash or a bug, please submit a bug report via the projects GitHub issue tracker. Bugs reported via Discord will probably be forgotten or overseen.

For general problems faced by cordless users, check out the wiki at: https://github.com/Bios-Marcel/cordless/wiki/Troubleshooting

If you need help or have questions that you don't want to create an issue for, just join our Discord server: https://discord.gg/fxFqszu

FAQ

In order to find answers to common questions, check out the FAQ in the wiki:

https://github.com/Bios-Marcel/cordless/wiki/FAQ

This project isn't for you, if

  • You like fancy GUI
  • You want to see images, videos and whatnot inside of the application itself
  • You need the voice/video calling features
  • You need to manage or moderate servers

Similar projects

Here is a list of similar projects:

Hit me up if you have a similar project, and I'll gladly add it to the list.

Credits

Big thanks to JetBrains for providing the cordless project with free licenses!

This project was mainly inspired by Southclaws Cordless, which he sadly didn't develop any further.

Comments
  • Token length isn't checked.

    Token length isn't checked.

    Is your source up to date

    • [x] Yes
    • [ ] No

    What happened

    If you choose token way of authorization and input wrong length token, it'll be stored in config.json, so that every time you try to login, it tries authorization with token saved in config. So that, you have to clear token field in config.

    What did you expect to happen

    Token lengths must be checked before storing them in config

    How do you reproduce this bug

    asciicast

    Error output

    How to fix

    I'll make pull request

    System information

    | Key | Value | | - | - | | OS | Mint 19.1 | | Architechture | amd64 |

  • Respect the users terminal color-set

    Respect the users terminal color-set

    What do you want

    The application should use the users color-set. This should be enabled by default, but be optional.

    Why

    Some users might have chosen their color-set out of a specific reason. One of those reasons might be their lack of ability to differentiate between low-contrast colors. Therefore the application should respect the users settings.

  • [Linux Mint] Dysfunctional Copy and Paste

    [Linux Mint] Dysfunctional Copy and Paste

    How have you installed cordless

    • [ ] Arch User Repository
    • [ ] Snap
    • [ ] scoop
    • [ ] brew
    • [ ] go get
    • [ ] git clone & go build .
    • [X] Releases

    What happened

    After installing xclip (also attempting with xsel), and attempting the copy bind, the said text was not copied to the system clipboard

    How do you reproduce this bug

    Use Linux Mint 20 Install cordless via releases attempt to copy a segment of text after highlighting attempt to paste in a multitude of different programs fails to copy

    Error output

    Not Appliciable

    Hints on what could've happened

    Possible mixup/conflict between system and xorg clipboard

    System information

    | Key | Value | | - | - | ???

    | OS | Linux Mint Version 20 | | Architecture | amd64 |

    Note

    This is likely vague and unhelpful (I really do not know what to tell you guys to help), but I am always open to giving new information

  • Refactor to support a future new chat view

    Refactor to support a future new chat view

    Hi Marcel,

    As per discussion on #212, I'm raising the PR for you to take a look at. Unfortunately, I can't raise this against a new branch on your repo :( so I know you won't merge this PR as it stands. If you create a new branch, I'll happily update my PR to point at it; or you can update it, I'm not fussed.

    The PR introduces some refactoring to introduce a new ui.ChatViewInterfaceinterface on which both ui.Window and ui.ChatView can rely. That should make it easier to introduce a new implementation of the chat view in the future. It makes a not-insignificant amount of small changes to the ui.Window type in order to decouple it from the internals of ui.ChatView.

    It also starts to decouple ui.Window from other UI components by introducing the ui.Focusable interface which describes UI components which can focus themselves. I've done this because ui.Window was coupling itself to the internals of other components, by directly referencing their internal implementations. The replacement method is implemented like a [visitor] (https://en.wikipedia.org/wiki/Visitor_pattern), and allows the UI components to decide how they should take focus for themselves.

    I hope this is helpful to you, but I also won't be offended if you choose to not to merge it in.

    Thanks, Andy

  • Can't Navigate Containers with Arrow Keys in st

    Can't Navigate Containers with Arrow Keys in st

    How have you installed cordless

    • [x] Arch User Repository
    • [ ] Snap
    • [ ] scoop
    • [ ] brew
    • [ ] go get

    What happened

    I can't seem to navigate containers using Alt+arrow from st

    How do you reproduce this bug

    I am using st as my terminal, which seems to relate to the issue. When I try on urxvt it works fine. I assume this has something to do with the way the keycodes are sent for compatibility purposes.

    This issue occurs both with an unmodified install of st as well as with my somewhat customized one.

    Error output

    No output

    System information

    | Key | Value | | - | - | | OS | Arch Linux | | Architechture | 5.5.2-arch1-1 |

  • Release for Linux/ARM

    Release for Linux/ARM

    Add a release for Linux/ARM devices.

    I want a Linux/ARM release.

    Why

    It would be easy to do, and very helpful so that I wouldn't have to download the source and all the deps just to compile it.

    Implementation hints

    When making releases, just run GOOS="linux" GOARCH="arm" go build

  • Setting background color to tcell.ColorDefault doesn't repaint the background

    Setting background color to tcell.ColorDefault doesn't repaint the background

    How have you installed cordless

    • [ x] Arch User Repository

    What Happened

    I used the tools/theme/theme.go method to set PrimitiveBackgroundColor to tcell.ColorDefault, which makes the background match my terminal's background color (I'm using termite), which is a semi-transparent blue. This actually works great and Cordless looks really nice:

    image

    The problem is that when you navigate around, text stays on the screen and doesn't get cleared out right away, so there's this smeary-garbled look:

    image

    If you resize the terminal window it repaints everything and it all looks good again. I don't know if this is a limitation of tcell or if Cordless just isn't repainting cells to the background color if it's set to default. Any ideas? I'm not that familiar with Go, but I'd be happy to help out regardless.

  • Cordless discards colours/negatives if TERM is vt (e.g. vt320)

    Cordless discards colours/negatives if TERM is vt (e.g. vt320)

    How have you installed cordless

    • [X] Arch User Repository
    • [ ] Snap
    • [ ] scoop
    • [ ] brew
    • [ ] go get

    What happened

    If TERM=vt320 for example, cordless returns bare text without any sort of colour or even attributes (despite the DEC VT series terminals supporting them), thus rendering the application unusable.

    How do you reproduce this bug

    env TERM=vt320 cordless

    Error output

    N/A

    How to fix

    If TERM=vt***, use attribute escape codes instead of colour ones. (I tried to fix this myself, but the problem lies deep within tview's TreeNode lacking attribute functions.)

    System information

    | Key | Value | | - | - | | OS | GNU/Linux 5.4.2-arch1-1 | | Architechture | x86_64 |

    image

    Workaround (for now)

    Use cordless in tmux. There won't be indications of e.g. new messages in channels because of colour attributes, however background colours will be converted to negatives. image

  • Bot Auth Error

    Bot Auth Error

    How have you installed cordless

    • [ ] Arch User Repository
    • [ ] Snap
    • [ ] scoop
    • [ ] brew
    • [ ] go get
    • [Yes] git clone & go build .

    What happened

    Tried to login by bot token Error showed up. I'm sure that token is valid

    Error output

    Error during last login attempt: websocket: close 4014: Disallowed intent(s).

    How do you reproduce this bug

    Just launching ./cordless, chosing Login via BotToken (Auth Token)

    System information

    | Key | Value | | - | - | | OS | Ubuntu | Architecture | linux/amd64 | Terminal | Putty? | Go version | go version go1.13.8 linux/amd64

  • Vim mode

    Vim mode

    What do you want

    Would it be possible to implement a vim mode? Or at least the possibilty to use hjkl instead of the arrow keys?

    Why

    This feature would be very convenient for all vim users. And it is really unconvenient to move to fingers to the arrow keys, instead of using keys in the homerow

  • Command completion

    Command completion

    This is a start for adding command completion in the CommandView. If this is something other people than me want and this implementation is satisfactory, i'll add completion to more commands

  • This project cannot die. Not like this.

    This project cannot die. Not like this.

    The whole point of free software is to resist these proprietary companies and be free. However, when a company like Discord is able to shut down a FOSS project contradicting them, it's extremely bad.

    Isn't the whole point of free software to take away control from the companies and put it in the hands of people? If Discord can just shut down the project like this, then that means that they took control. And that we as a community, have failed in our efforts.

    This cannot be the end of cordless. One of the best 3rd party Discord clients just getting shut down by Discord for violating ToS. The project already violated ToS, and ToS is enforced. What were people thinking? If you use a 3rd party client, you get banned.

    But we as a community need to take that risk. We're fighting for freedom in software, and we can't succumb like this. At least not this simply.

    This project was the first step of the death of Discord, because Discord is in itself a proprietary platform. However, we know that most of our friends and relatives will stick to Discord no matter what, because of Discord's "gamer" attitude. This project was kind of a way out of that, not quite but still close.

    A project like this can't end. At least not like this.

  • Can't use backspace

    Can't use backspace

    How have you installed cordless

    • [ ] git clone & go build .

    How do you reproduce this bug

    I can't delete characters while typing my message with the backspace key, but the Delete key still works

    System information

    | Key | Value | | - | - | | OS | Gentoo | | Architecture | amd64 | | Terminal | xterm vt340 | | Go version | 1.15.5 |

  • Add new feature: Vim mode

    Add new feature: Vim mode

    This feature adds a working vim mode, some bugs are already known and will try to fix them. For example, getting inside shortcuts menu inside vim mode will render focus unusable and require an app reset (quit with q and open again).

  • Feature request: implement the inbox

    Feature request: implement the inbox

    What do you want

    An inbox feature, like the one currently seen in Discord. Allows you to see your most recent messages or mentions and mark them as read or jump to their channel.

    Why

    I use the inbox constantly to catch up on multiple conversations, and implementation in Cordless would be nice.

    Implementation hints

    I don't know what keys are still available, but you could probably toggle the inbox on/off in one of the existing panes. The only other keys needed are mark channel as read, mark all as read, jump to channel, and toggle messages/mentions

  • custom binds/handlers for links and other content

    custom binds/handlers for links and other content

    What do you want

    It would be very neat if we had some w3m-esque configuration for handling links via binds. For instance, passing a youtube link to mpv or youtube-dl.

    You could navigate to a link and hit a key that you had configured a bind to, and pass that link to youtube-dl, mpv or some other script.

    Why

    It hugely extend the flexibility of cordless, it'd be a gift that just kept on giving.

    Implementation hints

    I imagine some bash and pipes could do the job?

yq lets you read YAML files easily on the terminal. You can find key/values easily
yq lets you read YAML files easily on the terminal. You can find key/values easily

yq yq lets you read YAML files easily on the terminal. You can find key/values easily. Motivation Reading yaml configurations for k8s file becomes ard

Nov 2, 2021
Stonks is a terminal based stock visualizer and tracker that displays realtime stocks in graph format in a terminal.
Stonks is a terminal based stock visualizer and tracker that displays realtime stocks in graph format in a terminal.

Stonks is a terminal based stock visualizer and tracker. Installation Requirements: golang >= 1.13 Manual Clone the repo Run make && make install Pack

Dec 16, 2022
Terminal client for SimpleNote

GoNote - Terminal client for SimpleNote GoNote is a simple utility for managing notes in your SimpleNote account. It allows basic operations like crea

Nov 22, 2022
YouTube client on your terminal

MeowTube YouTube client on your terminal Table of Contents About Getting Started Usage Contributing About MeowTube is a CLI (Command Line Interface) t

Jul 29, 2022
lazyhub - Terminal UI Client for GitHub using gocui.
lazyhub - Terminal UI Client for GitHub using gocui.

lazyhub - Terminal UI Client for GitHub using gocui.

Dec 14, 2022
📱🥴 TikTok terminal client for browsing & downloading videos
📱🥴 TikTok terminal client for browsing & downloading videos

tiktik ?? ?? - TikTok Terminal Client Name inspiration - this yt vid Huge Thanks to Egor who wrote the parsing part Installation ?? go get -u github.c

Dec 3, 2022
Visp is a Vi-like Spotify client for terminal users.
Visp is a Vi-like Spotify client for terminal users.

Visp Visp is an interactive console client for Spotify, written in Go. Its interface is similar to Vim, and aims to be fast, configurable, and practic

Dec 31, 2022
Slack client for your terminal
Slack client for your terminal

slack-term A Slack client for your terminal. Installation Binary installation Download a compatible binary for your system. For convenience, place sla

Dec 30, 2022
Terminal client for MangaDex 📖
Terminal client for MangaDex 📖

mangadesk - Terminal client for MangaDex ?? Download manga directly from your terminal to read! This client retrieves information straight from MangaD

Dec 27, 2022
TScli - a very simple terminal-based client for TSWeb online judge

TScli TScli - a very simple terminal-based client for TSWeb online judge. It supports submitting problems and receiving feedback on them. Installation

Oct 24, 2021
Gocheat - Golang terminal client for cht.sh that uses charm.sh's bubbletea project

Go Cheat.sh install gotext go get -u golang.org/x/text/cmd/gotext go generate

Jun 3, 2022
`tmax` is a powerful tool to help you get terminal cmd directly.
`tmax`  is a powerful tool to help you get terminal cmd directly.

The positioning of tmax is a command line tool with a little artificial intelligence. If you frequently deal with the terminal daily, tmax will greatly improve your work efficiency.

Oct 15, 2022
A CLI application that allows you to run a complete ToDo app from your terminal application

todo-cli This is a CLI application that allows you to run a complete ToDo app from your terminal application. As a user you can: Create a list of todo

Oct 11, 2021
ls Xtended : A command line utility which lets you navigate through terminal like a pro 😎.
ls Xtended : A command line utility which lets you navigate through terminal like a pro 😎.

Navigate through terminal like a pro ?? ?? Demo • ⚗️ Installation • ?? Contribution • ❗ Known Issues ❓ Why? It's a pain to cd and ls multiple times to

Dec 14, 2022
check if new episodes of anime has been released from you're terminal
check if new episodes of anime has been released from you're terminal

checkanime Check if new episodes of you're favourite anime has been released from you're terminal Installation Make sure $GOPATH/bin is added to PATH

Jan 20, 2022
The sntr command-line program gives you convenient access to Sentry directly from your terminal.

sntr: all of Sentry at your fingertips The sntr command-line program gives you convenient access to Sentry directly from your terminal. Disclaimer: th

Jan 31, 2022
A very simple note-taking CLI you can use from the terminal that uses a SQLite DB to persist, and query, notes.

Note Logger Summary A very simple note-taking CLI you can use from the terminal that uses a SQLite DB to persist, and query, notes. Building/Installin

Apr 14, 2022
A simple way of sending messages from the CLI output to your Discord channel with webhook.
A simple way of sending messages from the CLI output to your Discord channel with webhook.

discat A simple way of sending messages from the CLI output to your Discord channel with webhook. Actually, this is a fork version of slackcat that I

Nov 15, 2022
Discord screenshare, now with audio!

audio-share-discord-linux Discord screenshare, now with audio! Build Instructions go build . chmod +x audio-share-discord-linux ./audio-share-discord-

Nov 9, 2022