Families.AutoWriter 1.0.0.0
Families 콘텐츠를 반복 작업 없이 작성·등록하도록 돕는 자동화 작성 도구입니다.
로딩중...
검색중...
일치하는것 없음
FamiliesAutoWriter.Services.PromptInjector 클래스 참조

더 자세히 ...

정적 Public 멤버 함수

static string BuildInjectScript (string prompt)

상세한 설명

각 AI 웹사이트의 DOM에 프롬프트를 주입하고 전송하는 JS 코드를 생성합니다.

PromptInjector.cs 파일의 11 번째 라인에서 정의되었습니다.

멤버 함수 문서화

◆ BuildInjectScript()

string FamiliesAutoWriter.Services.PromptInjector.BuildInjectScript ( string prompt)
inlinestatic

Inject Script 값을 구성합니다.

매개변수
promptprompt에 사용할 string 값입니다.
반환값
Build Inject Script 작업에서 생성한 string 결과입니다.

PromptInjector.cs 파일의 37 번째 라인에서 정의되었습니다.

38 {
39 // JSON 문자열로 안전하게 이스케이프
40 var escaped = System.Text.Json.JsonSerializer.Serialize(prompt);
41
42 return $$"""
43 (async function() {
44 const text = {{escaped}};
45
46 // ── Claude.ai ──────────────────────────────────────────────
47 // ProseMirror contenteditable div
48 let el = document.querySelector('div[contenteditable="true"].ProseMirror')
49 ?? document.querySelector('[contenteditable="true"][data-placeholder]')
50 ?? document.querySelector('div[contenteditable="true"]');
51
52 if (el) {
53 el.focus();
54 // 기존 내용 지우기
55 document.execCommand('selectAll', false, null);
56 document.execCommand('delete', false, null);
57 // 텍스트 입력
58 document.execCommand('insertText', false, text);
59 await new Promise(r => setTimeout(r, 300));
60 // 전송 버튼 클릭 시도
61 const sendBtn = document.querySelector('button[data-testid="send-button"]')
62 ?? document.querySelector('button[aria-label*="Send"]')
63 ?? document.querySelector('button[type="submit"]');
64 if (sendBtn && !sendBtn.disabled) { sendBtn.click(); return 'sent:claude'; }
65 // Enter로 전송 (shift 없이)
66 el.dispatchEvent(new KeyboardEvent('keydown', {key:'Enter', keyCode:13, bubbles:true}));
67 return 'sent:claude-enter';
68 }
69
70 // ── ChatGPT ────────────────────────────────────────────────
71 let gptEl = document.getElementById('prompt-textarea')
72 ?? document.querySelector('textarea[placeholder*="Message"]')
73 ?? document.querySelector('textarea[data-id]');
74
75 if (gptEl) {
76 gptEl.focus();
77 const nativeSetter = Object.getOwnPropertyDescriptor(window.HTMLTextAreaElement.prototype, 'value').set;
78 nativeSetter.call(gptEl, text);
79 gptEl.dispatchEvent(new Event('input', {bubbles:true}));
80 await new Promise(r => setTimeout(r, 300));
81 const btn = document.querySelector('button[data-testid="send-button"]')
82 ?? document.querySelector('button[aria-label="Send prompt"]');
83 if (btn && !btn.disabled) { btn.click(); return 'sent:chatgpt'; }
84 gptEl.dispatchEvent(new KeyboardEvent('keydown', {key:'Enter', keyCode:13, bubbles:true}));
85 return 'sent:chatgpt-enter';
86 }
87
88 // ── Gemini ─────────────────────────────────────────────────
89 let gemEl = document.querySelector('rich-textarea .ql-editor')
90 ?? document.querySelector('.ql-editor[contenteditable="true"]')
91 ?? document.querySelector('textarea.input-area')
92 ?? document.querySelector('p[data-placeholder]');
93
94 if (gemEl) {
95 gemEl.focus();
96 document.execCommand('selectAll', false, null);
97 document.execCommand('delete', false, null);
98 document.execCommand('insertText', false, text);
99 await new Promise(r => setTimeout(r, 400));
100 const btn = document.querySelector('button.send-button')
101 ?? document.querySelector('button[aria-label*="전송"]')
102 ?? document.querySelector('button[aria-label*="Send"]')
103 ?? document.querySelector('mat-icon[data-mat-icon-name="send"]')?.closest('button');
104 if (btn) { btn.click(); return 'sent:gemini'; }
105 gemEl.dispatchEvent(new KeyboardEvent('keydown', {key:'Enter', keyCode:13, bubbles:true}));
106 return 'sent:gemini-enter';
107 }
108
109 return 'no-input-found';
110 })();
111 """;
112 }

다음에 의해서 참조됨 : FamiliesAutoWriter.ViewModels.WriterSession.RunLoopCycleAsync(), FamiliesAutoWriter.ViewModels.WriterSession.SendPromptNowAsync().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

이 클래스에 대한 문서화 페이지는 다음의 파일로부터 생성되었습니다.: