twocents/open source

Configuration

Configure channels, hooks, and notifications.

Guildscribe reads its configuration from .env. It recognizes these variables:

GUILDSCRIBE_DISCORD_TOKEN
GUILDSCRIBE_OWNER_USER_ID
GUILDSCRIBE_VOICE_CHANNEL_IDS
GUILDSCRIBE_MESSAGE_CHANNEL_IDS
GUILDSCRIBE_SLASH_COMMANDS
GUILDSCRIBE_EMPTY_GRACE_MS
GUILDSCRIBE_HOOK_TIMEOUT_MS
GUILDSCRIBE_TRANSCRIPTION_HOOK
GUILDSCRIBE_HOOK_CHANNEL_JOINED
GUILDSCRIBE_HOOK_CHANNEL_LEFT
GUILDSCRIBE_HOOK_RECORDING_STARTED
GUILDSCRIBE_HOOK_RECORDING_COMPLETED
GUILDSCRIBE_HOOK_RECORDING_FAILED
GUILDSCRIBE_HOOK_TRANSCRIPTION_COMPLETED
GUILDSCRIBE_HOOK_TRANSCRIPTION_FAILED

GUILDSCRIBE_VOICE_CHANNEL_IDS contains a JSON array of one or more unique Discord channel IDs. The legacy singular GUILDSCRIBE_VOICE_CHANNEL_ID remains a read-only compatibility fallback when the plural key is absent.

GUILDSCRIBE_OWNER_USER_ID is optional. When configured, Guildscribe sends that Discord user a direct message after the daemon establishes its initial gateway connection and becomes ready. Notification failure is logged but does not stop recording. Reconnects within the same daemon process do not send duplicates.

GUILDSCRIBE_TRANSCRIPTION_HOOK is an optional absolute executable path. When it is absent, transcription is disabled. It is separate from the two HOOK_TRANSCRIPTION_* lifecycle notifications. All hook values are absolute executable paths. The default empty grace is 30 seconds and the default lifecycle hook timeout is 30 seconds; that short timeout does not apply to the transcription worker.

Read configuration with guildscribe config show. It never returns the Discord token. guildscribe config update accepts the same fields as initialization, all optional, and atomically replaces .env; JSON null clears an existing transcription or lifecycle hook. Channel ordering is meaningful and is preserved. A successful update reports that a daemon restart is required; it does not silently restart the recorder.

Preview an update

Example channels.json with fabricated IDs:

{
  "voiceChannelIDs": ["222222222222222222"],
  "messageChannelIDs": ["333333333333333333"]
}
guildscribe config update --request channels.json --dry-run
guildscribe config update --request channels.json

Check restartRequired, then restart the daemon when you can interrupt recording. Unknown fields and empty updates fail. Token updates use the same private file/stdin handling as initialization. The generated config.update.request schema in the reference defines accepted fields.

slashCommands maps to GUILDSCRIBE_SLASH_COMMANDS; registration requires an explicit sync and does not happen implicitly on startup. See messaging and commands.

On this page