Skip to content

[Feature]: discord-app read-only channel navigation and forum/thread support #1950

@ByteYue

Description

@ByteYue

Feature Description

The discord-app adapter can currently read messages from the active Discord channel, and it can list servers/channels. It would be useful to add read-only channel navigation and channel-targeted reads so automation can safely collect messages from a small set of selected Discord channels without sending messages.

Related improvements that would make this robust:

  • Include stable channel metadata in discord-app channels output, especially guild_id, channel_id, url, and channel type.
  • Add a read-only navigation command for opening a channel by id/name/url.
  • Allow discord-app read to optionally target a channel instead of only the currently active channel.
  • Add basic support for Forum/thread-style channels, where the channel view is a thread list rather than a normal message stream.

Use Case

As an OpenCLI user, I want to periodically read a few Discord channels that my logged-in Discord Desktop session can already access, so that I can build a local read-only digest/notification workflow.

Today this is possible for one active channel with:

opencli discord-app read --count 20 -f json

But reading multiple selected channels currently requires external UI automation to click each channel first. That is fragile because it depends on accessibility labels, visible sidebar state, scroll position, language, and Discord UI changes.

Forum channels are also different from normal text channels: the channel page shows a list of posts/threads, and read may return no normal messages until a specific thread is opened.

Proposed Solution

One possible CLI shape:

# List channels with stable metadata
opencli discord-app channels -f json
# => [{ "channel": "general", "type": "Text", "guild_id": "...", "channel_id": "...", "url": "https://discord.com/channels/.../..." }]

# Read-only channel navigation
opencli discord-app goto --guild <guild_id-or-name> --channel <channel_id-or-name>
opencli discord-app goto --url https://discord.com/channels/<guild_id>/<channel_id>

# Channel-targeted read that navigates internally, waits for the channel to load, then reads
opencli discord-app read --guild <guild_id-or-name> --channel <channel_id-or-name> --count 20 -f json
opencli discord-app read --url https://discord.com/channels/<guild_id>/<channel_id> --count 20 -f json

# Forum / thread support
opencli discord-app threads --channel <forum_channel_id> -f json
opencli discord-app thread-read --thread <thread_id> --count 20 -f json

Implementation ideas:

  • Reuse Discord web routes (/channels/{guild_id}/{channel_id} and thread URLs) instead of relying on visual clicking when ids/URLs are available.
  • After navigation, wait until the URL, channel header, or message list reflects the target channel before reading.
  • Keep the adapter read-only: no message sending, deleting, reacting, or marking all as read.
  • If opening a channel inherently changes Discord's unread state, document that behavior and keep the command explicit.
  • For Forum channels, expose post/thread cards as structured records first, then allow opening and reading a selected thread.
  • Preserve the current active-channel behavior as the default, so existing usage remains compatible.

Alternatives Considered

  • External UI automation that clicks channels by visible labels. This works, but is brittle across sidebar scroll position, localization, accessibility tree changes, and Discord UI updates.
  • Discord bot API. This is more stable where available, but many workspaces do not allow adding bots, while the Desktop session can already read the relevant channels.
  • Manual channel switching before each read. This is fine for ad hoc use, but not reliable for low-frequency scheduled digests.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions