// 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 });
}
}
};