Coder Social home page Coder Social logo

discordo's Introduction

Discordo · ci Go Report Card license

Discordo is a lightweight, secure, and feature-rich Discord terminal client. Heavily work-in-progress, expect breaking changes.

Preview

  • Lightweight
  • Secure
  • Configurable
  • Cross-platform
  • Minimalistic
  • Feature-rich

Installation

Prebuilt binaries

You can download and install a prebuilt binary here for Windows, macOS, or Linux.

Package managers

  • Arch Linux: yay -S discordo-git
  • FreeBSD: pkg install discordo or via the ports system make -C /usr/ports/net-im/discordo install clean.
  • NixOS: nix-shell -p discordo

Building from source

git clone https://github.com/ayn2op/discordo
cd discordo
go build .

Linux clipboard support

  • xclip or xsel for X11 (apt install xclip)
  • wl-clipboard for Wayland (apt install wl-clipboard)

Usage

  1. Run the discordo executable with no arguments.

If you are logging in using an authentication token, provide the token command-line flag to the executable (eg: --token "OTI2MDU5NTQxNDE2Nzc5ODA2.Yc2KKA.2iZ-5JxgxG-9Ub8GHzBSn-NJjNg"). The token is stored securely in the default OS-specific keyring.

  1. Enter your email and password and click on the "Login" button to continue.

Configuration

The configuration file allows you to configure and customize the behavior, keybindings, and theme of the application.

  • Unix: $XDG_CONFIG_HOME/discordo/config.toml or $HOME/.config/discordo/config.toml
  • Darwin: $HOME/Library/Application Support/discordo/config.toml
  • Windows: %AppData%/discordo/config.toml
mouse = true

timestamps = false
timestamps_before_author = false
timestamps_format = "3:04PM"

messages_limit = 50
editor = "default"

[keys]
focus_guilds_tree = "Ctrl+G"
focus_messages_text = "Ctrl+T"
focus_message_input = "Ctrl+P"
toggle_guild_tree = "Ctrl+B"
select_previous = "Rune[k]"
select_next = "Rune[j]"
select_first = "Rune[g]"
select_last = "Rune[G]"

[keys.guilds_tree]
select_current = "Enter"

[keys.messages_text]
select_reply = "Rune[s]"
reply = "Rune[r]"
reply_mention = "Rune[R]"
delete = "Rune[d]"
yank = "Rune[y]"
open = "Rune[o]"

[keys.message_input]
send = "Enter"
editor = "Ctrl+E"
cancel = "Esc"

[theme]
border = true
border_color = "default"
border_padding = [0, 0, 1, 1]
title_color = "default"
background_color = "default"

[theme.guilds_tree]
auto_expand_folders = true
graphics = true

[theme.messages_text]
author_color = "aqua"
reply_indicator = ""

Disclaimer

Automated user accounts or "self-bots" are against Discord's Terms of Service. I am not responsible for any loss caused by using "self-bots" or Discordo.

discordo's People

Contributors

apprehensions avatar ayn2op avatar byomess avatar canisli avatar carterprince avatar cyberme0w avatar jumps-are-op avatar kodicraft avatar lco4edb2 avatar lcook avatar matheusfillipe avatar matthieu-laurent39 avatar mrpink32 avatar ohkthx avatar proullon avatar shadiestgoat avatar standingpadanimations avatar stevengirving avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

discordo's Issues

Follow XDG specification/convention for configuration file

Its not recommended to create a config file in ~/.config folder, most if not all applications make their own folder, which means the path of the config file would be ~/.config/discordo/discordo.toml you can even change the filename to config.toml once you put it inside your own folder

Previously sent messages display in random order after selecting a channel

After selecting a channel, messages that were previously sent display in a random order
discordo2
The problem is fixed by removing the go keyword in line 102 of ui.go:

func onChannelsTreeSelected(n *tview.TreeNode) {
...
	for i := len(ms) - 1; i >= 0; i-- {
		selectedChannel.Messages = append(selectedChannel.Messages, ms[i])
		go renderMessage(ms[i])
		//^ Right here
	}
...
}

shortcut keys

after opening a channel is there a keyboard shortcut to get back to the parent list without having to use the mouse?

Feature request: Spoiler tags

I think it would just be a pretty useful feature, by default, spoilered (surrounded by unescaped ||) contents of a message could be written as (U+2588) and pressing enter while hovering over a message would reveal its contents. Additionally, an option to automatically display spoilered contents like in the official discord client would be neat.

I'm confused in how to add transperency.

I'm using kitty terminal. and my terminal already has transparency.
I have submitted an issue about it here '#133'
But I'm not sure how to implement the solution. I setted up my TOML file to look like this
[theme]
border = "white"
title = "white"
background = ""

