Fix race conditions and duplicate stars in starboard
This commit is contained in:
parent
1484f6b9a7
commit
e1e1854041
5 changed files with 63 additions and 9 deletions
|
@ -2,6 +2,10 @@ import { Client, GuildTextableChannel, Message } from "eris";
|
|||
import { noop } from "../../../utils";
|
||||
import { createStarboardPseudoFooterForMessage } from "./createStarboardPseudoFooterForMessage";
|
||||
import { TStarboardOpts } from "../types";
|
||||
import Timeout = NodeJS.Timeout;
|
||||
|
||||
const DEBOUNCE_DELAY = 1000;
|
||||
const debouncedUpdates: Record<string, Timeout> = {};
|
||||
|
||||
export async function updateStarboardMessageStarCount(
|
||||
starboard: TStarboardOpts,
|
||||
|
@ -10,8 +14,16 @@ export async function updateStarboardMessageStarCount(
|
|||
starEmoji: string,
|
||||
starCount: number,
|
||||
) {
|
||||
const embed = starboardMessage.embeds[0]!;
|
||||
embed.fields!.shift(); // Remove pseudo footer
|
||||
embed.fields!.push(createStarboardPseudoFooterForMessage(starboard, originalMessage, starEmoji, starCount)); // Create new pseudo footer
|
||||
await starboardMessage.edit({ embed });
|
||||
const key = `${originalMessage.id}-${starboardMessage.id}`;
|
||||
if (debouncedUpdates[key]) {
|
||||
clearTimeout(debouncedUpdates[key]);
|
||||
}
|
||||
|
||||
debouncedUpdates[key] = setTimeout(() => {
|
||||
delete debouncedUpdates[key];
|
||||
const embed = starboardMessage.embeds[0]!;
|
||||
embed.fields!.shift(); // Remove pseudo footer
|
||||
embed.fields!.push(createStarboardPseudoFooterForMessage(starboard, originalMessage, starEmoji, starCount)); // Create new pseudo footer
|
||||
starboardMessage.edit({ embed });
|
||||
}, DEBOUNCE_DELAY);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue