MCPcopy Create free account
hub / github.com/TeleBoxOrg/TeleBox_Plugins / tryGetCanvas

Function tryGetCanvas

pmcaptcha/pmcaptcha.ts:510–555  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

508 } catch {}
509
510 if (_canvasInstalling) {
511 const deadline = Date.now() + 60_000;
512 while (_canvasInstalling && Date.now() < deadline) {
513 if (!(await generationDelay(500))) return false;
514 }
515 return _canvas ?? false;
516 }
517
518 _canvasInstalling = true;
519 log(LogLevel.INFO, "canvas not found — auto installing (npm install canvas)…");
520
521 try {
522 execSync("npm install canvas", { stdio: "pipe" });
523 log(LogLevel.INFO, "canvas installed successfully");
524 } catch (e) {
525 log(LogLevel.ERROR, "canvas install failed", e);
526 _canvas = false;
527 _canvasInstalling = false;
528 return false;
529 }
530
531 try {
532 const canvasId = require.resolve("canvas");
533 if (require.cache[canvasId]) delete require.cache[canvasId];
534 } catch {}
535
536 try {
537 _canvas = await import("canvas");
538 log(LogLevel.INFO, "canvas dynamically loaded after install");
539 } catch (e) {
540 log(LogLevel.ERROR, "canvas load failed after install", e);
541 _canvas = false;
542 }
543
544 _canvasInstalling = false;
545 return _canvas ?? false;
546}
547
548async function generateImageCaptcha(
549 digitOnly: boolean
550): Promise<{ buffer: Buffer; answer: string } | null> {
551 const cv = await tryGetCanvas();
552 if (!cv) return null;
553
554 const CHARSET_DIGIT = "0123456789";
555 const CHARSET_MIXED = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789";
556
557 const charset = digitOnly ? CHARSET_DIGIT : CHARSET_MIXED;
558 const LENGTH = 5;

Callers 1

generateImageCaptchaFunction · 0.85

Calls 2

logFunction · 0.85
generationDelayFunction · 0.85

Tested by

no test coverage detected