I was following instructions from this comment "@tildethine, you can now set the theme.background field to an empty string in the configuration file to have a transparent background." submitted by @ayntgl

But after doing that my discordo is still not transparent :/ I've looked into theme.go and this is what I see.
package config

type ThemeConfig struct {
Background string toml:"background"
Border string toml:"border"
Title string toml:"title"
}

func newThemeConfig() ThemeConfig {
return ThemeConfig{
Background: "",
Border: "white",
Title: "white",
}
}

Looks like it read the TOML file but it's still not transparent :/

Feature request: Quick file attachment downloading/opening

This might already be a thing but it's unclear to me how to access it, it does not seem to appear in any of the keybinds or in the message action menu.

I think it would be useful if simply pressing enter or some key like d while hovering over a message with an attachment to download it to the default download location on the system.

In addition, I think a keybind like o to automatically open the file in the default system handler would be pretty neat.

Authentication

When I try to login it literally does nothing no feedback at all. Just have the email password and login button

Feature request: multiline formatting support

Current the official Discord client supports multiline formatting, but Discordo only formats if the formatting is on a single like.
For example:
~~Multiline
Strikethough~~
Would display as this
Multiline
Strikethrough

In the official client but doesn’t format in Discordo.

feat: implement keybinding for opening links in a message

This is already a feature in some terminal emulators with the mouse, but I think it would help to be able to effectively just open a link from a message in the default user browser. If there are multiple links in a message, the user could either be prompted to select one of the links or just open all of them quickly. A link could be searched for with a very basic regex, just how the default client does it, like /https?:\/\/.+/g.

The official client does support other handlers like steam://, but those seem to have a hard list and would be relatively easy to add to the check if need be

MFA not working

I'm running the current master (d5c35ec at the time of writing this), built through AUR.
When I try to log in I first get the expected Email and Password fields. Pressing the Login button makes the UI unresponsive for a fraction of a second. I know this because pressing it many times consecutively queues up presses and so increases the unresponsive duration.
From reading the code I would expect the login window to be re-rendered with an MFA token field, but that never happens. I don't get a panic either, which leads me to believe that the login attempt doesn't produce an error.
I don't see any hint of a --debug flag or something similar, so I'm a bit at a loss for how to investigate further, short of getting started with golang and running discordo in the debugger.

Prebuilt Binary for Linux error

Hello there

I needed some help with running the prebuilt binary on Pop OS.
I extracted the downloaded zip and gave the file inside permission to run as an executable. But running it does nothing.

Kindly help me with this issue. Thanks!

Feature request: Login via token

hi, im opening this because peepo5 didnt do it yet and i think this would be pretty cool to have considering you need to complete a captcha to log into discord normally and that wont work on a tty.

basically just a flag like -t but it stores the token in your keyring so you dont have to type your token in each time

thanks!

Unread channels not showing

imageimage
As you can see from the from the above screenshots, discordo doesn't appear to show the unread status of channels or servers. As this appears to work in the screenshot in the readme, I assume this should be considered a bug report, and not a feature request.

Feature request: Upload image from clipboard

The title is self-explanatory, so nothing much to write here.
It would be great to be able to send images copied onto the clipboard as well as uploading local files, with discordo.

Scroll to the end of the messages TextView on channel select

The current behavior does not scroll the messages TextView to the end. Instead, it scrolls it to the previous scroll state of the formerly-selected channel, if the user had selected any channel in a guild earlier. This can be easily fixed by calling (*TextView).ScrollToEnd() after the messages has been written to the TextView.

Crashes when pressing 'o' while focused on a message

Whenever I press the 'o' key while I'm focused on a message, the program exits with the following output:

panic: runtime error: index out of range [-1] [recovered]
        panic: runtime error: index out of range [-1]

goroutine 1 [running]:
github.com/rivo/tview.(*Application).Run.func1()
        github.com/rivo/[email protected]/application.go:243 +0x4d
panic({0x561b3e031740, 0xc0009a8438})
        runtime/panic.go:1038 +0x215
github.com/ayntgl/discordo/ui.(*MessagesTextView).onInputCapture(0xc000021480, 0xc000109c80)
        github.com/ayntgl/discordo/ui/messages.go:100 +0xea5
github.com/rivo/tview.(*Box).WrapInputHandler.func1(0xc000021480, 0xc000109cd8)
        github.com/rivo/[email protected]/box.go:164 +0x3a
github.com/rivo/tview.(*Flex).InputHandler.func1(0xc000109d18, 0x561b3dd5cf3f)
        github.com/rivo/[email protected]/flex.go:251 +0xd9
github.com/rivo/tview.(*Box).WrapInputHandler.func1(0xc000633ad0, 0x10)
        github.com/rivo/[email protected]/box.go:167 +0x53
