# Discordo Plus A fork of [discordo](https://github.com/ayn2op/discordo) — a lightweight Discord terminal client — with image viewing and save support. ## Changes from upstream - **Image viewer**: Opens image attachments (jpeg, png, webp, gif) in a configurable viewer (`mpv` by default) instead of the browser. On X11, auto-detects terminal window geometry so the viewer opens at the same position and size - **Save image**: `S` keybind saves the selected message's image attachment to a configurable directory - **Attachment URL fix**: Links no longer break due to bad newline handling - **Tooltip**: `o open` appears in the bottom help bar when a message has attachments or URLs - **Guild state persistence**: Remembers which guilds are expanded/collapsed between sessions (saved to `~/.cache/discordo/state.json`) - **Focus on channel select**: When AutoFocus is enabled, selecting a channel focuses the messages list instead of the message input ## Building on Arch Linux ### Requirements ```bash sudo pacman -S go mpv xdotool wl-clipboard ``` - `go` — Go compiler (1.22+) - `mpv` — media player used as image viewer (supports jpeg/png/webp/gif with animation) - `xdotool` — used to detect terminal window geometry on X11 (optional, image viewer still works without it) - `wl-clipboard` — clipboard support on Wayland (skip if using X11) ### Build and install ```bash git clone https://gogs.altsol.dev/claude/discordo-plus.git cd discordo-plus go build -o discordo-plus . sudo install -Dm755 discordo-plus /usr/local/bin/discordo-plus ``` ### Run ```bash discordo-plus ``` On first launch, enter your Discord token or scan the QR code to log in. ## Configuration Config file location: `~/.config/discordo/config.toml` The default config is used if no file exists. See [the default config](./internal/config/config.toml) for all options. ### Image-related settings ```toml # External image viewer (must accept a file path as first argument) # When set to "mpv", auto-adds --geometry, --force-window, --loop-file flags # Set to "default" to use xdg-open image_viewer = "mpv" # Directory for saved images (supports ~/, empty = current directory) image_save_dir = "~/Pictures/discordo" [keybinds.messages_list] # Open attachments/links from selected message open = "o" # Save image attachment from selected message save_image = "S" ``` ### Notes - On X11, `xdotool` is used to detect terminal geometry so `mpv` opens at the same position and size as your terminal. Without `xdotool`, `mpv` opens at its default position. - On Wayland, `xdotool` doesn't work — use compositor window rules instead (e.g., sway: `for_window [app_id="mpv"] floating enable, move position center`) - Alternative viewers: `imv`, `nsxiv`, `feh` — set via `image_viewer` in config. Geometry detection only applies to `mpv`. ## Usage ### Token (UI, recommended) 1. Run the `discordo` executable with no arguments. 2. Enter your token and click on the "Login" button to save it. ### Token (environment variable) Set the value of the `DISCORDO_TOKEN` environment variable to the authentication token to log in with. ```sh DISCORDO_TOKEN="OTI2MDU5NTQxNDE2Nzc5ODA2.Yc2KKA.2iZ-5JxgxG-9Ub8GHzBSn-NJjNg" discordo ``` ### QR (UI) 1. Run the `discordo` executable with no arguments. 2. Click on the "Login with QR" button. 3. Follow the instructions in the QR Login screen. ## 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` Discordo uses the default configuration if a configuration file is not found in the aforementioned path; however, the default configuration file is not written to the path. [The default configuration can be found here](./internal/config/config.toml). > [!IMPORTANT] > 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. ## License Copyright (C) 2025-present ayn2op This project is licensed under the GNU General Public License v3.0 (GPL-3.0). See the [LICENSE](./LICENSE) file for the full license text.