






















@@ -32,6 +32,17 @@ class UsageError extends Error {
3232readonly exitCode = 1;
3333}
343435+class CliArgumentError extends UsageError {}
36+37+type DevicePairTelegramArgs = {
38+accountId?: string;
39+chatId?: string;
40+help: boolean;
41+};
42+43+const BOOLEAN_FLAGS = new Set(["--help", "-h"]);
44+const VALUE_FLAGS = new Set(["--account", "-a", "--chat", "-c"]);
45+3546function writeStdoutLine(...parts: string[]): void {
3647process.stdout.write(`${parts.join(" ")}\n`);
3748}
@@ -57,9 +68,41 @@ function readArg(args: string[], flag: string, short?: string): string | undefin
5768function usage(): string {
5869return [
5970"Usage: bun scripts/dev/test-device-pair-telegram.ts --chat <telegram-chat-id> [--account <accountId>]",
71+"",
72+"Options:",
73+" --chat, -c <id> Telegram chat id",
74+" --account, -a <id> Telegram account id",
75+" -h, --help Show this help",
6076].join("\n");
6177}
627879+function validateArgs(args: readonly string[]): void {
80+for (let index = 0; index < args.length; index += 1) {
81+const arg = args[index] ?? "";
82+if (BOOLEAN_FLAGS.has(arg)) {
83+continue;
84+}
85+if (VALUE_FLAGS.has(arg)) {
86+const value = args[index + 1];
87+if (!value || value.startsWith("--")) {
88+throw new CliArgumentError(`${arg} requires a value`);
89+}
90+index += 1;
91+continue;
92+}
93+throw new CliArgumentError(`Unknown argument: ${arg}`);
94+}
95+}
96+97+function parseDevicePairTelegramArgs(args: readonly string[]): DevicePairTelegramArgs {
98+validateArgs(args);
99+return {
100+accountId: readArg([...args], "--account", "-a"),
101+chatId: readArg([...args], "--chat", "-c"),
102+help: args.includes("--help") || args.includes("-h"),
103+};
104+}
105+63106async function loadTelegramRuntimeSendMessage(): Promise<SendMessageTelegram> {
64107const specifier = "../../extensions/telegram/runtime-api.js";
65108const runtime = (await import(specifier)) as { sendMessageTelegram?: SendMessageTelegram };
@@ -86,8 +129,10 @@ async function runDevicePairTelegram(
86129args = process.argv.slice(2),
87130deps: DevicePairTelegramDeps = createDefaultDeps(),
88131): Promise<DevicePairTelegramResult> {
89-const chatId = readArg(args, "--chat", "-c");
90-const accountId = readArg(args, "--account", "-a");
132+const { accountId, chatId, help } = parseDevicePairTelegramArgs(args);
133+if (help) {
134+throw new UsageError(usage());
135+}
91136if (!chatId) {
92137throw new UsageError(usage());
93138}
@@ -133,7 +178,12 @@ async function runDevicePairTelegram(
133178134179async function main(): Promise<void> {
135180try {
136-const result = await runDevicePairTelegram();
181+const args = process.argv.slice(2);
182+if (args.includes("--help") || args.includes("-h")) {
183+writeStdoutLine(usage());
184+return;
185+}
186+const result = await runDevicePairTelegram(args);
137187writeStdoutLine(
138188"Sent split /pair messages to",
139189result.chatId,
@@ -150,4 +200,4 @@ if (import.meta.url === pathToFileURL(process.argv[1] ?? "").href) {
150200await main();
151201}
152202153-export { runDevicePairTelegram };
203+export { parseDevicePairTelegramArgs, runDevicePairTelegram };
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。