- Implement broadcast_dm() that creates a DM channel with the target
user (POST /users/@me/channels, cached by Discord) and sends the
message to it
- Extract DISCORD_API_BASE constant for all Discord REST API URLs
- Extract send_channel_message() shared helper to deduplicate message
posting between on_respond and broadcast_dm
- Add snowflake validation on user_id before API calls
- Fix pre-existing clippy redundant_closure warning
- Use typed DmChannelResponse struct instead of serde_json::Value
Closes no specific issue — completes the previously stubbed on_broadcast.
Co-authored-by: Claude Opus 4.6 (1M context) <[email protected]>
PR #1681 introduced 23 debug-level log statements across relay client,
web server handlers, and extension manager functions. Many of these fire
on every HTTP request or in loops (e.g. has_stored_team_id called per
extension in list_installed). Downgrade them to trace level to reduce
noise at the default debug log level while preserving warn/info logs
for actionable diagnostics.
Co-authored-by: Claude Opus 4.6 (1M context) <[email protected]>