101}
102
103// Add emoji reaction to message - RATE LIMITED VERSION
104async function addReaction(channelId: string, messageId: string, emoji: string) {
105 const routeKey = `/channels/${channelId}/messages/${messageId}/reactions`;
106
107 return rateLimitService.executeWithRateLimit(routeKey, async () => {
108 const url = `${API_BASE}/channels/${channelId}/messages/${messageId}/reactions/${emoji}/@me`;
109 const token = Deno.env.get("DISCORD_BOT_TOKEN");
110
123 if (!response.ok) {
124 let errorText = await response.text();
125 console.error(`Error adding reaction: Status ${response.status}, Body: ${errorText}`);
126 throw new Error(`Failed to add reaction: ${response.status}`);
127 }
128
129 // Successful reaction add
130 return true;
131 });
195 type: 0, // Role type
196 allow: "1024", // VIEW_CHANNEL, READ_MESSAGE_HISTORY
197 deny: "64", // ADD_REACTIONS
198 },
199 {
201 type: 0, // Role type
202 allow: "1024", // VIEW_CHANNEL, READ_MESSAGE_HISTORY
203 deny: "64", // ADD_REACTIONS
204 },
205 {
271}
272
273// Process variants for a map and add emoji reactions
274async function processMapVariants(messageId: string, channelId: string, map: MapInfo, variantOptions: any) {
275 const mapMetaVariants: string[] = [];
279 if (variantOptions.EnableDawn && map.MapDetails.Dawn) {
280 if (map.MapDetails.Dawn === "meta") {
281 console.log(`${map.MapName} Dawn variant is meta, not adding reaction`);
282 mapMetaVariants.push(`${map.MapName} Dawn`);
283 mapEnabledVariants.push("Dawn");
284 } else if (map.MapDetails.Dawn === "enabled") {
285 await addReaction(channelId, messageId, encodeURIComponent(EMOJIS.DAWN));
286 mapEnabledVariants.push("Dawn");
287 }
291 if (variantOptions.EnableDay && map.MapDetails.Day) {
292 if (map.MapDetails.Day === "meta") {
293 console.log(`${map.MapName} Day variant is meta, not adding reaction`);
294 mapMetaVariants.push(`${map.MapName} Day`);
295 mapEnabledVariants.push("Day");
296 } else if (map.MapDetails.Day === "enabled") {
297 await addReaction(channelId, messageId, encodeURIComponent(EMOJIS.DAY));
298 mapEnabledVariants.push("Day");
299 }
303 if (variantOptions.EnableDusk && map.MapDetails.Dusk) {
304 if (map.MapDetails.Dusk === "meta") {
305 console.log(`${map.MapName} Dusk variant is meta, not adding reaction`);
306 mapMetaVariants.push(`${map.MapName} Dusk`);
307 mapEnabledVariants.push("Dusk");
308 } else if (map.MapDetails.Dusk === "enabled") {
309 await addReaction(channelId, messageId, encodeURIComponent(EMOJIS.DUSK));
310 mapEnabledVariants.push("Dusk");
311 }
315 if (variantOptions.EnableNight && map.MapDetails.Night) {
316 if (map.MapDetails.Night === "meta") {
317 console.log(`${map.MapName} Night variant is meta, not adding reaction`);
318 mapMetaVariants.push(`${map.MapName} Night`);
319 mapEnabledVariants.push("Night");
320 } else if (map.MapDetails.Night === "enabled") {
321 await addReaction(channelId, messageId, encodeURIComponent(EMOJIS.NIGHT));
322 mapEnabledVariants.push("Night");
323 }
327 if (variantOptions.EnableFog && map.MapDetails.Fog) {
328 if (map.MapDetails.Fog === "meta") {
329 console.log(`${map.MapName} Fog variant is meta, not adding reaction`);
330 mapMetaVariants.push(`${map.MapName} Fog`);
331 mapEnabledVariants.push("Fog");
332 } else if (map.MapDetails.Fog === "enabled") {
333 await addReaction(channelId, messageId, encodeURIComponent(EMOJIS.FOG));
334 mapEnabledVariants.push("Fog");
335 }
339 if (variantOptions.EnableOvercast && map.MapDetails.Overcast) {
340 if (map.MapDetails.Overcast === "meta") {
341 console.log(`${map.MapName} Overcast variant is meta, not adding reaction`);
342 mapMetaVariants.push(`${map.MapName} Overcast`);
343 mapEnabledVariants.push("Overcast");
344 } else if (map.MapDetails.Overcast === "enabled") {
345 await addReaction(channelId, messageId, encodeURIComponent(EMOJIS.OVERCAST));
346 mapEnabledVariants.push("Overcast");
347 }
351 if (variantOptions.EnableRain && map.MapDetails.Rain) {
352 if (map.MapDetails.Rain === "meta") {
353 console.log(`${map.MapName} Rain variant is meta, not adding reaction`);
354 mapMetaVariants.push(`${map.MapName} Rain`);
355 mapEnabledVariants.push("Rain");
356 } else if (map.MapDetails.Rain === "enabled") {
357 await addReaction(channelId, messageId, encodeURIComponent(EMOJIS.RAIN));
358 mapEnabledVariants.push("Rain");
359 }
363 if (variantOptions.EnableSandstorm && map.MapDetails.Sandstorm) {
364 if (map.MapDetails.Sandstorm === "meta") {
365 console.log(`${map.MapName} Sandstorm variant is meta, not adding reaction`);
366 mapMetaVariants.push(`${map.MapName} Sandstorm`);
367 mapEnabledVariants.push("Sandstorm");
368 } else if (map.MapDetails.Sandstorm === "enabled") {
369 await addReaction(channelId, messageId, encodeURIComponent(EMOJIS.SAND));
370 mapEnabledVariants.push("Sandstorm");
371 }
375 if (variantOptions.EnableSnowstorm && map.MapDetails.Snowstorm) {
376 if (map.MapDetails.Snowstorm === "meta") {
377 console.log(`${map.MapName} Snowstorm variant is meta, not adding reaction`);
378 mapMetaVariants.push(`${map.MapName} Snowstorm`);
379 mapEnabledVariants.push("Snowstorm");
380 } else if (map.MapDetails.Snowstorm === "enabled") {
381 await addReaction(channelId, messageId, encodeURIComponent(EMOJIS.SNOW));
382 mapEnabledVariants.push("Snowstorm");
383 }
387}
388
389// Populate channel with map options and add reactions
390async function populateChannelWithMaps(
391 channel: any,
662 const initialMessage = await sendInitialEmbed(channel, initialEmbedData);
663
664 // Populate channel with map options and reactions
665 const { metaVariants, enabledVariants } = await populateChannelWithMaps(
666 channel,