Тайлбар байхгүй

claude 330861c33f Merge worktree-agent-a0fed213 into master 1 сар өмнө
.github 2a99ad6241 fix: implement low-risk security, quality, and infra fixes from audit 1 сар өмнө
cmd 2a99ad6241 fix: implement low-risk security, quality, and infra fixes from audit 1 сар өмнө
internal 330861c33f Merge worktree-agent-a0fed213 into master 1 сар өмнө
research 773cae60bf docs: mark resolved audit findings in research files and update CLAUDE.md 1 сар өмнө
.gitignore e976dc6537 refactor: unexport local symbols 11 сар өмнө
CLAUDE.md 19033eaa62 fix(ui/chat): emoji picker browse-by-default, favorites, picker i-key fix 1 сар өмнө
LICENSE 51fa556cd4 SWITCH TO A SUPERIOR LICENSE 1 жил өмнө
PKGBUILD 114e602a91 chore: disable debug package in PKGBUILD 1 сар өмнө
README.md 60f8ae16c8 feat(ui/chat): add emoji reactions, reply collapse, timestamp toggle, focus fix, wrap indent 1 сар өмнө
go.mod 3e20545780 chore(deps): remove gosx-notifier, update keyring and compress 1 сар өмнө
go.sum 3e20545780 chore(deps): remove gosx-notifier, update keyring and compress 1 сар өмнө
images.plan 9ab7409dde feat(ui/chat): add image viewing with configurable viewer and save keybind 1 сар өмнө
main.go c8790a63d1 refactor(cmd): replace cobra with stdlib flag 4 сар өмнө

README.md

Discordo Plus

A fork of discordo — a lightweight Discord terminal client — with enhanced navigation, media support, and security hardening.

Changes from upstream

Media & Attachments

  • Image viewer: Opens image attachments (jpeg, png, webp, gif) in a configurable viewer (mpv by default) with X11 geometry auto-detection
  • Save image: S saves the selected message's image attachment to a configurable directory
  • Link display compression: URLs are shown as human-friendly labels — Discord CDN links show the filename, known sites show short labels (e.g., "Tenor GIF", "YouTube", "GitHub - owner/repo"), others show host + truncated path. Garbled CDN filenames (URL-encoded URLs, UUIDs) are cleaned up. Redundant link preview embeds are suppressed. Full URLs remain clickable via OSC 8 hyperlinks.

Navigation & UI

  • Arrow key navigation: Up/down arrows move within a panel (same as k/j), left/right arrows cycle between guilds and messages panels. All four are separate configurable keybinds.
  • ESC focus cycling: ESC cycles focus between input → messages → guilds → input (respects hidden guilds panel)
  • Auto-select: Entering a channel always selects the latest message and focuses the messages list
  • Search: / opens fuzzy search over current channel messages
  • Threads: Thread indicator on messages, T navigates into thread
  • Reactions: Displayed below messages, bold for own reactions, real-time gateway updates. E opens emoji picker to add reactions (common unicode + guild custom emoji).
  • Reply collapse: Z toggles collapsing reply quotes to a compact > indicator
  • Timestamp toggle: t toggles timestamps on/off at runtime
  • Wrap indentation: Continuation lines of long messages get a 2-space indent for visual clarity
  • User info: w shows author info popup (username, join date, roles)
  • Command mode: : opens vim-style command input (:q, :quit, :logout)
  • Help: ? toggles full help overlay, E edits config from help
  • Picker browse mode: ESC in overlay pickers enters browse mode (j/k/g/G navigate, i returns to input)

State & Persistence

  • Guild/channel state: Expanded/collapsed state for guilds, categories, and forums persists between sessions
  • Focus on channel select: Selecting a channel always focuses messages list and selects the latest message

Security

  • Path traversal prevention, HTTPS-only downloads with 100MB size limit, restrictive file permissions (0700/0600), image viewer validation via exec.LookPath, atomic state writes, direct exec.Command (no shell), 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

# Option 1: Install via pacman (Arch Linux)
makepkg -si

# Option 2: Manual install
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.