feat(bot+dashboard): bot info, server/voice-channel picker, participants, speaker

Adds a dashboard<->bot control plane (bot pushes state + polls commands, keeping
the bot's single outbound-HTTP direction):
- New bot_control.BotControl + endpoints: GET /api/bot/state, /api/bot/commands;
  POST /api/bot/report, /api/bot/select.
- Dashboard header bar: bot identity/connection, server dropdown (top "없음"),
  voice-channel dropdown (top "없음"), and live participant list.
- Turns record who spoke (Turn.speaker, via X-User-Name on the voice-turn POST).
- dave/bot.mjs: reports identity/guilds/voice-channels/members, polls join/leave
  commands and joins dynamically, and sends the speaker's display name.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
EJClaw
2026-08-22 11:43:48 +09:00
parent 6a2865d899
commit d3cf4e01b5
4 changed files with 325 additions and 80 deletions

View File

@@ -80,6 +80,7 @@ class Turn:
self._monitor = monitor
self.id = turn_id
self.source = source
self.speaker = "" # who spoke (Discord display name), when known
self.wall = _now_wall()
self._t0 = _now_mono()
self.heard_text = ""
@@ -137,6 +138,7 @@ class Turn:
return {
"id": self.id,
"source": self.source,
"speaker": self.speaker,
"wall": self.wall,
"heard": self.heard_text,
"thought": self.thought_text,