README.md 4.9 KB

Discordo Plus

A fork of discordo — a lightweight Discord terminal client — with image viewing, save support, and security hardening.

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
  • ESC focus navigation: Pressing Escape in the message input switches focus to the messages list; pressing Escape again switches focus to the guilds tree
  • Security hardening: Path traversal prevention on attachment filenames, HTTPS-only downloads with size limits, restrictive file permissions (0700/0600), image viewer validation, atomic state file writes, environment token warning

Building on Arch Linux

Requirements

sudo pacman -S go mpv xdotool wl-clipboard
  • go — Go compiler (1.26+)
  • 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

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

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 for all options.

Image-related settings

# 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.

[!WARNING] Environment variables are visible to all processes running as the same user (via /proc/PID/environ on Linux). Prefer the keyring for interactive use. Only use DISCORDO_TOKEN in controlled environments (e.g., systemd units with protected EnvironmentFile=).

DISCORDO_TOKEN="your-token-here" discordo-plus

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.

[!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 file for the full license text.