github.com/rivo/tview.(*Flex).InputHandler.func1(0x561b3da729a7, 0x10)
        github.com/rivo/[email protected]/flex.go:251 +0xd9
github.com/rivo/tview.(*Box).WrapInputHandler.func1(0xc00007b950, 0xc000109e20)
        github.com/rivo/[email protected]/box.go:167 +0x53
github.com/rivo/tview.(*Application).Run(0xc0001b4460)
        github.com/rivo/[email protected]/application.go:335 +0x886
main.main()
        github.com/ayntgl/discordo/main.go:103 +0x2a7

I'm using kitty in Debian 11, if that helps.

Feature request: Dunst integration

It would be good to provide notification syscalls like original discord does.
I can make PR for that. But idk if u want to approve it, because of another dependency.

I would like to add the most used notification library "dunst".

Hex color support

As mentioned in #56 the config file should be able to accept hex color codes

Feature Request: User ability to hide channels

It would be nice if the user could hide channels. It could be something as simple as using the message options keybindings on a channel then selecting hide.

To unhide select the guild and use the message options keybinding to "unhide all channels"

It would really clean up the UI.

Feature Request: message actions

It would be nice if there was a way to edit and delete messages. Also, it would be really cool if we selected an image and hit enter, the default image viewer would open, and if you selected a link, the default browser would open.

Feature Request: Image preview and open image/link

I apologize if this is already implemented, I looked around but wasn't able to find anything.

Is there a way to view image previews, or open an image/link?

Other than that this is fantastic and light, it works very well on a pinephone.

Is there a help menu for keybindings?

Hi again ayntgl!

Again I really appreciate your work - I am learning go atm so maybe I'll be able to help out in the future.

I want to ask if there will be a legend for showing keybinds in the works. Currently I am not understanding what
keybindigs can be used. Maybe I just haven't looked around thourougly enough in the project.

Cheers,

Feature request: emoji suggestions

I was like the idea to having writing the emote name and call it a day rather writing full name+emote number.
Since I dislike to memorized all number and using UTF is nothing rather complicated, I think just by writing it would showing several emote you can pick and my pressing "tabs" it would autocomplete selected emote name and sending it as full rather just name only...

It also can be setup to showing full name+emote number or just by emote name. If attachment is support, then it would showing cached small emote is supported terminal such kitty...

Feature request: Support for sending attachments

Hello! I would like to request a feature for supporting images, I have seen the issue about feature request for images. I have some ideas about the image feature :

  • For sending, type send *.png/*.jpg.
  • For seeing the image, just press Ctrl-O on the selected message. The message should be like this "Image : *.png | OPEN"

Captcha error

So the Discordo is had some issue when try to open. since it can be from discord itself where forcing to using hCaptcha to prevent spam bot exist. this is making to login via terminal is difficult for people who are trying to using Discordo.

For more info, I'll try to Screenshot later.

Nothing happens after pressing "LOGIN" button.

Title is what it says. Even if I put in a knowingly fake email and password, nothing happens when I try and press the login button. It hangs for a split second, then does nothing. No errors that I can visually see however.
Would be helpful if I knew the location of some sort of log file or something of the sort, but I can't find any, apologies for that.

OS: Arch 5.18.12-arch1-1 (Archcraft)
Terminal: Alacritty 0.10.1-2
Discordo: r119.797d557-1 (Version currently on the AUR)

Crashes on wrongpass

Tho it works fine when the pass is fine, if you get the pass wrong the app will crash.

No way to access dm list

The only available list is that of guilds as far as i can see

Either it is just undocumented ( #56 )
Or it is not yet implemented, in which case a roadmap would be interesting to see

p.s. love the project

Feature request: Add support for guild folders

Reasoning

Navigating guilds right now if you have a lot of them can be annoying it would be really nice to be able to have a feature to support guild folders like the normal discord app.

Not sure if this is possible but it would be a really nice feature to have.

Doesn't work with zsh [panic: websocket: close 4004: Authentication failed.]

panic: websocket: close 4004: Authentication failed.

goroutine 1 [running]:
main.main.func1(0xc0000aa1c0?)
        /home/ryuo/.cache/paru/clone/discordo-git/src/discordo/main.go:56 +0x334
github.com/urfave/cli/v2.(*App).RunContext(0xc00008a680, {0x9fb228?, 0xc000024200}, {0xc000020180, 0x3, 0x3})
        /home/ryuo/go/pkg/mod/github.com/urfave/cli/[email protected]/app.go:329 +0x9d3
github.com/urfave/cli/v2.(*App).Run(...)
        /home/ryuo/go/pkg/mod/github.com/urfave/cli/[email protected]/app.go:226
main.main()
        /home/ryuo/.cache/paru/clone/discordo-git/src/discordo/main.go:143 +0x2f0

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.