# WhisperGate Plugin ## Hook strategy - `message:received` caches a per-session decision from deterministic rules. - `before_model_resolve` applies `providerOverride + modelOverride` when decision says no-reply. - `before_prompt_build` prepends instruction `你的这次发言必须以🔚作为结尾。` when decision is: - `bypass_sender` - `end_symbol:*` ## Rules (in order) 1. non-discord -> skip 2. bypass sender -> skip 3. end symbol matched -> skip 4. else -> no-reply override ## Config See `docs/CONFIG.example.json`. Required: - `noReplyProvider` - `noReplyModel` Optional: - `enabled` (default true) - `discordOnly` (default true) - `listMode` (`human-list` | `agent-list`, default `human-list`) - `humanList` (default []) - `agentList` (default []) - `channelPolicies` (per-channel overrides by channelId) - `bypassUserIds` (deprecated alias of `humanList`) - `endSymbols` (default ["🔚"]) - `enableDiscordControlTool` (default true) - `discordControlApiBaseUrl` (default `http://127.0.0.1:8790`) - `discordControlApiToken` - `discordControlCallerId` ## Optional tool: `discord_control` This plugin now registers an optional tool named `discord_control`. To use it, add tool allowlist entry for either: - tool name: `discord_control` - plugin id: `whispergate` Supported actions: - `channel-private-create` - `channel-private-update` - `member-list`