mirror of
https://github.com/ZHANGTIANYAO1/teamspeak-music-bot.git
synced 2026-10-02 13:02:49 +08:00
fix: harden voice ducking bot detection
This commit is contained in:
1 parent
97e8a87305
commit
bc711758b7
7 files changed
+333
-35
No files matched your search
@@ -1,4 +1,4 @@
|
||||
import { describe, it, expect, vi } from "vitest";
|
||||
import { afterEach, describe, it, expect, vi } from "vitest";
|
||||
import pino from "pino";
|
||||
import { TS3Client } from "./client.js";
|
||||
|
||||
@@ -83,3 +83,59 @@ describe("TS3Client.getClientServerGroups — live query + parse smoke test", ()
|
||||
expect(await ts.getClientServerGroups(5)).toEqual([]);
|
||||
});
|
||||
});
|
||||
|
||||
describe("TS3Client stable identity UID", () => {
|
||||
it("derives the same client UID after exporting and restoring an identity", () => {
|
||||
const first = makeClient();
|
||||
const restored = new TS3Client(
|
||||
{
|
||||
host: "localhost",
|
||||
port: 9987,
|
||||
queryPort: 10011,
|
||||
nickname: "RestoredBot",
|
||||
identity: first.getIdentityExport(),
|
||||
},
|
||||
pino({ level: "silent" }),
|
||||
);
|
||||
|
||||
expect(first.getClientUid()).toBeTruthy();
|
||||
expect(restored.getClientUid()).toBe(first.getClientUid());
|
||||
});
|
||||
});
|
||||
|
||||
type VisibleUidHarness = {
|
||||
visibleClientUids: Map<number, string>;
|
||||
rememberVisibleClientUid(clientId: number, clientUid: string): void;
|
||||
releaseVisibleClientUid(clientId: number): void;
|
||||
clearVisibleClientUids(): void;
|
||||
};
|
||||
|
||||
describe("TS3Client visible client UID grace", () => {
|
||||
afterEach(() => vi.useRealTimers());
|
||||
|
||||
it("retains a leaving client's UID for final reordered voice packets", () => {
|
||||
vi.useFakeTimers();
|
||||
const cache = makeClient() as unknown as VisibleUidHarness;
|
||||
cache.rememberVisibleClientUid(7, "managed-bot-uid=");
|
||||
|
||||
cache.releaseVisibleClientUid(7);
|
||||
vi.advanceTimersByTime(999);
|
||||
expect(cache.visibleClientUids.get(7)).toBe("managed-bot-uid=");
|
||||
|
||||
vi.advanceTimersByTime(1);
|
||||
expect(cache.visibleClientUids.has(7)).toBe(false);
|
||||
});
|
||||
|
||||
it("lets a new clientEnter overwrite a reused id and cancel stale cleanup", () => {
|
||||
vi.useFakeTimers();
|
||||
const cache = makeClient() as unknown as VisibleUidHarness;
|
||||
cache.rememberVisibleClientUid(7, "old-managed-bot-uid=");
|
||||
cache.releaseVisibleClientUid(7);
|
||||
|
||||
cache.rememberVisibleClientUid(7, "new-human-uid=");
|
||||
vi.advanceTimersByTime(1_000);
|
||||
|
||||
expect(cache.visibleClientUids.get(7)).toBe("new-human-uid=");
|
||||
cache.clearVisibleClientUids();
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user