fix(discord): convert readMessages timestamps to local time (#240)
Co-authored-by: Cash Williams <cashwilliams@gmail.com>
This commit is contained in:
@@ -24,6 +24,32 @@ type ActionGate = (
|
|||||||
defaultValue?: boolean,
|
defaultValue?: boolean,
|
||||||
) => boolean;
|
) => boolean;
|
||||||
|
|
||||||
|
function formatDiscordTimestamp(ts?: string | null): string | undefined {
|
||||||
|
if (!ts) return undefined;
|
||||||
|
const date = new Date(ts);
|
||||||
|
if (Number.isNaN(date.getTime())) return undefined;
|
||||||
|
|
||||||
|
const yyyy = String(date.getFullYear()).padStart(4, "0");
|
||||||
|
const mm = String(date.getMonth() + 1).padStart(2, "0");
|
||||||
|
const dd = String(date.getDate()).padStart(2, "0");
|
||||||
|
const hh = String(date.getHours()).padStart(2, "0");
|
||||||
|
const min = String(date.getMinutes()).padStart(2, "0");
|
||||||
|
|
||||||
|
// getTimezoneOffset() is minutes *behind* UTC. Flip sign to get ISO offset.
|
||||||
|
const offsetMinutes = -date.getTimezoneOffset();
|
||||||
|
const sign = offsetMinutes >= 0 ? "+" : "-";
|
||||||
|
const absOffsetMinutes = Math.abs(offsetMinutes);
|
||||||
|
const offsetH = String(Math.floor(absOffsetMinutes / 60)).padStart(2, "0");
|
||||||
|
const offsetM = String(absOffsetMinutes % 60).padStart(2, "0");
|
||||||
|
|
||||||
|
const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
||||||
|
const tzSuffix = tz ? `{${tz}}` : "";
|
||||||
|
|
||||||
|
// Compact ISO-like *local* timestamp with minutes precision.
|
||||||
|
// Example: 2025-01-02T03:04-08:00{America/Los_Angeles}
|
||||||
|
return `${yyyy}-${mm}-${dd}T${hh}:${min}${sign}${offsetH}:${offsetM}${tzSuffix}`;
|
||||||
|
}
|
||||||
|
|
||||||
export async function handleDiscordMessagingAction(
|
export async function handleDiscordMessagingAction(
|
||||||
action: string,
|
action: string,
|
||||||
params: Record<string, unknown>,
|
params: Record<string, unknown>,
|
||||||
@@ -133,7 +159,12 @@ export async function handleDiscordMessagingAction(
|
|||||||
after: readStringParam(params, "after"),
|
after: readStringParam(params, "after"),
|
||||||
around: readStringParam(params, "around"),
|
around: readStringParam(params, "around"),
|
||||||
});
|
});
|
||||||
return jsonResult({ ok: true, messages });
|
const formattedMessages = messages.map((message) => ({
|
||||||
|
...message,
|
||||||
|
timestamp:
|
||||||
|
formatDiscordTimestamp(message.timestamp) ?? message.timestamp,
|
||||||
|
}));
|
||||||
|
return jsonResult({ ok: true, messages: formattedMessages });
|
||||||
}
|
}
|
||||||
case "sendMessage": {
|
case "sendMessage": {
|
||||||
if (!isActionEnabled("messages")) {
|
if (!isActionEnabled("messages")) {
|
||||||
|
|||||||
Reference in New Issue
Block a user