Skip to main content

pp-discord

Printing Press CLI for Discord. Preview of the Discord v10 HTTP API specification. See https://discord.com/developers/docs for more details.

Datos de origen

Repositorio
mvanhorn/printing-press-library
Última actividad en el origen
13 de agosto de 2026 a las 04:55
Idioma detectado de SKILL.md
inglés
Estrellas
1918
Forks
572

Opciones de instalación

De forma predeterminada está seleccionado el prompt que primero revisa el origen. Puedes cambiar a un comando directo o descargar una copia local.

Revisa los archivos de origen

Lee SKILL.md y los archivos complementarios que muestra SkillsMP antes de decidir si quieres instalarlo.

Mostrando SKILL.md

SKILL.md
Instrucciones de origen · Vista previa de solo lectura
name
pp-discord
description
Printing Press CLI for Discord. Preview of the Discord v10 HTTP API specification. See https://discord.com/developers/docs for more details.
author
Hunter Veltri
license
Apache-2.0
argument-hint
<command> [args] | install cli|mcp
allowed-tools
Read Bash
metadata
{"openclaw":{"requires":{"bins":"[Truncated]"},"install":["[Truncated]"]}}
<!-- GENERATED FILE — DO NOT EDIT. This file is a verbatim mirror of library/productivity/discord/SKILL.md, regenerated post-merge by tools/generate-skills/. Hand-edits here are silently overwritten on the next regen. Edit the library/ source instead. See the repository agent guide, section "Generated artifacts: registry.json, cli-skills/". --> # Discord — Printing Press CLI ## Prerequisites: Install the CLI This skill drives the `discord-pp-cli` binary. **You must verify the CLI is installed before invoking any command from this skill.** If it is missing, install it first: 1. Install via the Printing Press installer. It defaults binaries to `$HOME/.local/bin` on macOS/Linux and `%LOCALAPPDATA%\Programs\PrintingPress\bin` on Windows: ```bash npx -y @mvanhorn/printing-press-library install discord --cli-only ``` 2. Verify: `discord-pp-cli --version` 3. Ensure the reported install directory is on `$PATH` for the agent/runtime that will invoke this skill. If the `npx` install fails (no Node, offline, etc.), fall back to a direct Go install (requires Go 1.26.5 or newer). This installs into `$GOPATH/bin` (default `$HOME/go/bin`), so add that directory to `$PATH` instead: ```bash go install github.com/mvanhorn/printing-press-library/library/productivity/discord/cmd/discord-pp-cli@latest ``` If `--version` reports "command not found" after install, the runtime cannot see the binary directory on `$PATH`. Do not proceed with skill commands until verification succeeds. Preview of the Discord v10 HTTP API specification. See https://discord.com/developers/docs for more details. ## Command Reference **applications** — Manage applications - `discord-pp-cli applications get` — Get - `discord-pp-cli applications get-my` — Get my - `discord-pp-cli applications update` — Update - `discord-pp-cli applications update-my` — Update my **channels** — Manage channels - `discord-pp-cli channels delete` — Delete - `discord-pp-cli channels get` — Get - `discord-pp-cli channels update` — Update **gateway** — Manage gateway - `discord-pp-cli gateway get` — Get - `discord-pp-cli gateway get-bot` — Get bot **guilds** — Manage guilds - `discord-pp-cli guilds get` — Get - `discord-pp-cli guilds get-template` — Get template - `discord-pp-cli guilds update` — Update **interactions** — Manage interactions **invites** — Manage invites - `discord-pp-cli invites resolve` — Resolve - `discord-pp-cli invites revoke` — Revoke **lobbies** — Manage lobbies - `discord-pp-cli lobbies create-lobby` — Create lobby - `discord-pp-cli lobbies create-or-join-lobby` — Create or join lobby - `discord-pp-cli lobbies delete-lobby` — Deletes the specified lobby if it exists. It is safe to call even if the lobby is already deleted. - `discord-pp-cli lobbies edit-lobby` — Edit lobby - `discord-pp-cli lobbies get-lobby` — Get lobby **oauth2** — Manage oauth2 - `discord-pp-cli oauth2 get-my-application` — Get my application - `discord-pp-cli oauth2 get-my-authorization` — Get my authorization - `discord-pp-cli oauth2 get-openid-connect-userinfo` — Get openid connect userinfo - `discord-pp-cli oauth2 get-public-keys` — Get public keys **partner-sdk** — Manage partner sdk - `discord-pp-cli partner-sdk bot-token` — Bot token - `discord-pp-cli partner-sdk bot-unmerge-provisional-account` — Bot unmerge provisional account - `discord-pp-cli partner-sdk token` — Token - `discord-pp-cli partner-sdk unmerge-provisional-account` — Unmerge provisional account - `discord-pp-cli partner-sdk update-user-message-external-moderation-metadata` — Update the external moderation metadata for a user message (DM). **skus** — Manage skus **soundboard-default-sounds** — Manage soundboard default sounds - `discord-pp-cli soundboard-default-sounds` — Get **stage-instances** — Manage stage instances - `discord-pp-cli stage-instances create` — Create - `discord-pp-cli stage-instances delete` — Delete - `discord-pp-cli stage-instances get` — Get - `discord-pp-cli stage-instances update` — Update **sticker-packs** — Manage sticker packs - `discord-pp-cli sticker-packs get` — Get - `discord-pp-cli sticker-packs list` — List **stickers** — Manage stickers - `discord-pp-cli stickers <sticker_id>` — Get **users** — Manage users - `discord-pp-cli users create-dm` — Create dm - `discord-pp-cli users delete-application-role-connection` — Delete application role connection - `discord-pp-cli users get` — Get - `discord-pp-cli users get-application-role-connection` — Get application role connection - `discord-pp-cli users get-current-application-entitlements` — Get current application entitlements - `discord-pp-cli users get-my` — Get my - `discord-pp-cli users get-my-guild-member` — Get my guild member - `discord-pp-cli users leave-guild` — Leave guild - `discord-pp-cli users list-my-connections` — List my connections - `discord-pp-cli users list-my-guilds` — List my guilds - `discord-pp-cli users update-application-role-connection` — Update application role connection - `discord-pp-cli users update-my` — Update my **voice** — Manage voice - `discord-pp-cli voice` — List regions **webhooks** — Manage webhooks - `discord-pp-cli webhooks delete` — Delete - `discord-pp-cli webhooks delete-by-token` — Delete by token - `discord-pp-cli webhooks execute` — Execute - `discord-pp-cli webhooks get` — Get - `discord-pp-cli webhooks get-by-token` — Get by token - `discord-pp-cli webhooks update` — Update - `discord-pp-cli webhooks update-by-token` — Update by token ### Finding the right command When you know what you want to do but not which command does it, ask the CLI directly: ```bash discord-pp-cli which "<capability in your own words>" ``` `which` resolves a natural-language capability query to the best matching command from this CLI's curated feature index. Exit code `0` means at least one match; exit code `2` means no confident match — fall back to `--help` or use a narrower query. ## Auth Setup Run `discord-pp-cli auth setup` to print the URL and steps for getting a key (add `--launch` to open the URL). Then set: ```bash export DISCORD_BOT_TOKEN="<your-key>" ``` To persist credentials, use `discord-pp-cli auth set-token <token>`. Stored secrets live in `credentials.toml` under the data dir, not in `config.toml`. Run `discord-pp-cli doctor` to verify setup. ## Agent Mode Add `--agent` to any command. Expands to: `--json --compact --no-input --no-color --yes`. - **Pipeable** — JSON on stdout, errors on stderr - **Filterable** — `--select` keeps a subset of fields. Dotted paths descend into nested structures; arrays traverse element-wise. Critical for keeping context small on verbose APIs: ```bash discord-pp-cli applications get mock-value --agent --select id,name,status ``` - **Previewable** — `--dry-run` shows the request without sending - **Offline-friendly** — sync/search commands can use the local SQLite store when available - **Non-interactive** — never prompts, every input is a flag - **Explicit retries** — use `--idempotent` only when an already-existing create should count as success, and use `--ignore-missing` only when a missing delete target should count as success ### Response envelope Commands that read from the local store or the API wrap output in a provenance envelope: ```json { "meta": {"source": "live" | "local", "synced_at": "...", "reason": "..."}, "results": <data> } ``` Parse `.results` for data and `.meta.source` to know whether it's live or local. A human-readable `N results (live)` summary is printed to stderr only when stdout is a terminal AND no machine-format flag (`--json`, `--csv`, `--compact`, `--quiet`, `--plain`, `--select`) is set — piped/agent consumers and explicit-format runs get pure JSON on stdout. ## Paths and state Agents should treat the CLI's path resolver as part of the runtime contract: - Use `--home <dir>` for one invocation, or set `DISCORD_HOME=<dir>` to relocate all four path kinds under one root. - Use per-kind env vars only when a specific kind must diverge: `DISCORD_CONFIG_DIR`, `DISCORD_DATA_DIR`, `DISCORD_STATE_DIR`, `DISCORD_CACHE_DIR`. - Resolution order is per-kind env var, `--home`, `DISCORD_HOME`, XDG (`XDG_CONFIG_HOME`, `XDG_DATA_HOME`, `XDG_STATE_HOME`, `XDG_CACHE_HOME`), then platform defaults. - `config` contains settings like `config.toml` and profiles. `data` contains `credentials.toml`, `data.db`, cookies, and auth sidecars. `state` contains persisted queries, jobs, and `teach.log`. `cache` contains regenerable HTTP/cache files. - Stored secrets live in `credentials.toml` under the data dir. Existing legacy `config.toml` secrets are read for compatibility and leave `config.toml` on the first auth write. - Run `discord-pp-cli doctor --fail-on warn` to surface path and credential-location warnings. `agent-context` exposes a schema v4 `paths` block for agents that need the resolved dirs. - For MCP, pass relocation through the MCP host config. The MCP binary does not inherit CLI flags: ```json { "mcpServers": { "discord": { "command": "discord-pp-mcp", "env": { "DISCORD_HOME": "/srv/discord" } } } } ``` Fleet precedence: an inherited per-kind env var overrides an explicit `--home` for that kind. Use `DISCORD_HOME` or per-kind vars as durable fleet levers, and use `--home` only for a single invocation. Relocation is not reversible by unsetting env vars; move files manually before clearing `DISCORD_HOME`, or `doctor` will not find credentials left under the former root. ## Automatic learning This CLI ships a self-capturing learning loop. The CLI does its own bookkeeping: every invocation is journaled locally, a failed flag followed by a corrected retry auto-derives a `flag_alias` candidate, and a `teach` on a query family without a playbook auto-synthesizes a `playbook_candidate` from the session's journal. Your job is judgment only: `recall` first, act on surfaced candidates, `teach` the final answer, `playbook amend` when you observe a correction. You never record failures by hand. ### Step 1: `recall` before any discovery Before list/search/drill commands on a new user question, run: ```bash discord-pp-cli recall "<user's question>" --agent ``` The response envelope: ```json { "query": "...", "normalized": "<normalized form>", "query_entities": ["..."], "found": true | false, "match_score": 0.0, "results": [ { "resource_id": "...", "resource_type": "...", "venue": "...", "confidence": 2, "entity_match": "exact|partial|unknown", "source": "taught|preseed|pattern", "warnings": ["..."] } ], "mismatches": [ /* only when --debug-mismatches */ ], "warnings": [ /* top-level */ ], "candidates": [ { "id": 12, "class": "flag_alias | playbook_candidate", "summary": "...", "sightings": 3, "last_seen": "...", "rationale": "...", "next_action": ["<trial command>", "discord-pp-cli learnings confirm 12"] } ], "playbook": { "query_family": "...", "playbook": { "steps": [ { "cmd": "<command with {slot} substitution>", "purpose": "..." } ], "entity_slots": ["$ENTITY"], "expected_tool_calls": 3 }, "slots_resolved": { "$ENTITY": { "token": "<live token>", "canonical": "<canonical>" } }, "notes": "<workarounds + gotchas for this query family>" }, "notes": "<duplicate surface for non-playbook callers>" } ``` Empty-store short-circuit: if the store has no learnings, playbooks, or candidates yet (recall finds nothing and `learnings list` and `learnings candidates` are both empty), skip recall for the rest of this session instead of taxing every query; resume recall-first once something has been taught. ### Step 2: decision tree Read `candidates`, `playbook`, `notes`, `results[0]`, and warnings in that order: ``` if Candidates present (warnings include "candidates_present"): -> candidates are try-then-confirm, never facts. Follow each candidate's two-step next_action verbatim: run the trial command first, then run `learnings confirm <id>` only after the trial verified the behavior. Reject a wrong candidate with `learnings reject <id>`. -> NEVER re-teach something recall surfaced as a candidate; confirm or reject that candidate instead of teaching a duplicate. -> candidates ride alongside playbooks and resource hits, not instead of them; continue with the branches below after acting on them. if Playbook present: -> READ Playbook.notes verbatim FIRST (workarounds + gotchas the CLI surface doesn't expose) -> replay Playbook.steps in order, substituting Playbook.slots_resolved entries for the entity slot tokens. If a step's slot is unresolved, fall back to discovery for that step only. -> the Playbook's expected_tool_calls is a budget; if you find yourself running materially more, record the divergence via `discord-pp-cli playbook amend` at end-of-session. elif Notes present (no Playbook): -> read Notes verbatim before any discovery step; they carry known gotchas for this query family even when no structured choreography exists yet. elif Found AND Results[0].EntityMatch == "exact" AND Results[0].Confidence >= 2: -> skip discovery; fetch live data for Results[*].ResourceID in parallel elif Found AND Results[0].EntityMatch == "partial": -> candidate hint, NOT a hit; read the resource title to validate before trusting elif (any row in Mismatches[] when --debug-mismatches was passed): -> treat as cold start; the stored learning is for a different entity (different canonical resolved from query_entities) else: // Found == false, no playbook, no notes -> cold start; run discovery normally; teach the answer afterward (Step 4). If the family has no playbook yet, that teach auto-synthesizes a playbook candidate from this session's journal - you do not need to record one by hand. ``` Playbook and Notes are orthogonal to the per-resource path. A recall response can carry both a Playbook AND a `Results[]` hit - use both: the Playbook tells you which choreography to run; the resource hits short-circuit specific steps. Default to skipping `mismatches`; pass `--debug-mismatches` only when investigating cold-start surprises. Candidate judgment details: `learnings confirm <id>` prints the candidate's full payload before materializing it - check that the printed payload matches the behavior you verified. `learnings reject <id>` tombstones the derivation signature so the same candidate does not resurface. The envelope carries only the few candidates worth acting on now; `discord-pp-cli learnings candidates` lists the full open set. Graceful degradation: if `learnings confirm` is an unknown command, you are driving an older binary - ignore the candidates guidance and follow the rest of the protocol.
Ver en GitHub
Este SKILL.md es muy grande, por eso SkillsMP muestra aqui solo la primera seccion. Ver en GitHub