falcon

Listen for postMessage from parent, log to console, enter it into the chat input, and submit

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램을 설치해야 합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name         falcon
// @description  Listen for postMessage from parent, log to console, enter it into the chat input, and submit
// @match        https://chat.falconllm.tii.ae/*
// @version 0.0.1.20251209141918
// @namespace https://greasyfork.org/users/1435046
// ==/UserScript==

(function () {
  'use strict';

  window.addEventListener("message", (event) => {

    if (event.data && event.data.type === 'newChatButtonClicked') {

      // Click the "New Chat" button
      const newChatButton = document.querySelector('a[href="/"]');
      if (newChatButton) {
        newChatButton.click();
                         }
      return;
    }

if (event.data === 'reload') {
window.location.reload();
}

    let falconCssStyleId = document.getElementById('falconCssStyleId');

    let chatMessageInput = document.querySelector('div:has(> div > div > div > div > form > div > div > textarea#chat-input)');
    let chatMessageInputRule = 'div:has(> div > div > div > div > form > div > div > textarea#chat-input) {display: none !important;}';

    let header = document.querySelector('nav.sticky:has(> div > div > div > div > div[aria-label="Controls"])');
    let headerRule = 'nav.sticky:has(> div > div > div > div > div[aria-label="Controls"]) {display: none !important;}';

    //if event data type is defaultChatMessageInputDisplay
    if (event.data?.type === 'defaultChatMessageInputDisplay') {
      console.log('default');
      if (chatMessageInput) {

        falconCssStyleId.innerHTML = falconCssStyleId.innerHTML.replace(`${chatMessageInputRule}`, '');

        falconCssStyleId.innerHTML = falconCssStyleId.innerHTML.replace(`${headerRule}`, '');


        //return
        return;
      }
    }

    if (event.data?.type === 'customizeChatMessageInputDisplay') {
      console.log('customize');
      if (chatMessageInput) {

        falconCssStyleId.innerHTML += `${chatMessageInputRule}`
        falconCssStyleId.innerHTML += `${headerRule}`


        //return
        return;
      }
    }

    if (event.data?.type === "prompt") {
  const input = document.getElementById("chat-input");
  const button = document.getElementById("send-message-button");

  // Set the textarea value
  input.value = event.data.content;

  // Fire an input event so React updates state
  input.dispatchEvent(new Event("input", { bubbles: true }));

  const observer = new MutationObserver(() => {
    if (!button.hasAttribute("disabled")) {
      button.click();
      observer.disconnect();
    }
  });

  observer.observe(button, { attributes: true, attributeFilter: ["disabled"] });
}

  });
})();