Files
javis_bot/bot/scripts/stream-test
javis-bot 8709f40fd6 fix(stream-test): refuse final box when element stays off-screen
bringIntoView returned the last boundingBox() unconditionally after the
scroll loop exhausted, so an element still outside the viewport would be
clicked anyway. Validate the final box against the actual viewport bounds
on both axes (innerWidth/innerHeight) and return null otherwise, so
humanClick fails instead of clicking an off-screen coordinate.
2026-06-10 14:18:43 +09:00
..

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.