From 7e7eb97ff61e12b099c84920c0c380b52bb6f0cd Mon Sep 17 00:00:00 2001 From: legop3 Date: Fri, 1 May 2026 01:32:02 -0400 Subject: [PATCH] whue --- .../discordBotService/batteryEmbeds.js | 34 +++++-------------- .../discordBotService/commands/status.js | 2 +- .../discordBotService/commands/timeStatus.js | 18 +++++++++- .../integrations/busEvents.js | 10 +++--- 4 files changed, 32 insertions(+), 32 deletions(-) diff --git a/server/src/services/discordBotService/batteryEmbeds.js b/server/src/services/discordBotService/batteryEmbeds.js index ba24afb4..513d9b2a 100644 --- a/server/src/services/discordBotService/batteryEmbeds.js +++ b/server/src/services/discordBotService/batteryEmbeds.js @@ -23,14 +23,6 @@ function formatChargeState(batteryState) { return `${chargeText} (${percentText})`; } -function formatDockEmoji(docked) { return docked ? '🏠' : '🧭'; } -function formatChargeEmoji(charging) { return charging ? '⚡' : '🔌'; } -function formatLockEmoji(locked) { return locked ? '🔒' : '🔓'; } -function formatBatteryEmoji(batteryState) { - if (batteryState?.urgentActive) return '🛑'; - if (batteryState?.warnActive) return 'âš ī¸'; - return '🔋'; -} function formatOiEmoji(oiMode) { if (oiMode === 'full') return 'đŸ•šī¸'; if (oiMode === 'safe') return '🧰'; @@ -66,7 +58,7 @@ function buildRoverStatusSnapshot(record) { }; } -function buildBatteryStatusEmbed({ color = 0x2196f3, records = [], includeOi = true }) { +function buildBatteryStatusEmbed({ color = 0x2196f3, records = [] }) { const embed = new EmbedBuilder().setTitle('Rover Battery Status').setColor(color).setTimestamp(new Date()); const snapshots = records.map((entry) => buildRoverStatusSnapshot(entry)).filter(Boolean); if (!snapshots.length) { @@ -78,27 +70,19 @@ function buildBatteryStatusEmbed({ color = 0x2196f3, records = [], includeOi = t const lockLabel = snapshot.locked ? `locked${snapshot.lockReason ? ` (${snapshot.lockReason})` : ''}` : 'unlocked'; const dockLabel = snapshot.docked ? 'docked' : 'undocked'; const chargingLabel = snapshot.charging ? `charging (${snapshot.chargingLabel})` : 'not charging'; - const header = [ - formatBatteryEmoji(snapshot.batteryState), - formatDockEmoji(snapshot.docked), - formatChargeEmoji(snapshot.charging), - formatLockEmoji(snapshot.locked), - ].join(' '); const lines = [ - `${formatDockEmoji(snapshot.docked)} Dock: ${dockLabel}`, - `${formatChargeEmoji(snapshot.charging)} Charging: ${chargingLabel}`, - `${formatBatteryEmoji(snapshot.batteryState)} Battery: ${formatChargeState(snapshot.batteryState)}`, - `🔌 Voltage: ${formatVoltage(snapshot.voltageMv)}`, - `📈 Current: ${formatCurrent(snapshot.currentMa)}`, + `Dock: ${dockLabel}`, + `Charging: ${chargingLabel}`, + `Battery: ${formatChargeState(snapshot.batteryState)}`, + `Voltage: ${formatVoltage(snapshot.voltageMv)}`, + `Current: ${formatCurrent(snapshot.currentMa)}`, ]; - if (includeOi) { - lines.push(`${formatOiEmoji(snapshot.oiMode)} OI mode: ${snapshot.oiMode}`); - } - lines.push(`${formatLockEmoji(snapshot.locked)} Lock: ${lockLabel}`); + lines.push(`${formatOiEmoji(snapshot.oiMode)} OI mode: ${snapshot.oiMode}`); + lines.push(`Lock: ${lockLabel}`); embed.addFields({ - name: `${header} ${snapshot.name}`, + name: snapshot.name, value: lines.join('\n'), inline: true, }); diff --git a/server/src/services/discordBotService/commands/status.js b/server/src/services/discordBotService/commands/status.js index 93815479..d74fab55 100644 --- a/server/src/services/discordBotService/commands/status.js +++ b/server/src/services/discordBotService/commands/status.js @@ -21,7 +21,7 @@ function createStatusCommand({ rovers, roverManager }) { } const records = roverId ? [single] : Array.from(rovers.values()).filter((entry) => roverManager.canReplayRoverId(entry?.id)); await message.reply({ - embeds: [buildBatteryStatusEmbed({ color: 0x2196f3, records, includeOi: true })], + embeds: [buildBatteryStatusEmbed({ color: 0x2196f3, records })], allowedMentions: { parse: [], repliedUser: false }, }); }; diff --git a/server/src/services/discordBotService/commands/timeStatus.js b/server/src/services/discordBotService/commands/timeStatus.js index 233a47c2..33f9a9b9 100644 --- a/server/src/services/discordBotService/commands/timeStatus.js +++ b/server/src/services/discordBotService/commands/timeStatus.js @@ -25,7 +25,23 @@ function createTimeStatusCommand({ config, discordConfig }) { return async function handleTimeStatusCommand(message) { const serverTimezone = getServerTimezone(); const now = new Date(); - const zones = ['UTC', 'America/Los_Angeles', 'America/Denver', 'America/Chicago', 'America/New_York']; + const zones = [ + 'UTC', + 'America/Los_Angeles', + 'America/Denver', + 'America/Chicago', + 'America/New_York', + 'America/Halifax', + 'Pacific/Honolulu', + 'Europe/London', + 'Europe/Berlin', + 'Asia/Tokyo', + 'Australia/Sydney', + 'Pacific/Auckland', + ]; + if (!zones.includes(serverTimezone)) { + zones.push(serverTimezone); + } const lines = zones.map((zone) => `${zone} — ${formatTimeInZone(now, zone)}${zone === serverTimezone ? ' **(server local timezone)**' : ''}`); const embed = buildEmbed({ title: 'Time Status', description: lines.join('\n'), color: 0x2196f3 }); embed.setFooter({ text: `Server local timezone: ${serverTimezone}` }); diff --git a/server/src/services/discordBotService/integrations/busEvents.js b/server/src/services/discordBotService/integrations/busEvents.js index 9f4dddbf..b5e4c715 100644 --- a/server/src/services/discordBotService/integrations/busEvents.js +++ b/server/src/services/discordBotService/integrations/busEvents.js @@ -112,22 +112,22 @@ function createBusEventHandler(deps) { announce({ channelId: channels.adminAlerts, color: 0xf0b651, title: 'Dock Guard Triggered', description: `${payload?.roverId} (${payload?.reasonText || 'undocked'}) for ${formatDuration(payload?.idleMs)}.` }); break; case 'battery.warn': - announce({ channelId: channels.adminAlerts, pingRoleId: roles.adminPing || null, color: 0xf0b651, content: buildBatteryCaption(type, rovers.get(payload?.roverId || 'unknown')), embeds: [buildBatteryStatusEmbed({ color: 0xf0b651, records: Array.from(rovers.values()), includeOi: false })] }); + announce({ channelId: channels.adminAlerts, pingRoleId: roles.adminPing || null, color: 0xf0b651, content: buildBatteryCaption(type, rovers.get(payload?.roverId || 'unknown')), embeds: [buildBatteryStatusEmbed({ color: 0xf0b651, records: Array.from(rovers.values()) })] }); break; case 'battery.urgent': - announce({ channelId: channels.adminAlerts, pingRoleId: roles.adminPing || null, color: 0xe53935, content: buildBatteryCaption(type, rovers.get(payload?.roverId || 'unknown')), embeds: [buildBatteryStatusEmbed({ color: 0xe53935, records: Array.from(rovers.values()), includeOi: false })] }); + announce({ channelId: channels.adminAlerts, pingRoleId: roles.adminPing || null, color: 0xe53935, content: buildBatteryCaption(type, rovers.get(payload?.roverId || 'unknown')), embeds: [buildBatteryStatusEmbed({ color: 0xe53935, records: Array.from(rovers.values()) })] }); break; case 'battery.docked': case 'battery.undocked': case 'battery.charging.start': - announce({ channelId: channels.adminAlerts, color: 0x2196f3, content: buildBatteryCaption(type, rovers.get(payload?.roverId || 'unknown')), embeds: [buildBatteryStatusEmbed({ color: 0x2196f3, records: Array.from(rovers.values()), includeOi: false })] }); + announce({ channelId: channels.adminAlerts, color: 0x2196f3, content: buildBatteryCaption(type, rovers.get(payload?.roverId || 'unknown')), embeds: [buildBatteryStatusEmbed({ color: 0x2196f3, records: Array.from(rovers.values()) })] }); break; case 'battery.charging.stop': case 'battery.locked': - announce({ channelId: channels.adminAlerts, color: 0xf0b651, content: buildBatteryCaption(type, rovers.get(payload?.roverId || 'unknown')), embeds: [buildBatteryStatusEmbed({ color: 0xf0b651, records: Array.from(rovers.values()), includeOi: false })] }); + announce({ channelId: channels.adminAlerts, color: 0xf0b651, content: buildBatteryCaption(type, rovers.get(payload?.roverId || 'unknown')), embeds: [buildBatteryStatusEmbed({ color: 0xf0b651, records: Array.from(rovers.values()) })] }); break; case 'battery.unlocked': - announce({ channelId: channels.adminAlerts, color: 0x4caf50, content: buildBatteryCaption(type, rovers.get(payload?.roverId || 'unknown')), embeds: [buildBatteryStatusEmbed({ color: 0x4caf50, records: Array.from(rovers.values()), includeOi: false })] }); + announce({ channelId: channels.adminAlerts, color: 0x4caf50, content: buildBatteryCaption(type, rovers.get(payload?.roverId || 'unknown')), embeds: [buildBatteryStatusEmbed({ color: 0x4caf50, records: Array.from(rovers.values()) })] }); break; case 'humanAlert.buttonPressed': { const imageBase64 = payload?.imageBase64 ? String(payload.imageBase64) : '';