mirror of
https://github.com/legop3/MultiRoombaRover.git
synced 2026-09-16 01:21:20 -04:00
whue
This commit is contained in:
@@ -23,14 +23,6 @@ function formatChargeState(batteryState) {
|
|||||||
return `${chargeText} (${percentText})`;
|
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) {
|
function formatOiEmoji(oiMode) {
|
||||||
if (oiMode === 'full') return '🕹️';
|
if (oiMode === 'full') return '🕹️';
|
||||||
if (oiMode === 'safe') 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 embed = new EmbedBuilder().setTitle('Rover Battery Status').setColor(color).setTimestamp(new Date());
|
||||||
const snapshots = records.map((entry) => buildRoverStatusSnapshot(entry)).filter(Boolean);
|
const snapshots = records.map((entry) => buildRoverStatusSnapshot(entry)).filter(Boolean);
|
||||||
if (!snapshots.length) {
|
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 lockLabel = snapshot.locked ? `locked${snapshot.lockReason ? ` (${snapshot.lockReason})` : ''}` : 'unlocked';
|
||||||
const dockLabel = snapshot.docked ? 'docked' : 'undocked';
|
const dockLabel = snapshot.docked ? 'docked' : 'undocked';
|
||||||
const chargingLabel = snapshot.charging ? `charging (${snapshot.chargingLabel})` : 'not charging';
|
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 = [
|
const lines = [
|
||||||
`${formatDockEmoji(snapshot.docked)} Dock: ${dockLabel}`,
|
`Dock: ${dockLabel}`,
|
||||||
`${formatChargeEmoji(snapshot.charging)} Charging: ${chargingLabel}`,
|
`Charging: ${chargingLabel}`,
|
||||||
`${formatBatteryEmoji(snapshot.batteryState)} Battery: ${formatChargeState(snapshot.batteryState)}`,
|
`Battery: ${formatChargeState(snapshot.batteryState)}`,
|
||||||
`🔌 Voltage: ${formatVoltage(snapshot.voltageMv)}`,
|
`Voltage: ${formatVoltage(snapshot.voltageMv)}`,
|
||||||
`📈 Current: ${formatCurrent(snapshot.currentMa)}`,
|
`Current: ${formatCurrent(snapshot.currentMa)}`,
|
||||||
];
|
];
|
||||||
if (includeOi) {
|
|
||||||
lines.push(`${formatOiEmoji(snapshot.oiMode)} OI mode: ${snapshot.oiMode}`);
|
lines.push(`${formatOiEmoji(snapshot.oiMode)} OI mode: ${snapshot.oiMode}`);
|
||||||
}
|
lines.push(`Lock: ${lockLabel}`);
|
||||||
lines.push(`${formatLockEmoji(snapshot.locked)} Lock: ${lockLabel}`);
|
|
||||||
|
|
||||||
embed.addFields({
|
embed.addFields({
|
||||||
name: `${header} ${snapshot.name}`,
|
name: snapshot.name,
|
||||||
value: lines.join('\n'),
|
value: lines.join('\n'),
|
||||||
inline: true,
|
inline: true,
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ function createStatusCommand({ rovers, roverManager }) {
|
|||||||
}
|
}
|
||||||
const records = roverId ? [single] : Array.from(rovers.values()).filter((entry) => roverManager.canReplayRoverId(entry?.id));
|
const records = roverId ? [single] : Array.from(rovers.values()).filter((entry) => roverManager.canReplayRoverId(entry?.id));
|
||||||
await message.reply({
|
await message.reply({
|
||||||
embeds: [buildBatteryStatusEmbed({ color: 0x2196f3, records, includeOi: true })],
|
embeds: [buildBatteryStatusEmbed({ color: 0x2196f3, records })],
|
||||||
allowedMentions: { parse: [], repliedUser: false },
|
allowedMentions: { parse: [], repliedUser: false },
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -25,7 +25,23 @@ function createTimeStatusCommand({ config, discordConfig }) {
|
|||||||
return async function handleTimeStatusCommand(message) {
|
return async function handleTimeStatusCommand(message) {
|
||||||
const serverTimezone = getServerTimezone();
|
const serverTimezone = getServerTimezone();
|
||||||
const now = new Date();
|
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 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 });
|
const embed = buildEmbed({ title: 'Time Status', description: lines.join('\n'), color: 0x2196f3 });
|
||||||
embed.setFooter({ text: `Server local timezone: ${serverTimezone}` });
|
embed.setFooter({ text: `Server local timezone: ${serverTimezone}` });
|
||||||
|
|||||||
@@ -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)}.` });
|
announce({ channelId: channels.adminAlerts, color: 0xf0b651, title: 'Dock Guard Triggered', description: `${payload?.roverId} (${payload?.reasonText || 'undocked'}) for ${formatDuration(payload?.idleMs)}.` });
|
||||||
break;
|
break;
|
||||||
case 'battery.warn':
|
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;
|
break;
|
||||||
case 'battery.urgent':
|
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;
|
break;
|
||||||
case 'battery.docked':
|
case 'battery.docked':
|
||||||
case 'battery.undocked':
|
case 'battery.undocked':
|
||||||
case 'battery.charging.start':
|
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;
|
break;
|
||||||
case 'battery.charging.stop':
|
case 'battery.charging.stop':
|
||||||
case 'battery.locked':
|
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;
|
break;
|
||||||
case 'battery.unlocked':
|
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;
|
break;
|
||||||
case 'humanAlert.buttonPressed': {
|
case 'humanAlert.buttonPressed': {
|
||||||
const imageBase64 = payload?.imageBase64 ? String(payload.imageBase64) : '';
|
const imageBase64 = payload?.imageBase64 ? String(payload.imageBase64) : '';
|
||||||
|
|||||||
Reference in New Issue
Block a user