Fetch vrc.tl events via Cloudflare Worker relay
vrc.tl returns 403 for the VPS IP range. Route lookups through a relay Worker (relay/), configured via vrctl.relayUrl/relaySecret in config.json. Also handle events without eventSlots/performers instead of crashing. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MrxnVXujrZqNrENxJZfVkU
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
const { Events } = require('discord.js');
|
||||
const axios = require('axios').default;
|
||||
const { vrctl } = require(process.env.CONFIG_FILE ? `../${process.env.CONFIG_FILE}` : '../config.json');
|
||||
|
||||
const SWARM_EVENTS_CHANNEL_ID = '1536067515115905155';
|
||||
const VRC_CROSSPOST_CHANNEL_ID = '1438261670916133055';
|
||||
@@ -19,15 +20,17 @@ module.exports = {
|
||||
|
||||
for (const eventId of eventIds) {
|
||||
try {
|
||||
const { data } = await axios.get(`https://vrc.tl/api/v1/events/${eventId}`);
|
||||
const { data } = await axios.get(`${vrctl.relayUrl}/events/${eventId}`, {
|
||||
headers: { 'x-relay-secret': vrctl.relaySecret },
|
||||
});
|
||||
const event = data.events?.[0];
|
||||
if (!event) continue;
|
||||
|
||||
const performersById = new Map(data.performers.map(performer => [performer.id, performer.name]));
|
||||
const performersById = new Map((data.performers ?? []).map(performer => [performer.id, performer.name]));
|
||||
|
||||
const lineup = [...event.eventSlots]
|
||||
const lineup = [...(event.eventSlots ?? [])]
|
||||
.sort((a, b) => a.start - b.start)
|
||||
.flatMap(slot => [...slot.performers]
|
||||
.flatMap(slot => [...(slot.performers ?? [])]
|
||||
.sort((a, b) => a.order - b.order)
|
||||
.map(slotPerformer => performersById.get(slotPerformer.performerId)))
|
||||
.filter(Boolean);
|
||||
|
||||
Reference in New Issue
Block a user