diff --git a/src/d2m/converters/message-to-event.js b/src/d2m/converters/message-to-event.js index f192aff..4314a0e 100644 --- a/src/d2m/converters/message-to-event.js +++ b/src/d2m/converters/message-to-event.js @@ -883,32 +883,47 @@ async function messageToEvent(message, guild, options = {}, di) { // Then scheduled events if (message.content && di?.snow) { - for (const match of [...message.content.matchAll(/discord\.gg\/([A-Za-z0-9]+)\?event=([0-9]{18,})/g)]) { // snowflake has minimum 18 because the events feature is at least that old + for (const match of [...message.content.matchAll(/discord\.gg\/([A-Za-z0-9]+)\?event=([0-9]{18,})|\/events\/([0-9]+)\/([0-9]{18,})/g)]) { // snowflake has minimum 18 because the events feature is at least that old + /** @type {DiscordTypes.APIGuildScheduledEvent | undefined} */ + let event let invite - try { - invite = await di.snow.invite.getInvite(match[1], {guild_scheduled_event_id: match[2]}) - } catch (e) { - // Skip expired/invalid invites and events - if (e.message === "Unknown Invite") { - break - } else { + + if (match[1]) { + try { + invite = await di.snow.invite.getInvite(match[1], {guild_scheduled_event_id: match[2]}) + event = invite.guild_scheduled_event + } catch (e) { + // Skip expired/invalid invites and events + if (e.message === "Unknown Invite") { + break + } else { + throw e + } + } + } else if (match[3]) { + try { + event = await di.snow.guildScheduledEvent.getGuildScheduledEvent(match[3], match[4]) + } catch (e) { throw e } } - const event = invite.guild_scheduled_event if (!event) continue // the event ID provided was not valid - const formatter = new Intl.DateTimeFormat("en-NZ", {month: "long", day: "numeric", hour: "numeric", minute: "2-digit", timeZoneName: "shortGeneric", timeZone: reg.ooye.time_zone}) // 9 June at 3:00 pm NZT const rep = new mxUtils.MatrixStringBuilder() + const unixSeconds = Math.floor(new Date(event.scheduled_start_time).getTime() / 1000) // Add time if (event.scheduled_end_time) { - // @ts-ignore - no definition available for formatRange - rep.addParagraph(`Scheduled Event - ${formatter.formatRange(new Date(event.scheduled_start_time), new Date(event.scheduled_end_time))}`) + const formatter = new Intl.DateTimeFormat("en-NZ", {month: "long", day: "numeric", hour: "numeric", minute: "2-digit", timeZoneName: "shortGeneric", timeZone: reg.ooye.time_zone}) // 9 June at 3:00 pm NZT + var displayTime = formatter.formatRange(new Date(event.scheduled_start_time), new Date(event.scheduled_end_time)) } else { - rep.addParagraph(`Scheduled Event - ${formatter.format(new Date(event.scheduled_start_time))}`) + var displayTime = discordTime.convertDiscordTime(unixSeconds, "F") } + rep.addParagraph( + `Scheduled Event - ${displayTime}`, + tag`Scheduled Event - ${displayTime}` + ) // Add details rep.addLine(`## ${event.name}`, tag`${event.name}`) @@ -917,7 +932,7 @@ async function messageToEvent(message, guild, options = {}, di) { // Add location if (event.entity_metadata?.location) { rep.addParagraph(`📍 ${event.entity_metadata.location}`) - } else if (invite.channel?.name) { + } else if (invite?.channel?.name) { const roomID = select("channel_room", "room_id", {channel_id: invite.channel.id}).pluck().get() if (roomID) { const via = await getViaServersMemo(roomID)