mirror of
https://github.com/ZHANGTIANYAO1/teamspeak-music-bot.git
synced 2026-10-02 13:02:49 +08:00
Add TS6 clientinit version middleware and fix playNext retry bug
clientinit compatibility: - Analyzed @honeybbq/teamspeak-client's clientinit: it already sends a clean 14-field payload without problematic fields (no badges, integrations, security_hash, etc.) - The key difference vs NeteaseTSBot is client_version: our library sends 3.5.3, NeteaseTSBot sends 3.6.2. TS6 servers may reject older versions. - Add ts6-compat.ts with CommandMiddleware that patches clientinit to use version 3.6.2 + matching ECDSA signature when connecting to detected TS6 servers - Middleware is automatically applied when detectedProtocol === "ts6" Pre-existing bug fix: - Fix playNext() in instance.ts where successful retry still fell through to player.stop(), killing the just-started playback https://claude.ai/code/session_016WhH58avUD9xy2dgADJgTh
This commit is contained in:
4 files changed
+143
-4
No files matched your search
@@ -0,0 +1,45 @@
|
||||
import { describe, it, expect } from "vitest";
|
||||
import { ts6VersionMiddleware } from "./ts6-compat.js";
|
||||
|
||||
describe("ts6-compat", () => {
|
||||
it("patches clientinit version to 3.6.2", async () => {
|
||||
const middleware = ts6VersionMiddleware("3.6.2");
|
||||
let captured = "";
|
||||
const next = async (cmd: string) => {
|
||||
captured = cmd;
|
||||
};
|
||||
const handler = middleware(next);
|
||||
|
||||
const original =
|
||||
"clientinit client_nickname=Bot client_version=3.5.3\\s[Build:\\s1587971024] " +
|
||||
"client_platform=Windows client_version_sign=Kvmj7qX6wJCPI5GVT71samfmhz/bvs7M+OTXWB/JWxdQbxDe17xda7dzUWLX7pjvdJTqZmbse1HBmTxThPKvAg== " +
|
||||
"client_key_offset=42 hwid=abc123";
|
||||
|
||||
await handler(original);
|
||||
|
||||
expect(captured).toContain("client_version=3.6.2\\s[Build:\\s1695203293]");
|
||||
expect(captured).toContain(
|
||||
"client_version_sign=4OH3unxjGNBYS5EN4RFNrEo3UJz2Jn5KW1JqMDh3Yy93mSd0IwPm3FBrv8hCJgLuv99y6yBSN7pOmOpFjDaCw=="
|
||||
);
|
||||
// Other fields preserved
|
||||
expect(captured).toContain("client_nickname=Bot");
|
||||
expect(captured).toContain("client_key_offset=42");
|
||||
expect(captured).toContain("hwid=abc123");
|
||||
});
|
||||
|
||||
it("does not modify non-clientinit commands", async () => {
|
||||
const middleware = ts6VersionMiddleware("3.6.2");
|
||||
let captured = "";
|
||||
const handler = middleware(async (cmd) => {
|
||||
captured = cmd;
|
||||
});
|
||||
|
||||
const original = "sendtextmessage targetmode=2 msg=hello";
|
||||
await handler(original);
|
||||
expect(captured).toBe(original);
|
||||
});
|
||||
|
||||
it("throws for unknown target version", () => {
|
||||
expect(() => ts6VersionMiddleware("9.9.9")).toThrow("Unknown version");
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user