CCCPaste

to discord chat Cloudflare Worker web

// Worker JavaScript Code

const DISCORD_WEBHOOK_URL = ""; // <<< 替換成你的真實 Webhook 網址!

const ALERT_TEMPERATURE = 1428; // 警報溫度設定:1428°K
const ALERT_TAG = "<@XXXXXXXXXXXXXXXXXX>"; // 緊急警報 @Tag

// 數字格式化函數
function formatLargeNumber(num) {
    if (num >= 1e12) return (num / 1e12).toFixed(2) + " T";
    if (num >= 1e9) return (num / 1e9).toFixed(2) + " G";
    if (num >= 1e6) return (num / 1e6).toFixed(2) + " M";
    if (num >= 1e3) return (num / 1e3).toFixed(2) + " K";
    return Math.floor(num).toString();
}

export default {
    async fetch(request) {
        if (request.method !== 'POST') {
            return new Response("Method Not Allowed. Use POST.", { status: 405 });
        }

        try {
            // 1. 接收來自 CC 電腦的簡化數據
            const data = await request.json();
            
            // 2. 數據分析與排版
            const { computer_id, temp, efficiency, stored_energy, max_energy, input_rate, output_rate, status } = data;

            const is_critical = temp >= ALERT_TEMPERATURE || status === "INACTIVE";
            const color = is_critical ? 16711680 : 65280; // 紅色(危險) 或 綠色(正常)

            // --- 建立主監控 Embed ---
            const monitorEmbed = {
                title: `[ID:${computer_id}] 能源監控報告`,
                color: color,
                description: `狀態更新時間: ${new Date().toLocaleTimeString('zh-TW', { hour12: false })}`,
                fields: [
                    // MEK 傳輸矩陣數據
                    {
                        name: "⚡ 傳輸矩陣 (FE)",
                        value: `儲存量: ${formatLargeNumber(stored_energy)} FE / ${formatLargeNumber(max_energy)} FE\n輸入率: ${formatLargeNumber(input_rate)} FE/t\n輸出率: ${formatLargeNumber(output_rate)} FE/t`,
                        inline: false
                    },
                    // 核分裂反應堆數據
                    {
                        name: "☢️ 核分裂反應堆",
                        value: `狀態: ${status === "ACTIVE" ? "🟢 運作中" : "🔴 停止/錯誤"}\n溫度: ${temp.toFixed(2)} °K`,
                        inline: false
                    }
                ],
                footer: { text: "數據來源: CC: Tweaked Lua" }
            };

            const finalPayload = {
                embeds: [monitorEmbed]
            };
            
            // --- 檢查是否需要發送緊急 Tag 警報 (如果 CC 發送了 alert: true 旗標) ---
            let alertContent = null;
            if (data.alert_tag === true) {
                 alertContent = `${ALERT_TAG} 🚨 緊急警告![ID:${computer_id}] 核反應堆溫度已達 ${temp.toFixed(2)}°K。請立即檢查!`;
                 finalPayload.content = alertContent; // Tag 必須放在 content 欄位
            }


            // 3. 發送請求到 Discord Webhook
            const discordRequest = new Request(DISCORD_WEBHOOK_URL, {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json',
                    // 強制設定 User-Agent,避免被 Discord 擋下
                    'User-Agent': 'DiscordBot (Cloudflare Worker Proxy, 1.0)', 
                },
                body: JSON.stringify(finalPayload),
            });

            const discordResponse = await fetch(discordRequest);
            
            // 4. 返回結果給 CC 電腦
            return new Response("OK", { status: discordResponse.status });

        } catch (error) {
            console.error("Worker Error:", error.message);
            return new Response("Worker Processing Error", { status: 500 });
        }
    }
};