Files
javis_bot/bot/scripts/stream-test/README.md
javis-bot bbc2fa3f7a refactor(stream-test): real-wheel into view, no synthetic-click fallback
Address review accuracy: humanClick used DOM scrollIntoViewIfNeeded and fell
back to Playwright locator.click() when an element had no box - neither is real
input. Now it brings elements into view with a real wheel scroll and throws if
there is no on-screen box (no synthetic click). Header comment and README
corrected: xdotool injects synthetic X input (not a physical HID device), and
all actions are real input while the CDP/DOM API is used only to read state.
2026-06-10 14:15:26 +09:00

46 lines
2.1 KiB
Markdown

# stream-test
Operational scripts for manually verifying the selfbot Go-Live broadcast with a
real browsing session captured from the X display.
## Files
- `stream-hold.ts` - joins the voice channel and keeps the Go-Live stream up
until stopped. All params from `.env` (`DISCORD_SELFBOT_TOKEN`,
`DISCORD_GUILD_ID`, `DISCORD_VOICE_CHANNEL_ID`, `VNC_RESOLUTION`,
`VNC_FRAMERATE`, `VNC_BITRATE_KBPS`, `STREAM_HW`, `VNC_DISPLAY`).
- `human.mjs` - human-like interaction helpers. Input is injected into the X
server with `xdotool` (synthetic X input, not a physical HID device, but the
browser and the captured screen see genuine pointer/keyboard events with a
visibly moving cursor); Playwright only locates elements. Every action is such
input: address-bar navigation (Ctrl+L + typing), search typing, clicking the
video / settings menu / autoplay toggle / play button, fullscreen via the `f`
key, and scrolling. Elements are brought into view with a real wheel scroll
(no DOM scrollIntoView); if an element has no on-screen box the click fails
rather than falling back to a synthetic click. The CDP/DOM API is used only to
read state for verification, never to act.
- `scenario.mjs` - the browse scenario (YouTube -> IU live -> 1080p ->
fullscreen -> Naver -> 나무위키), driven with the human helpers. Connects to a
Chrome already running with `--remote-debugging-port` (`CDP_PORT`, default
9222) on the streamed display.
## Run
```
# keep the broadcast up (separate process / service)
bun bot/scripts/stream-test/stream-hold.ts
# Chrome on the streamed display with remote debugging, then:
node bot/scripts/stream-test/scenario.mjs
```
## A/B framerate/resolution
Lower settings to compare what Discord actually delivers to viewers, e.g.:
```
VNC_RESOLUTION=1280x720 VNC_FRAMERATE=30 bun bot/scripts/stream-test/stream-hold.ts
```
## Notes
- Selfbot streaming violates Discord ToS; use a burner account.
- Requires `xdotool`, an X display, and a system `ffmpeg` with `x11grab`/nvenc.
- Prereqs (`playwright`, system Chrome) are not bot dependencies; install
separately where you run the scenario.