feat: auto-route room_id 1 to local fake_room.py for testing
- When room_id == 1, server/main automatically patch blivedm to connect to fake_room.py on 127.0.0.1:8081 (bot web UI port + 1) - Any other room id restores real Bilibili (unpatch) - fake_room.py (gitignored, not packaged): headless fake live room with bilibili-compatible init APIs (/x/web-interface/nav, /room/v1/Room/get_info, /xlive/web-room/v1/index/getDanmuInfo) and WS /sub protocol (AUTH/HEARTBEAT/ SEND_MSG_REPLY), plus stdin/HTTP /emit control for danmaku/gift/blind box/ guard/super chat/enter/follow - Verified end-to-end: all events flow through blivedm and render rules (gift -> 感谢由Baka投喂的小电视, blind box, guard, super chat, custom danmaku template, enter room)
This commit is contained in:
@@ -29,3 +29,6 @@ temp/
|
||||
|
||||
# Node.js
|
||||
node_modules/
|
||||
|
||||
# Dev/testing (not packaged, not committed)
|
||||
fake_room.py
|
||||
|
||||
@@ -33,6 +33,8 @@ def parse_args() -> argparse.Namespace:
|
||||
parser.add_argument("--no-numbers", action="store_true")
|
||||
parser.add_argument("--list-devices", action="store_true")
|
||||
parser.add_argument("--debug", "-d", action="store_true")
|
||||
parser.add_argument("--fake-room", type=int, default=0, metavar="PORT",
|
||||
help="connect to local fake_room.py instead of real Bilibili (dev/testing only)")
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
@@ -58,6 +60,17 @@ async def tts_worker(queue: asyncio.Queue, bridge: TTSBridge,
|
||||
|
||||
|
||||
async def main_async(args: argparse.Namespace) -> int:
|
||||
if args.fake_room:
|
||||
import importlib
|
||||
fake = importlib.import_module("fake_room")
|
||||
fake.patch_blivedm(args.fake_room)
|
||||
logger.info("[dev] connected to fake room on port %d", args.fake_room)
|
||||
elif args.room_id == 1:
|
||||
import importlib
|
||||
fake = importlib.import_module("fake_room")
|
||||
fake.patch_blivedm(8081)
|
||||
logger.info("[dev] room 1 -> fake room on port 8081")
|
||||
|
||||
if args.list_devices:
|
||||
devices = get_output_devices()
|
||||
print("Available audio output devices:")
|
||||
|
||||
@@ -151,6 +151,21 @@ async def index_handler(request: web.Request) -> web.Response:
|
||||
return web.FileResponse(STATIC_DIR / "index.html")
|
||||
|
||||
|
||||
FAKE_ROOM_PORT = 8081 # fake_room.py default = bot web UI port (8080) + 1
|
||||
|
||||
|
||||
def _apply_fake_room(room_id: int) -> None:
|
||||
"""room_id == 1 routes to the local fake room (dev/testing); otherwise restore real Bilibili."""
|
||||
import importlib
|
||||
|
||||
fake = importlib.import_module("fake_room")
|
||||
if room_id == 1:
|
||||
fake.patch_blivedm(FAKE_ROOM_PORT)
|
||||
logger.info("[dev] room 1 -> fake room on port %d", FAKE_ROOM_PORT)
|
||||
else:
|
||||
fake.unpatch_blivedm()
|
||||
|
||||
|
||||
async def api_start(request: web.Request) -> web.Response:
|
||||
try:
|
||||
config = await request.json()
|
||||
@@ -173,6 +188,7 @@ async def api_start(request: web.Request) -> web.Response:
|
||||
await tts_service.stop()
|
||||
except Exception:
|
||||
pass
|
||||
_apply_fake_room(room_id)
|
||||
tts_service.set_cookies(login_session.cookies if login_session.is_logged_in else None)
|
||||
try:
|
||||
await tts_service.start(config)
|
||||
@@ -300,6 +316,8 @@ def parse_args() -> argparse.Namespace:
|
||||
parser.add_argument("--port", "-p", type=int, default=8080)
|
||||
parser.add_argument("--host", type=str, default="127.0.0.1")
|
||||
parser.add_argument("--debug", "-d", action="store_true")
|
||||
parser.add_argument("--fake-room", type=int, default=0, metavar="PORT",
|
||||
help="connect to local fake_room.py instead of real Bilibili (dev/testing only)")
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
@@ -311,6 +329,13 @@ def main() -> int:
|
||||
datefmt="%H:%M:%S",
|
||||
)
|
||||
logging.getLogger("aiohttp.access").setLevel(logging.WARNING)
|
||||
|
||||
if args.fake_room:
|
||||
import importlib
|
||||
fake = importlib.import_module("fake_room")
|
||||
fake.patch_blivedm(args.fake_room)
|
||||
print(f" [dev] connected to fake room on port {args.fake_room}")
|
||||
|
||||
app = create_app()
|
||||
print(f"\n Bilibili Live → Yukkuri TTS Web UI")
|
||||
print(f" Open: http://{args.host}:{args.port}\n")
|
||||
|
||||
Reference in New Issue
Block a user